因为项目只支持armeabi,而有些第三方库不支持armeabi,所以在编译时将v7、v8 so文件copy到armeabi。
直接上代码build.gradle中添加如下代码
afterEvaluate { project ->
android.applicationVariants.each { variant ->
opyV7Lib(variant, project)
}
}
// 将armeabi-v7a xx.so 拷贝到 armeabi
def copyV7Lib(variant, project) {
println("variant name=${variant.name}, buildType=${variant.buildType.name}")
//取出变体名,将第一个字符变为大写,用于拼接task名称,例如debug->Debug,task名称 merge+Debug+NativeLibs
def buildVariantName = variant.name.substring(0, 1).toUpperCase() + variant.name.substring(1)
def taskName = "copyNativeLib" + buildVariantName
println("taskName = ${taskName}, taskVariantName = ${buildVariantName}")
def nativeLibDir = project.buildDir.getAbsolutePath() + "/intermediates/merged_native_libs/${variant.name}/out/lib"
def armeabiV7Dir = nativeLibDir + "/armeabi-v7a"
def armeabiDir = nativeLibDir + "/armeabi";
println("armeabiV7Dir = ${armeabiV7Dir}")
project.task(taskName) {
doLast {
println("copy from:" + armeabiV7Dir)
println("copy into:" + armeabiDir)
copy {
from(armeabiV7Dir) {
//将v7 目录下的so copy到 armeabi
include("xx.so")
}
into armeabiDir
}
}
}
//gradle版本命令不同,5.6.x 版本测试有效
def mergeLibsTask = "merge${buildVariantName}NativeLibs"
project.tasks[taskName].dependsOn(project.tasks[mergeLibsTask])
project.tasks["strip${buildVariantName}DebugSymbols"].dependsOn(taskName)
}