1. 程式人生 > >重新編譯生成R檔案

重新編譯生成R檔案

1.生成smali資料夾

使用打包指令碼生成一個合併ACfunSDK後的無簽名apk包,使用apktool d xx.apk解壓apk,生成smali資料夾

2.生成R檔案

把步驟1獲得的AndroidManifest.xml檔案和res資料夾複製到一個新建的資料夾裡,使用aapt命令生成R.java檔案,命令如下:

aapt package -f -m -J /Users/Dexlin/Desktop/ -S res -I /Users/Dexlin/Library/Android/sdk/platforms/android-19/android.jar-M AndroidManifest.xml

紅色部分為需要修改的地方:

第一個紅色部分:R檔案生成後存放路徑(R檔案會自動儲存在遊戲包名目錄下)

第一個紅色部分:使用的SDK編譯版本

出現問題總結:

1.如drawable-mdpi與drawable-mdpi-v4中同時存在相同檔名的檔案,需要刪除drawable-mdpi中的檔案

2.如果遊戲的AndroidManifest.xml檔案中存在android:isGame="true"屬性,需要把它去除

3.如提示values-v21中存在不支援的樣式,去除即可

3.編譯R.java檔案

javac -source 1.6 -target 1.6 R.java)

4.生成的R檔案的jar

把R檔案所在的目錄生成為JAR

命令 jar cvf all.jar com

5.生成 dex檔案

把R檔案生成的JAR編譯為dex檔案

命令: dx --dex --output=classes.dex all.jar

*如果出現下面錯誤需要下載dx.jar(把dx.bat檔案拷貝到android-sdk\build-tools\23.0.2\lib目錄下

):

java.lang.RuntimeException: Exceptionparsing classes

       atcom.android.dx.command.dexer.Main.processClass(Main.java:752)

       atcom.android.dx.command.dexer.Main.processFileBytes(Main.java:718)

       atcom.android.dx.command.dexer.Main.access$1200(Main.java:85)

       atcom.android.dx.command.dexer.Main$FileBytesConsumer.processFileBytes(Main.java:1645)

6、生成smali檔案

使用baksmali-2.0.3.jar把獲得的dex檔案轉換為smali檔案
命令:java -jar baksmali-2.0.3.jar classes.dex

7.替換smali檔案

把生成的smali檔案替換到步驟1中相同的目錄下
如:生成的smali檔案路徑為:com.test,即需要替換到步驟1中的com.test

8、編譯apk,簽名安裝測試