Android Studio 创建 JNI 项目

1. 创建变通的 android 项目(项目路径E:\android\demo\HelloJNI)

2. 用Java代码声明native 接口,并在Java中调用,如:

public class MainActivity extends Activity {

    static{
        System.loadLibrary("hello-jni");
    }
    public native String getStringFramNative();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView tv = (TextView)findViewById(R.id.text_view);
        tv.setText(getStringFramNative());
    }
}

3. Ctrl+F9编译项目,在以下目录会生成 class文件

E:\android\demo\HelloJNI\app\build\intermediates\classes\debug\com\example\csx\hellojni


4. 使用javah生成C/C++头文件

javah -d jni -classpath "d:\Dev\Android\android-sdk\platforms\android-23\android.jar";"E:\android\demo\HelloJNI\app\build\intermediates\classes\debug" com.example.csx.hellojni.MainActivity

其中

-d jni 指定生成的C/C++头文件输出目录为jni

-classpath "d:\Dev\Android\android-sdk\platforms\android-23\android.jar";"E:\android\demo\HelloJNI\app\build\intermediates\classes\debug" 指定加载类的路径,这里包含了android的类,还有我们项目生成的类的目录

com.example.csx.hellojni.MainActivity 是包路径,从这里生成C/C++头文件


5. 手动添加C/C++源文件,包含生成的头文件,实现头文件声明的函数。例如添加hello-jni.cpp源文件,实现代码如下:

#include "com_example_csx_hellojni_MainActivity.h"

jstring JNICALL Java_com_example_csx_hellojni_MainActivity_getStringFramNative(JNIEnv * env, jobject)
{
    return env->NewStringUTF("Hello from JNI");
}


6. 要让Android Studio 支持C++源码的编译,需要修改gradle

 a. 在gradle.properties 中添加 android.useDeprecatedNdk=true

 b. 找到 app 的 build.gradle,在 defaultConfig中添加 ndk配置

ndk {
    moduleName "hello-jni"
    ldLibs "log", "z", "m"
    abiFilters "armeabi", "armeabi-v7a", "x86"
}


7,再 Ctrl + F9 编译,就可以以下目录生成 so 文件

E:\android\demo\HelloJNI\app\build\intermediates\ndk\debug\lib

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值