Android - Gradle架构中使用的“.so”库

原文地址: Gradle架构中使用的".so"库

转注: 自己在项目中使用 Android Studio 来编译项目, 这个项目是从 eclipse 转换过来的. 同时我也是一个 Android 的门外汉, 没有写过java 也没有学习过 java. 只是一个PHP的程序员. 无意中发现了这个东西, 确实解决我很大的难题.
之前的项目使用 eclipse 默认构建, 现在使用Android Studio gradle 进行构建, 结果竟然成功了. 欣喜之极

Android使用 Gradle架构的Android应用,需要对.so库做特殊的处理,因为会找不到,就会导致编译正确,使用错误;
常见的使用情况是根据不同的cpu,有不同的库,包括:armeabimipsx86等。

报错:

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容