當前位置:編程學習大全網 - 源碼下載 - cocos2dx 引擎 編譯的apk 能反編譯嗎

cocos2dx 引擎 編譯的apk 能反編譯嗎

1.對apk使用apktool反編譯出可調試的smali代碼到out文件夾,目前apktool最新的版本是2.0.0b7。

java -jar apktool_2.0.0b7.jar d -d test.apk -o out

這裏必須使用-d參數,這樣反編譯出來的代碼後綴均是java,因為只有java文件才能被eclipse/netbeans識別調試。

2.設置調試標記和尋找主類

在輸出的out文件夾中,用文本編輯工具打開AndroidManifest.xml,在application節點中設置屬性android:debuggable="true"。

繼續在AndroidManifest.xml中,搜索以下關鍵字

<intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter>

找到含有以上信息的activity節點,記錄其android:name屬性的值,該值則為其應用的主類。如下面的例子,主類為com.acids.helloworld.MainActivity。

<?xml version="1.0" encoding="utf-8" standalone="no"?> <manifest xmlns:android="/apk/res/android" package="com.acids.helloworld"> <application android:debuggable="true" android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme"> <activity android:label="@string/app_name" android:name="com.acids.helloworld.MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> </application> </manifest>

3.在主類的onCreate事件中添加調試等待。

用文本編輯工具打開主類文件,找到onCreate方法,在第壹句前插入invoke-static {}, Landroid/os/Debug;->waitForDebugger()V,記得添加a=0;//的前綴保持上下壹致,結果如下:

a=0;// # virtual methods a=0;// .method protected onCreate(Landroid/os/Bundle;)V a=0;// invoke-static {}, Landroid/os/Debug;->waitForDebugger()V a=0;// a=0;// .locals 1 a=0;// .param p1, "savedInstanceState" # Landroid/os/Bundle; a=0;// a=0;// .prologue a=0;// .line 11 a=0;// invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V

4.保存文件,用apktool重新編譯打包為debug.apk

java -jar apktool_2.0.0b7.jar b -d out -o debug.apk

5.對debug.apk簽名(需要下載簽名工具),我把簽名工具放在了signapk文件夾下,生成debug.sign.apk

java -jar .\signapk\signapk.jar .\signapk\testkey.x509.pem .\signapk\testkey.pk8 .\debug.apk .\debug.sign.apk

6.上傳debug.sign.apk至手機或模擬器,然後安裝並運行。這時妳會看到程序運行後停留在白屏界面,這時不要動設備和退出程序,因為程序現在是運行到剛才添加的waitForDebugger代碼這裏,這行代碼的意思是壹直掛起中,等待調試器。

下面開始設置實時調試的環境。

7.啟動eclipse,構建java項目

1) File -> New -> Project -> Java Project -> Next

2) Project Name隨便起,Use default location選項去掉,Location選擇out文件夾,然後Next

3) 把smali文件夾設為Source Folder,然後Finish

8.在eclipse中,打開第2步找到的主類,並找到onCreate方法,在waitForDebugger後面的第壹個方法開始添加斷點。如下圖

9.打開DDMS(路徑在%android-sdks%\tools\ddms.bat),如果在第6步中運行了修改後的程序,在DDMS的設備列表中會顯示可以調試的程序。

對應程序最後壹欄為8600/8700,其中8600即為調試該程序的端口。

10.現在要做的就是把代碼與調試程序關聯即可。 回到eclipse,配置遠程調試

1) 菜單Run -> Debug -> Debug Configurations

2) 雙擊Remote Java Application,Host處默認localhost就行,Port填第10步得到的8600,然後Apply -> Debug。

11.這時eclipse自動切換至debug視圖,並看到程序已經運行並中斷在下壹行可執行的代碼了,相關的變量可以直接查看了。

  • 上一篇:青島啤酒街美食指南青島啤酒街哪家好吃
  • 下一篇:調查問卷怎麽做?
  • copyright 2024編程學習大全網