Tunable-在App工程中开发调试独立SDK工程
1. 使用场景-你的痛点
各 SDK 独立开发调试,拥有自己的 sample 工程,通过发布 aar 方式集成到宿主。当出现 bug/需要在宿主中进行调试时,我们通常会怎么做?
- 方式1:在宿主工程中进行断点调试 (只能用于定位问题)
- 方式2:修改 SDK 重新发布集成进行测试
- 方式3:源码导入宿主工程,修改配置,最后再回滚宿主工程
Tunable 利用复合构建 + 依赖替换 + 模版脚本,帮助你快速解决这些痛点,它具有如下优势:
Tunable | |
---|---|
1 | 对宿主工程、SDK 工程无侵入,开发过程中的代码修改直接作用在原工程 |
2 | 使用简单,只需在 Tunable 中配置宿主工程、SDK 工程相关路径 |
3 | 一个 IDE 窗口,同时开发宿主工程和 SDK 工程 |
![](https://wos.58cdn.com.cn/pQnMlKjpQSW/iwikibucket/v1.1_wxpt_wuxian_独立项目_App工厂_Android-App工厂_金盾图片_gradle_WebHome_tunable_project_struct.jpg)
关于复合构建的介绍:gradle复合构建
2. 使用教程
01. clone Tunable
git clone git@github.com:kuangzhongwen/Tunable.git
02. 打开 Tunable 工程,进行配置
![](https://wos.58cdn.com.cn/pQnMlKjpQSW/iwikibucket/v1.1_wxpt_wuxian_独立项目_App工厂_Android-App工厂_金盾图片_gradle_WebHome_tunable_init.jpg)
配置 tun-config.gradle,参考下面的 demo:
ext {
// APP 工程路径
app_project_path = '/Users/kuangzhongwen/Desktop/project/58TownClientProject/58ClientProject'
// APP 工程 run task,eg: appModuleName:install{$flavor}Debug/appModuleName:assemble{$flavor}Debug
// 如果是 AAB 工程,建议关闭 AAB 模式后进行调试
app_run_task = '58WuxianClient:installDebug'
// SDK 工程配置,可配置多个
sdk_projects = [
[
'sdk_project_path': '/Users/kuangzhongwen/Desktop/project/ActionLogSDK',
'aar': 'com.wuba.wuxian.sdk:actionlog',
'sdk_module': 'actionlog'
]
]
}
参数说明 | |
---|---|
app_project_path | 本地的 app 宿主工程路径 |
app_run_task | app 宿主工程运行 task,格式为:appModuleName:install{KaTeX parse error: Expected 'EOF', got '}' at position 7: flavor}̲Debug or appMod…flavor}Debug |
sdk_projects | sdk 工程配置,数组形式,可配置多个 |
sdk_project_path | 本地 sdk 工程路径 |
aar | sdk 远程 aar 配置,格式为:group:artifact,宿主 app 中存在该 aar 的依赖 |
sdk_module | sdk 工程中的 sdk module 名,复合构建时会使用该 module 替换宿主工程中的 aar,达到本地开发调试的目的 |
备注,配置多个 SDK:
ext {
app_project_path = '/Users/kuangzhongwen/Desktop/project/58TownClientProject/58ClientProject'
app_run_task = '58WuxianClient:installDebug'
sdk_projects = [
[
'sdk_project_path': '/Users/kuangzhongwen/Desktop/project/ActionLogSDK',
'aar': 'com.wuba.wuxian.sdk:actionlog',
'sdk_module': 'actionlog'
],
[
...
]
]
}
03. sync Tunable 工程
同步 gradle,成功后,将看到如下画面:
<1> 如果 sync 过程中报错,参考 Q&A 进行解决
<2> IDE 窗口中的几个工程,不是拷贝的方式,而是链接到你配置的本地工程
<3> 开始愉快地开发调试,在 SDK 代码中修改的代码,运行宿主 app 后都可以直接看到效果~
![](https://wos.58cdn.com.cn/pQnMlKjpQSW/iwikibucket/v1.1_wxpt_wuxian_独立项目_App工厂_Android-App工厂_金盾图片_gradle_WebHome_tunable_sync.jpg)
04. 运行宿主 app 调试
运行采用委托的方式,执行 gradle task,或点击 IDE 对应的 task 执行:
./gradlew runApp
最终会调用配置中的 app_run_task
:
![](https://wos.58cdn.com.cn/pQnMlKjpQSW/iwikibucket/v1.1_wxpt_wuxian_独立项目_App工厂_Android-App工厂_金盾图片_gradle_WebHome_tunable_run.jpg)
3. Q&A
RD: kuangzhongwen@58.com
(1) Minimum supported Gradle version is x.x.x. Current version is x.x.x.
统一 APP 工程 & SDK 工程的
/gradle/wrapper/gradle-wrapper.properties
中的 gradle 版本 (建议提交,避免下次修改)
(2) Using multiple versions of the Android Gradle plugin in the same build is not allowed.
统一 APP 工程 & SDK 工程的 gradle 插件版本 (建议提交,避免下次修改)
(3) This project uses AndroidX dependencies, but the ‘android.useAndroidX’ property is not enabled.
统一 APP 工程 & SDK 工程 androidx 设置 (
android.useAndroidX=true
),如果一个开启一个不开启则会报此问题 (建议提交,避免下次修改)
(4) 关于 app_run_task
(1) app 宿主工程运行 task,格式为 appModuleName:install{KaTeX parse error: Expected 'EOF', got '}' at position 7: flavor}̲Debug or appMod…flavor}Debug,比如 app module 为 58WuxianClient, flavor 为 ‘wuba’,那么 app_run_task 为 58WuxianClient:installWubaDebug,如果无 flavor,则为 58WuxianClient:installDebug
(2) 如果宿主工程为 AAB 模式,建议关闭,否则需要在宿主 App 中定义 AAB 运行任务供 Tunable 配置