android studio2.3简单手动创建so库jni学习过程

1.下载ndk.

https://dl.google.com/android/repository/android-ndk-r16b-windows-x86_64.zip

2. 创建一个普通的工程



3.新建一个类,声明native方法。这个类是java与C/C++交互的中介,方法由java声明,由C/C++实现。

public class myJNI {
    //加载so库
    static {
        System.loadLibrary("JniLib");
    }

   //native方法
    public static native String sayHello();
}

4. Build->MakeProject, 生成class文件, 生成路径如下:


5. 命令行利用javah生成c++头文件

打开到上述debug目录, 然后利用javah命令生成c++ .h头文件


然后就看到.h文件了



6. 创建jni文件夹



7.将刚才生成的头文件放到jni文件夹下

创建一个与.h同名的cpp文件, 内部代码如下:
#include <jni.h>
#include "lynash_com_lyjnisodemo_myJNI.h"

JNIEXPORT jstring JNICALL Java_lynash_com_lyjnisodemo_myJNI_sayHello
        (JNIEnv *env, jclass jobj){
    return env->NewStringUTF("args in jni");
}

8.配置ndk路径

在local.properties文件增加
ndk.dir=F\:\\sdk\\android-ndk-r16b

9.在根目录gradle.properties下面加上: android.useDeprecatedNdk=true

意思就是允许使用低版本的NDK

10. 打开app Module的build.gradle文件

在defaultConfig节点里添加以下代码
注意这里的moduleName,是我们在之前自己编写的类里面加载的so库名
    defaultConfig {
        applicationId "lynash.com.lyjnisodemo"
        minSdkVersion 21
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

        ndk {
            moduleName "JniLib"
            ldLibs "log", "z", "m"
            abiFilters "armeabi-v7a", "x86","x86_64"
        }
    }

11.生成so库

Build->MakeProject


12.调用so库

建立jniLibs文件夹, 将上图中生成的so拷贝到jniLibs文件夹下


13.jni方法调用

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView text = (TextView)findViewById(R.id.text);
        String s = myJNI.sayHello();
        text.setText(s);
    }
}

14. 主界面显示了 c++实现方法返回的字符串

初级使用方法大概如此. 后续研究点有用的. . .
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值