使用Android Studio编译so库

Android版本:3.4 NDK版本:17.1.48…
因为之前项目的原因,接触到了JNI调用c代码这种提高性能的编程方式,所以一直想研究研究,正好这几天有空,所以就动手实践了一下。

1、配置ndk环境变量

打开project structure查看NDK路径,如下图
在这里插入图片描述
经ndk location加到环境变量里就行了,在环境变量里新建一个NDK_HOME,把上图ndk路径放进去,再把%NDK_HOME%加到path里去;
最后,在命令行输入ndk-build回车,出现下图就算配置成功了
在这里插入图片描述

2、JNI文件编写

1> 首先在studio中新建一个android工程,新建一个类,我是新建了一个math类,代码如下图所示

		package com.model.testndk;
		public class Math {
		    static {
		        System.loadLibrary("Math");
		    }
		    public native static String getStringFromNative();
		}

编译工程找到Math.class文件,我的是在app\build下的目录,如下图所示:
在这里插入图片描述
2>编译产生.h头文件
在studio的终端中,cd到app\build\intermediates\javac\debug\compileDebugJavaWithJavac\classes目录下,使用javah命令编译产生头文件,如下图所示;
vaWithJavac\classes>javah -jni com.model.testndk.Math
在这里插入图片描述
编译成功后会在classes目录下产生头文件,如下图所示

在这里插入图片描述
在main文件夹下新建jni文件夹,将头文件移到jni文件夹下,然后复制一份头文件修改后缀名.c,就得到了c文件,但是需要在该c文件中include头文件,如下图所示
在这里插入图片描述
3> 编写mk文件
在jni文件夹下新建Android.mk文件和Application.mk文件,内容如下图所示
在这里插入图片描述
在这里插入图片描述
还需要在builde.gradle中配置ndk
在这里插入图片描述
详细的参数说明我就不多说了,但是要保证LOCAL_MODULE的值和build.gradle中的muduleName一致就可以了。

3、编译so动态库;

在studio的终端中cd到jni目录下,输入ndk-build编译出现下图就说明编译成功了
在这里插入图片描述

4、使用so文件

编译成功只有可以发现main目录下多出两个文件夹,libs和obj
在这里插入图片描述
jniLibs是我新建的,使用so文件需要这个目录,将libs中的so拷到jniLibs中即可。

5、出现的问题;

1> …arm64找不到so;
可能是你运行的机器cpu架构不包括在这几中生成的so动态库中;
2> no implementation for native method…;
1、我的LOCAL_MODULE和build.gradle中的ndk下的moduleName不相同;
2、c代码中的方法是空的,没有实现。。
以上就是一个简单地demo,下一步试试cmake编译so库
参考 1、Android编译so库
2、Android NDK 简介及环境配置(一)

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值