Android Studioc创建JNI项目

新建工程:

一定要把这个勾上:


flag.png

在defaultConfig里加入如下代码:

ndk {
            abiFilters "x86_64", "armeabi-v7a", "x86" //输出指定三种平台下的so库 可以自己决定
        }

另外默认的so名称是:native-lib,也可以修改,修改步骤如下:
1:打开项目中的 app\CMakeLists.txt ,找到:

add_library( # Sets the name of the library.
             native-libs

             # Sets the library as a shared library.
             SHARED

             # Provides a relative path to your source file(s).
             src/main/cpp/native-lib.cpp )

仅仅修改上面代码中,第一个native-lib以及加载库时,设定的类名字符串:

static {
        System.loadLibrary("native-lib");
    }

还有一个地方,下面代码第一个native-lib:

target_link_libraries( # Specifies the target library.
                       native-libs

                       # Links the target library to the log library
                       # included in the NDK.
                       ${log-lib} )

注意:你要写的JNI要和自己的工程路径一样,即“System.loadLibrary("native-lib");”这个代码写在哪个类里,JNICALL的路径就是哪个,并且在该类里定义原生方法:

public native String stringFromJNI(); 

我的路径是“com.example.jackieyao.hellojni.MainActivity”所以,jni代码如下:

extern "C"
JNIEXPORT jstring

JNICALL
Java_com_example_jackieyao_hellojni_MainActivity_stringFromJNI(
        JNIEnv *env,
        jobject /* this */) {
    std::string hello = "Hello from C++   dsdsf";
    return env->NewStringUTF(hello.c_str());
}

build后,在“/Users/jackieyao/Downloads/HelloJNI2/app/build/intermediates/cmake”里就会出现多平台的so文件。
如果运行失败,尝试在项目的gradle里的android{...}里加入如下代码:

sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }

在MainActivity里使用如下:

ff.png

你可能感兴趣的:(Android Studioc创建JNI项目)