最近同事遇到一个问题,无论在接腾讯的MSDK还是韩国的SK渠道的SDK,其中的某个Jar的代码在打包时永远不会出现的APK中。这样导致在运行使用相关代码时造成APP闪退(Crash),日志中可以看到相关Class not Found的错误。
如果出现这样的问题,可以按照以下方法解决
1、建立空包测试
创建了一个空的U3D工程,将那个Jar文件a.jar放在Assets/Plugins/Android/libs/下,同时将一个可以正常打包的Jar文件b.jar也放在该位置。打包。按照检测方法查看是否有a.jar和b.jar中的相关代码
如果有,那么就是要检测jar的代码,以及自定义android插件(自己写的java代码)是否有错误,比如包引用等等
2、查看编译错误信息
如果一般情况下没有apk的错误编译信息,可以使用重复文件的方法来看输出。复制一份b.jar为b1.jar,打包。正常情况下会打包错误,查看错误信息。
如果这个方法发现除了代码重复的错误外,还有bad class file magic (cafebabe) or version的错误,说明Jar打包的JDK超过了U3D使用的JDK版本。
解决方法:更新JDK并且配置环境变量和U3D的JDK路径。同时升级Android SDK Build-tools版本(优先升级Android SDK Tools)。
其中,fastjson为可以正常打包的jar,而kr为不能打包进apk的jar。
PS:检测方法,检测APK是否有Jar相关代码
1、使用解压软件解压Jar文件
2、将APK文件用Winrar解压,提取class.dex文件,用dex2jar工具转为Jar文件,再解压Jar文件。
3、检测是否包含代码