Android Studio下JNI编程(引入外部或AS自行编译so文件) - Go语言中文社区

Android Studio下JNI编程(引入外部或AS自行编译so文件)


1. 引用外部so文件

已验证过的引用外部so文件主要有三种方式:

1.1  main目录下创建jniLibs目录,so文件按平台存放于子目录下(最简单方式)

只需在app/src/main目录下创建jniLibs目录,然后将so文件按平台存放于对应子目录下即可。



1.2 将jniLibs重定向到libs目录。(Eclipse项目习惯)

将so文件放在app/libs目录下。修改build.gradle文件,增加sourceSets 将jniLibs重定向到libs目录。

sourceSets {
    main {
        jniLibs.srcDirs = ["libs"]
    }
}



1.3 so文件放在libs目录下,先将so文件打包成jar包,再将该jar包一起打包进apk。

so文件位置与1.2相同。不同的是build.gradle文件的修改,不需要sourceSets,增加:

task nativeLibsToJar(type: Zip, description: "create a jar archive of the native libs") {
    destinationDir file("$projectDir/libs")
    baseName "Native_Libs"
    extension "jar"
    from fileTree(dir: "libs", include: "**/*.so")
    into "lib/"
}
tasks.withType(JavaCompile) {
    compileTask -> compileTask.dependsOn(nativeLibsToJar)
}


2. Android Studio直接编译so文件

2.1 NDK配置

下载NDK

解压,以我的环境为例,解压到了D:developAndroid-NDKandroid-ndk-r10e目录;

配置AS(Android Studio),File->Project Structure,Android NDK location配置为上述目录。



2.2 创建调用native方法的类

创建本地方法工具类NativeKit,该类中将演示众多JNI使用情形。



2.3 生成.h文件

打开terminal,cd到app/scr/main/java下,然后执行javah –jni <包名+类名>,生成.h文件。



2.4 创建jni目录



2.5 实现native方法

将.h文件拷贝到jni目录下,并创建相应的.cpp文件,实现.h文件定义的方法。(方法名不要改动)



2.6 添加moduleName(so文件名)

修改build.gradle文件,添加moduleName,值即为生成的.so文件名。对应上文提到的System.loadLibrary(“JniDemo”)




2.7 运行app,AS将自动编译so文件

可在工程目录下 appbuildintermediatesndkdebugobjlocal目录查看各平台的so文件。


3 参考链接

工程源码:https://git.oschina.net/huangximin/JniTest-AS.git

参考文章:(在此表示感谢!若有版权问题,请留言提醒,将尽快删除相关内容)

http://blog.csdn.net/qinjuning/article/details/7607214

http://blog.csdn.net/qiujuer/article/details/42040963

http://m.blog.csdn.net/blog/haikuotiankong8/47318281
版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/huangximin1990/article/details/50441400
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-06-27 22:07:40
  • 阅读 ( 1461 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢