聚合sdk打包问题

来源:互联网 发布:淘宝装修免费模板 编辑:程序博客网 时间:2024/05/29 07:10

聚合打包使用的工具为apktool +dex2jar

问题1:
乐视渠道出现找不到资源问题,原因在于apktool在合并res资源的attrs时, 并不能插入到attrs资源中,
导致apktool生成不了Rstyleable.smaliR.smaliRstyleable属性

解决:
手动把 资源复制到attrs中,再使用aapt命令生成R.java文件,然后把java文件转换成smali文件,复制所有的smali文件覆盖掉原有同名的smali文件(在package目录下),重新打包即可

问题2:
A站渠道出现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/laiying/Desktop/ -S res -I /Users/laiying/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、重新打包签名即可

问题3:
在汇编时出现找不到类,或者类不匹配问题,某些jar的包下存在的类数目超过26个,导致有大小写的类名出现,因为系统不区分大小写,所以解压出来的某些类被覆盖

解决:
1.不解压jar,直接合并成dex文件 dx –dex –output=classes.dex all.jar test.jar(可以合并多个jar)
2、解压成smali文件,再把smali文件合并成dex(需要用到baksmali.jar / smali.jar)
命令如下:
dex转smali: java -jar baksmail.jar -o out/ classes.dex
smail转dex: java -jar smali.jar out/ -o class.dex

问题4:
apktool修改versionCode/versionName:
运行apktool命令进行解包会生成一个apktool.yml打开该文件可以看到这两个值,直接修改汇编就可以
versionCode: ‘8’
versionName: 1.0.7.9
包名的修改需要在AndroidManifest.xml修改

问题5:
apktool汇编失败:
at brut.util.OS.exec(OS.java:97)
at brut.androlib.res.AndrolibResources.aaptPackage(AndrolibResources.java:435)
… 6 more
Caused by: java.io.IOException: Cannot run program “C:\Users\ADMINI~1\AppData\Local\Temp\brut_util_Jar_5992000255534415667.tmp”: CreateProcess error=206, 文件名或扩展名太长。
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
at brut.util.OS.exec(OS.java:90)
… 7 more
Caused by: java.io.IOException: CreateProcess error=206, 文件名或扩展名太长。
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.(ProcessImpl.java:386)
at java.lang.ProcessImpl.start(ProcessImpl.java:137)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
… 8 more

原因:
apktool中对资源文件进行了检索,导致一些自定义的文件不能被解释
这里写图片描述

这里写图片描述
这里写图片描述
解决:
1、修改apktool 2.0.0版本
2、或者直接把解包出来生成的apktool.yml中的doNotCompress:下的内容删除,例如把下面的红框内容删除
这里写图片描述

更多问题后续更新

原创粉丝点击