Android方法数超过上限(64k)怎么办?

解决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 评论

登录写评论。