Gradle架構中使用的".so"庫
本文位址:http://blog.csdn.net/caroline_wendy
本文的合集已經編著成書,進階Android開發強化實戰,歡迎各位讀友的建議和指導。
在京東即可購買:https://item.jd.com/12385680.html
Android使用Gradle架構的Android應用,需要對.so庫做特殊的處理,因為會找不到,就會導緻編譯正确,使用錯誤; 常見的使用情況是根據不同的cpu,有不同的庫,包括:armeabi,mips,x86等。
報錯:
java.lang.UnsatisfiedLinkError: Couldn't load weibosdkcore from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/xxx.apk"],nativeLibraryDirectories=[/data/app-lib/xxx-2, /vendor/lib, /system/lib]]]: findLibrary returned null
有兩種方法可以解決:
1. 将“.so”庫生成jar
把jar引入項目即可,需要注意目錄的順序:
-lib
--armeabi
---xxx.so
指令:
jar cvf xxx_cpu.jar ./lib
再加載到應用中,即可;
2. 使用gradle配置
在Android{}的範圍内,添加:
//noinspection all
task copyNativeLibs(type: Copy) {
// third party lib so
from(new File(projectDir, 'libs')) { include 'armeabi/*.so' }
into new File(buildDir, 'native-libs')
}
tasks.withType(JavaCompile) {
compileTask ->
//noinspection all
compileTask.dependsOn copyNativeLibs
}
//noinspection all
tasks.withType(com.android.build.gradle.tasks.PackageApplication) {
pkgTask ->
pkgTask.jniFolders = new HashSet<File>()
pkgTask.jniFolders.add(new File(buildDir, 'native-libs'))
}
即可,"//noinspection all"可以去除warning。