jar+res
是 Eclipse 等早期 IDE 和老版本游戏引擎采用的依赖结构,基于此结构的接入方式可以成为jar+res
接入方式。随着 Android Studio的兴起和游戏引擎的更新,已经出现了新的接入方式——aar。
基于但不限于以下原因,SDK 以 aar
接入方式取代jar+res
jar+res
需要拷贝,容易产生低级接入问题,如拷贝错误,混淆规则遗漏,遗漏权限、Activity 注册等,而 aar
只需要确认版本即可jar+res
,导致许多功能受限,如Androidx
无法在 eclipse 中使用;支付宝 SDK 无法更新FileProvider
对external-files-path
的支持但两种接入方式主要是引入SDK的方式不同,其他方面几乎没有差别
下载 最新的jar+res ,解压后得到以下结构
├── AndroidManifest.xml
├── assets
├── libs
├── proguard-rules.pro
└── res
假设jar+res
以operate
目录发布,开发者可能有两种方式使用它,一是构建项目依赖(如 eclipse 依赖),二是手动整合到游戏项目。
构建依赖,需要整体拷贝operate
目录
手动整合,要完整拷贝以下目录到游戏工程对应目录(建议用脚本完成):
libs
:SDK 的 jar 包和所有 abi 类型的 so(可忽略不支持 abi 对应的so)assets
:assets 资源res
:res 资源AndroidManifest.xml
:Android 清单文件不管哪种方式,都要确保operate/AndroidManifest.xml
中的所有内容,最终打包到游戏的AndroidManifest.xml
中
OpeFileProvider
特别说明,必须将AndroidManifest.xml
中的android:authorities="${applicationId}.operate.FileProvider"
中的占位符替换成游戏包名。 例如包名cn.m4399.operate.demo
,替换后将变成android:authorities="cn.m4399.operate.demo.operate.FileProvider
<application>
<!-- 注意游戏 Activity 也应该配置 android:configChanges="orientation|screenSize|keyboardHidden" -->
<!--
4399 运营SDK:以下是FileProvider配置,以兼容7.0+文件访问权限变更
注意其中的: android:authorities="游戏包名.operate.FileProvider"
以及,android:resource="@xml/m4399_ope_file_paths" 是固定格式写法
-->
<provider
android:name="cn.m4399.operate.OpeFileProvider"
android:authorities="{applicationId}.operate.FileProvider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/m4399_ope_file_paths" />
</provider>
</application>
如果游戏需要进行代码混淆,要保留 SDK 类、资源及其依赖,即在 proguard 文件里追加以下配置
#noinspection ShrinkerUnresolvedReference
-dontwarn android.support.v4.**
-keep class android.support.v4.** { *; }
-keep public class * extends android.support.v4.**
-dontwarn cn.m4399.operate.**
-keep class cn.m4399.operate.** {*;}
-keepclassmembers class cn.m4399.operate.R$* {*;}
-keep class com.m4399.gamecenter.** {*;}
-dontwarn android.net.**
-keep class android.net.SSLCertificateSocketFactory{*;}
-keep class com.ishumei.** { *; }
-keep class cn.com.chinatelecom.account.** {*;}
-dontwarn com.unicom.xiaowo.account.shield.**
-keep class com.unicom.xiaowo.account.shield.**{*;}
引入 SDK 后就可以进入后续的接口调用流程。
aar
与 jar+res
接入方式(特别是手动整合的方式)对比
接入点 | 含义 | aar | jar+res |
---|---|---|---|
uses-permission |
应用权限 | - | 手动添加 |
queries |
应用包可见性 | - | 手动添加 |
android:networkSecurityConfig |
Android 9+ http请求 | - | 手动添加 |
OpeFileProvider |
文件访问权限配置 | - | 必须 |
org.apache.http.legacy |
apache 旧网络库 | - | 手动添加 |
所有的activity |
SDK 及其依赖的页面 | 可覆盖 | 手动添加 |
混淆配置 | SDK 及其依赖的依赖类 | - | 手动添加 |
第三方依赖 | volley与support依赖 | 在线依赖 | 手动拷贝 |
其中aar
大都是“-”,表示引入aar后不需要额外处理,因为它们内置在aar中