解决Android方法数超过上限(64k)问题
Android系统中,应用中使用到的方法数超过64K会导致打包失败,下面的方案将帮助你解决此类问题。
1. 只包含需要的功能模块
有些三方SDK如Google Play Services提供很多功能,占用掉大量方法数,但游戏只使用到其中一部分功能,此时需要移除不需要的功能模块。
- 如果SDK提供分模块接入的方式,请确保只接入你所需要的模块。如Google Play Services提供分模块的接入方法。
- 如果SDK提供Lite版本,并能满足你的需求,请优先使用Lite版本。如Google Play Services为各类游戏引擎提供的Games SDK。
2. 使用Proguard混淆代码
- Proguard会检测并移除所有未使用到的类和方法,从而减少最终包的方法数。具体实施步骤请参考Google官方文档
- 某些场景中,需要保障特定的代码不被混淆(参考Google官方文档中Customize which code to keep一节),KTplay SDK需要keep下面的代码,请添加以下内容到你的Proguard配置文件(proguard-rules.pro)中。
-keep public class com.ktplay.open.KryptaniumAdapter
-keep public class com.ktplay.open.KryptaniumAdapter{*;}
-keep public class com.ktplay.open.KryptaniumAdapter$**{*;}
-keep public class com.ktplay.open.*{*;}
-keep public class * extends com.kryptanium.plugin.KTPlugin{
public <methods>;
public <fields>;
}
-keep public class com.google.android.gms.ads.identifier.AdvertisingIdClient{*;}
-keep public class com.google.android.gms.ads.identifier.AdvertisingIdClient$Info{*;}
-
处理Unity项目
Unity不支持直接使用Proguard,你需要先导出工程到Android Studio中。
-
在Unity工程中移除KTPlay Android工程
- 找到文件夹Assets/Plugins/Android/KTplay,将其移动到其他地方 (后面会用到)
- 递归删除KTplay文件夹下所有.meta文件(Unity工程生成的文件)
-
导入游戏工程到Android Studio
- 在Unity中选择File - Android - Google Android Project - Export导出工程
- 在Android Studio中选择File - New - Import Project,导入刚导出的工程
-
导入KTPlay工程到Android Studio
- 在Android Studio中选择File - New - Import Module,选择第1步中的KTPlay文件夹导入
-
添加对KTPlay工程的依赖。
打开游戏工程的build.gradle文件,在dependencies中添加:compile project(':KTPlay')
-
0 评论