TapTap Android Dependency Resolver
目的
各个 SDK 模块在打 Android 包的时候,可能需要做一些 Android 定制化的内容,比如增加 Gradle 打包时的Android Dependencies,
或者修改 Gradle 工程里的 Properties 文件配置,之前的做法往往是打完包之后,直接修改 Unity 导出后的 Gradle 工程,
Unity Android Dependency Resolver 是通过字符串匹配来修改 Unity 的 Android Gradle Template,
来达到修改 Gradle 工程的目的,比如利用 Unity 的 Android Gradle Template 中的 Placeholder 能快速定位到需要修改的地方,
达到修改目的。
使用方法
1. 安装
用 upm 导入需要在 Unity 工程的 Packages/manifest.json 文件中添加
"com.tapsdk.androiddependencyresolver": "https://github.com/taptap/android_dependency_resolver.git#1.2.3"
推荐用 npm 导入需要在 Unity 工程的 Packages/manifest.json 文件中添加
"com.tapsdk.androiddependencyresolver": "1.2.3"
还需要注册对应的 NPM 路径
"scopedRegistries": [
{
"name": "NPMJS",
"url": "https://registry.npmjs.org/",
"scopes": ["com.tapsdk", "com.taptap"]
}
]
2. 使用方式
-
Unity Android Dependency Resolver 会在 Build Android 包或者 Export Gradle 工程的时候, 收集 Assets 文件夹以及 Package 文件夹下所有的 TapAndroidProvider.txt 文件,TapAndroidProvider.txt 负责配置 Android Gradle Template 的修改内容。
-
升级到 1.1.0 版本后,建议涉及到 Android Dependencies 修改用 Dependencies.xml 的方式添加,具体做法:在任意 Editor 下增加名为 XXXDependencies.xml 的文件,来列举需要添加的 dependencies。xml 格式要求:
<dependencies>
<androidPackages>
<androidPackage spec="com.google.android.gms:play-services-games1:9.8.0">
<androidPackage spec="com.google.android.gms:play-services-games2:9.8.0">
</androidPackage>
</androidPackages>
</dependencies>
-
如何配置 TapAndroidProvider.txt,我们具体举一个例子,并说明各个字段的意义:
{
"Version": 1,
"Use": true,
"Priority": 2,
"ModuleName": "XD.Common",
"AndroidGradleContext": [
{
"locationType": 1,
"unityVersionCompatibleType": 1,
"templateType": 6,
"processType": 1,
"locationParam": "ADDITIONAL_PROPERTIES",
"processContent": [
"android.useAndroidX=true",
"android.enableJetifier=true"
]
},
{
"locationType": 1,
"unityVersionCompatibleType": 0,
"templateType": 3,
"processType": 1,
"locationParam": "DEPS",
"processContent": [
" implementation 'androidx.recyclerview:recyclerview:1.2.1'",
" implementation 'com.google.code.gson:gson:2.8.6'",
" implementation 'org.jetbrains.kotlin:kotlin-stdlib:1.5.10'",
" implementation 'androidx.appcompat:appcompat:1.3.1'",
" implementation \"com.squareup.retrofit2:retrofit:2.9.0\"",
" implementation \"com.squareup.retrofit2:adapter-rxjava2:2.9.0\"",
" implementation \"io.reactivex.rxjava2:rxandroid:2.1.1\"",
" implementation \"com.squareup.okhttp3:okhttp:4.7.2\"",
" implementation \"com.squareup.okio:okio:2.6.0\""
]
},
{
"locationType": 2,
"unityVersionCompatibleType": 0,
"templateType": 5,
"processType": 2,
"locationParam": "classpath 'com.android.tools.build:gradle:3.\\d{1}.\\d{1}'",
"processContent": [
"classpath 'com.android.tools.build:gradle:4.0.1'"
]
},
{
"locationType": 2,
"unityVersionCompatibleType": 0,
"templateType": 5,
"processType": 2,
"locationParam": "classpath 'com.android.tools.build:gradle:4.0.0'",
"processContent": [
"classpath 'com.android.tools.build:gradle:4.0.1'"
]
}
]
}
-
涉及到 Android Dependencies 的修改可以 1.1.0 版本后可以使用 XXXDependencies.xml 来修改,也可以使用之前的 TapAndroidProvider.txt 方式修改,无论哪种方式,Unity Android Dependency Resolver 会自动与已经存在的 mainTemplate.gradle 合并,并优先使用更高版本的 Android 依赖库
-
配置好 TapAndroidProvider.txt ,在打包或者 Export 工程之后,可以在 Unity 工程的 Plugins/Android 文件夹下面看到修改的 Unity Gradle Template 文件内容。
-
所有 Editor 文件夹下的 XXXDependencies.xml 都会出包时或者菜单栏 TapTap/AndroidDependencyResolver/Resolve / TapTap/AndroidDependencyResolver/Force Resolve 汇总在 Assets/TapTap/Gen/Editor/ 下生成 TapTapADRDependencies.xml 文件,Unity Android Dependency Resolver 会使用这个文件去修改 Unity 的 Android Gradle Template,来达到修改 Gradle 工程的目的。
1.1.0 版本升级
EDM4U 说明
EDM4U 是 Google 开发了提高 Unity SDK 交付保证的插件,被很多国外 Unity SDK 采用(比如 Facebook,appsflyer,Firebase等等)。主要包括这么几个功能:1)Android Dependencies Management;2)iOS Dependency Management;3)Package Manager Registry Setup;4)Unity Plugin Version Management。和 Unity Android Dependency Resolver 比较重合的是 Android Dependencies Management 这个功能。
EDM4U,要求提供一份放置在 Editor 文件夹下的名为 XXXDependencies.xml 的文件,用来描述需要依赖哪些 Android dependencies。之后会进行 Resolve 的过程,Resolve 会根据是否有打开自定义 mainTemplate.gradle 文件进行不同的操作,如果打开了的话,会写入相关 dependencies 到 mainTemplate.gradle 文件中,这是 EDM4U 比较推荐的方式,如果没有打开的话,会直接下载相关 dependencies 到 Plugin/Android 中。
为了适配 EDM4U,Unity Android Dependency Resolver 对 dependencies 依赖包逻辑做了相关优化。
- 1.1.0 之前是使用 TapAndroidProvider.txt 来做,具体逻辑是根据 DEPS 关键字定位,然后加入 processContent 中的内容。
- 1.1.0 版本升级后的逻辑是收集所有 TapAndroidProvider 中 DEPS 内容以及所有 Editor 文件夹下的 XXXDependencies.xml 文件,然后根据这些内容生成 EDM4U 需要的格式(生成 TapTap/Gen/Editor/TapTapADRDependencies.xml 文件),利用 EDM4U 去解决 dependencies,这里并不会强制要求用户安装 EDM4U 插件,如果没有的话,Unity Android Dependency Resolver 也能读取符合 EDM4U 格式的 ***Dependencies.xml 文件