Android 在 build.gradle 里执行文件操作
最近有个需求,就是在一套 android 工程里包含两套第三方 SDK 及相关资源文件,但是在打包时,只能将其中一套打包到 APK 中,用哪一套取决于一个配置文件中的内容。
配置文件为
/src/main/assets/apkName.txt
两套第三方SDK分别放置在以下路径中
src/main/_res/3d
src/main/_res/real
实现代码如下:
android {
......
tasks.configureEach { task ->
if (task.name == "assembleRelease") {
// 获取配置文件路径
final String filePath = rootProject.file("./").path + "/taxrobot/src/main/assets/apkName.txt"
// 读取配置文件
final FileInputStream inputStream = new FileInputStream(filePath)
final byte[] buffer = new byte[1024]
final int read = inputStream.read(buffer)
inputStream.close()
final String apkName = new String(buffer, 0, read)
// 根据配置文件内容决定使用哪套 SDK
if (apkName == "TaxRobotClient_Taxpayer") {
// 删除文件
delete "./src/main/jniLibs/arm64-v8a/libflora-jni.so"
// 复制文件
copy {
from "./src/main/_res/3d/ic_launcher.png" // 源文件
into "../app/src/main/res/mipmap-hdpi/" // 目标位置
}
// 复制文件夹
copy {
from "./src/main/_res/3d/bin" // 源文件夹
into "./src/main/assets/bin" // 目标文件夹
include '**' // 复制源文件夹下的所有文件
}
copy {
from "./src/main/_res/3d/libil2cpp.so"
from "./src/main/_res/3d/libmain.so"
from "./src/main/_res/3d/libil2cpp.so"
from "./src/main/_res/3d/libunity.so"
into "./src/main/jniLibs/arm64-v8a/"
}
} else {
delete "./src/main/assets/bin"
delete "./src/main/assets/data"
delete "./src/main/assets/UnityServicesProjectConfiguration.json"
delete "./src/main/jniLibs/arm64-v8a/lib_burst_generated.so"
delete "./src/main/jniLibs/arm64-v8a/libil2cpp.so"
delete "./src/main/jniLibs/arm64-v8a/libmain.so"
delete "./src/main/jniLibs/arm64-v8a/libil2cpp.so"
delete "./src/main/jniLibs/arm64-v8a/libunity.so"
copy {
from "./src/main/_res/real/ic_launcher.png"
into "../app/src/main/res/mipmap-hdpi/"
}
}
}
}
}
全文完。

浙公网安备 33010602011771号