apktool를 사용하여 디버깅 가능한 APK 생성.

Netbeans를 이용하여 안드로이드 앱에 대해서 실행 단계에 코드 디버깅을 하기 위하여  apk 파일을 디버깅 모드로 재빌드 하는 과정에 대한 글입니다.

apktool를 사용하여  apk 파일을 디코딩할 때 1.4.2이상 버전을 사용하면 Netbeans에서 라인 단위 브뽀을 설정할 수 없습니다. 1.4.1 버전을 사용하시면 디코딩된 파일의 확장자가  .smali가 아닌 .java로 나옵니다.

C:\Documents and Settings\franc3sco\바탕 화면>java -jar d:\JAVA\apktool_1.4.1\apktool.jar d -d “Unblock Me.apk” out
I: Baksmaling…
testI: Loading resource table…
I: Loaded.
I: Loading resource table from file: C:\Documents and Settings\franc3sco\apktool\framework\1.apk
I: Loaded.
I: Decoding file-resources…
I: Decoding values*/* XMLs…
I: Done.
I: Copying assets and libs…

C:\Documents and Settings\franc3sco\바탕 화면>dir out
C 드라이브의 볼륨에는 이름이 없습니다.
볼륨 일련 번호: 2869-24AC

C:\Documents and Settings\franc3sco\바탕 화면\out 디렉터리

2012-10-17 오후 01:16 <DIR> .
2012-10-17 오후 01:16 <DIR> ..
2012-10-17 오후 01:16 980 AndroidManifest.xml
2012-10-17 오후 01:16 93 apktool.yml
2012-10-17 오후 01:16 <DIR> assets
2012-10-17 오후 01:16 <DIR> res
2012-10-17 오후 01:16 <DIR> smali
2개 파일 1,073 바이트
5개 디렉터리 29,831,172,096 바이트 남음

C:\Documents and Settings\franc3sco\바탕 화면>dir out\smali\com\wqq\unblockme\gameplay\
C 드라이브의 볼륨에는 이름이 없습니다.
볼륨 일련 번호: 2869-24AC

C:\Documents and Settings\franc3sco\바탕 화면\out\smali\com\wqq\unblockme\gameplay 디렉터리

2012-10-17 오후 01:16 <DIR> .
2012-10-17 오후 01:16 <DIR> ..
2012-10-17 오후 01:16 1,903 GameLayer$1.java
2012-10-17 오후 01:16 1,205 GameLayer$2.java
2012-10-17 오후 01:16 1,899 GameLayer$3.java
2012-10-17 오후 01:16 1,205 GameLayer$4.java
2012-10-17 오후 01:16 2,267 GameLayer$5.java
2012-10-17 오후 01:16 1,207 GameLayer$6.java
2012-10-17 오후 01:16 2,326 GameLayer$7.java
2012-10-17 오후 01:16 1,205 GameLayer$8.java
2012-10-17 오후 01:16 1,497 GameLayer$Block.java
2012-10-17 오후 01:16 146,164 GameLayer.java
2012-10-17 오후 01:16 12,458 PuzzleClearedLayer.java
11개 파일 173,336 바이트
2개 디렉터리 29,831,172,096 바이트 남음

C:\Documents and Settings\franc3sco\바탕 화면>type out\AndroidManifest.xml
<?xml version=”1.0″ encoding=”utf-8″?>
<manifest android:versionCode=”5″ android:versionName=”1.0.4″ package=”com.wqq.unblockmefree”
xmlns:android=”http://schemas.android.com/apk/res/android”&gt;
<application android:label=”@string/app_name” android:icon=”@drawable/icon” android:debuggable=”true“>
<activity android:label=”@string/app_name” android:name=”.UnblockMeFreeActivity” android:launchMode=”singleTask”
android:screenOrientation=”portrait” android:configChanges=”keyboardHidden|orientation”>
<intent-filter>
<action android:name=”android.intent.action.MAIN” />
<category android:name=”android.intent.category.LAUNCHER” />
</intent-filter>
</activity>
<meta-data android:name=”ADMOB_PUBLISHER_ID” android:value=”a14caf227700264″ />
</application>
<uses-sdk android:minSdkVersion=”3″ />
<uses-permission android:name=”android.permission.INTERNET” />
</manifest>

C:\Documents and Settings\franc3sco\바탕 화면>java -jar d:\JAVA\apktool_1.4.1\apktool.jar b -d out
I: Checking whether sources has changed…
I: Smaling…
I: Checking whether resources has changed…
I: Building resources…
I: Building apk file…

C:\Documents and Settings\franc3sco\바탕 화면>

C:\Documents and Settings\franc3sco\바탕 화면\apk-sign>java -jar signapk.jar testkey.x509.pem testkey.pk8 “Unblock Me.ap
k” “Unblock Me_signed.apk”

C:\Documents and Settings\franc3sco\바탕 화면\apk-sign>java -jar signapk.jar testkey.x509.pem testkey.pk8 “Unblock Me.ap
k” “Unblock Me_signed.apk”

DDMS를 실행하고, 실행 GUI 화면에서 디버깅 대상 앱을 선택 함.

C:\Documents and Settings\franc3sco\android-sdks\tools>ddms.bat

Netbeans를 실행하여, 신규 프로젝트 생성 및 Debug > Attach Debugger를 선택하여 HOST : 127.0.0.1, PORT : 8700 입력.

File > New Project > Java Project With Existing Source

Project Folder에 디코딩할 때 생성한 폴더 지정하기 전에 디코딩하여 빌드했을 때 생성한 out\dist 와 out/build 디렉터리 삭제. 삭제하고나서 Project Folder에 디코딩 대상 디렉터리 지정(예, out)

Source Package Folder에 out\smali를 지정 함

 

Project > Libraries에서 마우스 오른쪽 버튼 클릭 후 Add Jar/Folder를 선택하여 android.jar를 지정 함.

 

그리고 나서, Debug>Attach Debugger를 선택 함…

Advertisements

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중

%d 블로거가 이것을 좋아합니다: