创建一个执行copy命令的任务:
task copySoFileTask(type: Exec, description: '复制so文件'){
println("copySoFileTask..........")
workingDir "${rootDir}"
def copyCommond = [
'cmd',"/c",'copy',"\"AiGuiNative\\build\\intermediates\\cmake\\debug\\obj\\arm64-v8a\\libAiGuiNative.so\"",
"\"src\\main\\cpp\\finalpackage3_arm64\\lib64\\\""
]
commandLine copyCommond
}
创建一个执行bat脚本的命令任务
task zipSoFileTask(type: Exec, description: '编译前压缩资源'){
println("zip boostrap..........")
workingDir 'src\\main\\cpp'
def myCommond = [
'cmd',"/c",'zip.bat'
]
commandLine myCommond
}
让该任务在编译之前执行
注意下面的设置在apply plugin: 'com.android.library’有效
buildTypes {
release {
libraryVariants.all { variant ->
variant.javaCompileProvider.get().dependsOn(zipSoFileTask)
zipSoFileTask.dependsOn(copySoFileTask) //zip压缩前先执行copy任务
}
}
}
apply plugin: 'com.android.application’下的设置如下:
android.applicationVariants.all {
variant ->
variant.outputs.all {
//在这里修改apk文件名
outputFileName = "AiCoding-v${variant.versionName}.apk"
}
variant.javaCompileProvider.get().dependsOn(zipSoFileTask)
}
zip.bat脚本内容
del bootstrap-aarch64.zip
WinRAR a -r -ep1 bootstrap-aarch64.zip finalpackage3_arm64/*
命令行使用WinRAR 程序的时候要加PATH变量:
C:\Program Files\WinRAR
构建前开始执行zip:
还可以在settings.gradle中添加一个监听器,在需要的构建阶段执行相应操作:
gradle.addBuildListener(new BuildListener() {
@Override
void buildStarted(Gradle gradle) {
println("buildStarted------------")
}
@Override
void settingsEvaluated(Settings settings) {
println("settingsEvaluated------------")
}
@Override
void projectsLoaded(Gradle gradle) {
println("projectsLoaded------------")
}
@Override
void projectsEvaluated(Gradle gradle) {
println("projectsEvaluated------------")
}
@Override
void buildFinished(BuildResult result) {
println("buildFinished------------")
}
})