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
的支持aar
只需升级版本号并确认接口,而jar+res
要重复首次接入的大部分操作,风险大但两种接入方式主要是引入SDK的方式不同,之后的接口调用方式是一致的
下载 最新的jar+res
,假设jar+res
以operate
目录发布,解压后的结构类似于
├── AndroidManifest.xml
├── assets
├── libs
├── proguard-rules.pro
└── res
开发者可能有两种方式使用它,一是构建项目依赖(如 eclipse 依赖),二是手动整合到游戏项目。
构建依赖,需要整体拷贝operate
目录
需要注意的是,assets
下的文件若放在 eclipse
依赖模块中,不会打到 apk 中;可以拷贝到主模块的对应目录
手动整合,要完整拷贝以下目录到游戏工程对应目录(建议用脚本完成):
AndroidManifest.xml
:Android 清单文件assets
:assets 资源libs
:SDK 的 jar 包和所有 abi 类型的 so(可忽略不支持
abi 对应的so)proguard-rules.pro
:在游戏的 proguard
文件里追加此文件描述的规则res
:res 资源不管哪种方式,都要确保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"
不应该使用 android:launchMode="singleTask" 启动模式,可以考虑 singleTop
-->
<!--
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> </
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中