Unity打包APK缺少Support-V4 库 java.lang.NoClassDefFoundError: Failed resolution of: Landriod/support/v4/content/ContextCompat
问题
这两天第一次接安卓SDK的东西,好不容易打包成aar丢到Plugin/Android里面,结果一到模拟器运行就报java.lang.NoClassDefFoundError: Failed resolution of: Landriod/support/v4/content/ContextCompat。
这个报错看起来感觉像是没有Support-V4库上的东西,估计SDK那边有用到,但是我打包的时候明明有在gradle中加入implementation ‘com.android.support:support-v4:26.1.0’,打出的包还是会报这个错。初步猜测是在unity打包的时候没有将这个包加入。
解决方式
最后一番折腾,找到官方文档的说明,需要将在plugin/Android中加入对应的gradle文件。这个文件需要从Unity的安装目录中E:\WorkSofe\unity2018\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Tools\GradleTemplates\mainTemplate.gradle复制出来
丢到plugins/Android文件夹中,这样在unity导出时会先使用这个文件中的配置进行配置。
然后用AS或其他软件打开这个mainTemplate文件,在里面加入
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:support-v4:26.1.0' // 加入这句,对应版本换成对应版本号
**DEPS**}
在Unity导出不要选择Internal,要用Gradle导出,需要打成apk就不要勾选Export porject。
这样,打出的Apk包里面就包含了support-v4的依赖了
Gradle打包遇到的其他问题
打包编译错误Manifest中说哪里哪里出现重复的字段,将aar包中重复的AndroidMainfest删掉即可
Program type already present: com.xx.BuildConfig,BuildConfig已经存在。解决方式:在aar打包工程的gradle中加入Program type already present: com.xx.BuildConfig。参考链接:https://blog.csdn.net/xiongya8888/article/details/103769965
这样讲就不会在aar中生成BuildConfig文件了