Android JNI之JAVA调用C/C++层创建so库

第一步:创建Java方法,用于调用c层代码

public class MyJni {
    // 加载native-jni
    static {
        System.loadLibrary("demo");
    }
    //java调C中的方法都需要用native声明且方法名必须和c的方法名一样
    public native static String getAAString();

} 

第二步:编译一下,点击Make Project,或Clean Project + Rebuild Project一下

第三步:在项目TestDemo的java文件层右击选择Open in Terminal

输入javah -jni 该类所在的包+该类名称.class,回车,会生成.h文件,如果不会生成,我重启一下电脑就好了,具体不知道什么原因

第四步:在src/main目录下创建jni文件夹,把.h文件复制到这里

第五步:在jni文件创建demo.c文件:

#include<jni.h>

jstring Java_com_example_alarmmirrordemo_MyJni_getAAString(JNIEnv *env,jobject thiz){
    return (*env)->NewStringUTF(env,"abcde随便写的");
}

注意:Java_com_example_alarmmirrordemo_MyJni_getAAString跟.h文件的名称一样,方法也要一样

第五步:在jni文件创建Android.mk,内容如下:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := demo//so库的名称
LOCAL_SRC_FILES := demo.c//c文件名称

include $(BUILD_SHARED_LIBRARY)

第六步:在jni文件创建Application.mk,内容如下:

APP_ABI := all

第七步:在build.gradle文件添加ndk模块:

defaultConfig {
 ndk {
//            // 设置支持的SO库架构
            moduleName "demo"
            abiFilters  'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
        }

}

第八步:在main/java右击打开Terminal,或cd到java文件,如cd main/java

输入 ndk-build回车,则自动生成libs文件里的so库。(等一会儿就完成了)

第九步:调用方法:

TextView text = findViewById(R.id.tv_text);
text.setText(MyJni.getAAString());

输出:“abcde随便写的”,更多的输出结果自行编写。在此记录一下,以免以后忘记

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值