Android Studio JNI

先说下版本 Android Studio 2.1.2; android-ndk-r10d

达到的最终结果:

在一个Android中可以引用多个自定义的c++实现模块(xxx.so)

1,先创建一个简单的Android Project. 设置好ndk相关配置

选择菜单(File=>Project Structure=>SDK Location),配置好相应的参数,然后打开`gradle.properties`文件,在末尾加上`android.useDeprecatedNdk=true`

2,在Project视图中切换到Project,在first=>src=>main=>java=>com.xxx.xxx目录下添加一个java class文件(native_to_java.java),内容如下:

`//native_to_java.java

package com.example.administrator.externel_lib;

public classnative_to_java {

static{ System.loadLibrary("first");}

public static native  int first_func(int x);

}`

3,菜单选择(Build=>Make Project)或者直接(ctrl+F9),生成native_to_java.class文件

4,菜单选择(View=>Top Windows=>Teminal),切换到app/src/main/java目录下,运行 

`javah -jni  com.example.administrator.externel_lib.classnative_to_java`生成c++头文件

`com.example.administrator.externel_lib.classnative_to_java.h`

5,在Project视图中切换到Project,在工程顶节点右键选择(New=>Module=>Android Library),取名为`first`

6,在first=>src=>main目录下新建目录(Directory),取名字(jni),把第4步中生成的头文件`com.example.administrator.externel_lib.classnative_to_java.h`放入其中,并在jni中添加头文件函数的实现文件xxx.cpp;

7,在xxx.cpp中定义`int first_func(int x)`的实现。并在jni目录中添加一个空的abc.c文件。(需要一个.c文件,不然会编译失败,我电脑上是这个样子)

8,配置 first=>build.gradle 中的 android=>defaultConfig节点。在后面添加

`

ndk{

moduleName "first"

//这里可以添加一些其他的编译项给当前模块,比如,依赖的库文件 ,可以用 ldLibs "m"来说明需要链接libm.so,还有一些其他选项

`

9,配置`app=>build.gradle`文件的`dependencies`节点,添加`app`对模块`first`的依赖

`

dependencies

{

//在末尾添加下面的值,这里添加后

compile project(':first')

}

`

10,在第9步添加可以在菜单(File=>Project Structure=>modules=>app)的`dependencies`下可以看到,但是在这里添加依赖模块在我的电脑上无法操作;

到这里,关于添加`first`模块的所有配置已经完成,然后把class就可以在`app`的安卓代码里面调用`classnative_to_java.first_func(...)`函数了,配好手机连接,点击编译,运行,就成功了;如果想添加第二个模块`second`, 直接回到第二步再操作一遍。

你可能感兴趣的:(Android Studio JNI)