난독화? 또는 흐리게하다?
어떤 표현인지는 잘 모르겠으나, 자바 프로젝트에서는 많이 사용하고 있는 방법인듯 하다.
아마도 디컴파일을 이용한 소스코드를 보안을 목적으로 하는듯 하다.
정확히 어떤 기능을 하는지는 아직 파악 못하고 있다.
나중에 자세히 알게 되면 추가적인 코멘트를 하리...
우선 환경 설정이 중요하다.
아래와 같이 다음 3가지가 준비되어있어야 한다.
ant, java, android
이 3가지의 환경을 아래처럼 잘 설정해주면 된다.
ant, java, android 설치 및 환경설정은 알아서 잘 해주길 바란다.
0. 환경설정
- ANT_HOME
- ANDROID_HOME
+ /Users/erato/android-sdk-mac_x86
- JAVA_HOME
+ Mac OsX에서의 JAVA_HOME은 /Library/Java/Home이다.
- PATH
+ export=$ANDROID_HOME/tools:$ANDROID_HOME/platforms/android-8/tools:$PATH
1. pro_guard 설치
- 다운로드
- 압축 해제후 %JAVA_HOME%/lib 에 proguard.jar 파일 복사2.android update project
- 아래 명령어를 command line에서 실행한다.
android update project --path 'project_name'
$ android update project --path ./MediaPlayerTest/
3. ant release
- command line에서 다음을 실행한다.
$ ant release
4. key 생성
- 여기를 참고하여 key를 생성.
5. local.properties에 생성한 key를 설정 및 proguard 경로 지정.
- key.store=/workspace/android_keystore/MediaPlayerTest.keystore
- key.alias=MediaPlayerTestKey
- proguard.dir=/workspace/proguard4.6
6. default.properties에 다음을 추가.
- external.libs.dir=libs
< 밑에 proguard.config는 추가하지 말자. >
- proguard.config=proguard.cfg
[출처] 안드로이드 이클립스에서 Proguard(프로가드) 사용하기|작성자 휴우
7. 빌드 도우미 파일들 이동
- 아래에 첨부된 파일을 build.xml이 있는 폴더(프로젝트 폴더)로 복사.
- add-proguard-release.xml
- procfg.txt
8. build.xml 수정
- build.xml 파일을 열어서 맨 윗라인에 아래 내용을 추가.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE project [<!ENTITY add-proguard-release SYSTEM "add-proguard-release.xml">]>
<project name="프로젝트이름" default="help">
&add-proguard-release;
</project>
9. 난독화 제외
- procfg.txt 파일을 수정
- keep public class * [my classname]
- command line에서 다음 명령으로 실행
$ ant release
11. 빌드가 성공적으로 되면?
- <project folder> 밑에 obf라는 폴더가 생기며 다음의 파일이 추가된다.
- dump.txt : 여러분의 어플리케이션에서 사용중인 클래스들의 내부 구조에 대한 대략적인 정보를 나타냅니다. 말그대로 난독화 하기 위해 소스를 분석하는 과정에서 나오는 덤프값들이겠조. 뭐.
- mapping.txt : 이 파일은 중요합니다. 난독화 과정에서 기존 클래스 혹은 메서드가 어떤 새로운 난독화된 이름으로 매핑되었는지 그 목록을 표시해 줍니다. 난독화 된 어플리케이션에 발생하는 로그나, 스택 트레이스 들을 분석하기 위해서 꼭 챙겨 두셔야 합니다.
- seeds.txt : 난독화 되지 않은 클래스와 멤버들의 목록입니다.
- usage.txt : 사용되지 않기 때문에, apk 파일에서 제거된 코드들의 목록입니다. 혹시 제거되서는 안되는 메서드나 클래스가 제거되었는지 꼭 확인해 봐야 합니다.
[출처] 안드로이드 이클립스에서 Proguard(프로가드) 사용하기|작성자 휴우
참고) 안드로이드 블로그(http://android-developers.blogspot.com/2010/09/proguard-android-and-licensing-server.html)에서 배포한 add-proguard-release.xml로 적용시켜 해보니 빌드가 제대로 안되더군요. local.properties의 프로가드 path를 재설정해도 실패해서 add-proguard-release.xml를 수정하였습니다.(보통의 경우 프로가드 다운로드 받아 압축을 풀 경우 lib 폴더 안에 proguard.jar가 있습니다.)
add-proguard-release.xml 수정내용
19 line : <property name="proguard-jar" value="${proguard.dir}/lib/proguard.jar" />
Tip2>
또한 빌드중에 아래와 같은 에러가 발생한다면 아래처럼 해결하면 된당~~
그래도 혹시나 또 문제가 발생할까봐 mac에서 빌드에 성공했던 build.xml과 add-proguard-release.xml, default.properties, local.properties를 첨부한다. FIY~
add-proguard-release.xml:35: Expecting class path separator ':' before '{' in argument number 1
Expecting class path separator ':' before '{' in argument number 1
12 |
BUILD FAILED/path/to/add-proguard-release.xml:35: Expecting class path separator ':' before '{' in argument number 1 |
How to fix (method #1)
add following line to your default.properties
file:
1 |
external.libs.dir=libs |
How to fix (method #2)
edit add-proguard-release.xml
and replace
1 |
<pathelement path="${external.libs.dir}"/> |
with
1 |
<!--pathelement path="${external.libs.dir}"/--> |
Tip3>
혹시 빌드중에 이런 에러가 발생하면 링크할 라이브러리를 넣어달라는거다
문제 해결은 /Users/erato/Documents/workspace/OfuTVManager/add-proguard-release.xml:35: Please correct the above warnings first.를 참고해보면 간단하다.
add-proguard-release.xml을 열어서 35번째 라인에 다음처럼 라이브러리를 추가해준다.
-libraryjars ${libraryjarpath} : /TVCommon/libs/com.sigma.android.jar
수정한 add-proguard-release.xml를 첨부하니 참고하면 되겠다.
Tip4>
혹시 proguard가 동작하지 않는것처럼 보이면
AndroidManifest.xml를 열어서 다음을 확인해보자.
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
삭제하던가 아니면 ant debug로 실행하던가..
근데 release할거니까 삭제가 맞겠지? ^^
'Programming > Android' 카테고리의 다른 글
안드로이드 jack 빌드 에러 (0) | 2016.07.04 |
---|---|
이클립스에서 안드로이드 소스코드 연결해서 보기 (0) | 2011.09.01 |
에뮬레이터와 Socket 통신 (1) | 2011.07.06 |
froyo 빌드 (0) | 2010.07.26 |
GridView에 이미지 올리기 (0) | 2010.07.04 |