JNI开发注意事项

JNI开发注意事项
1、包含native方法的java类写在src/main/java/包名目录下
2、用javac HelloJni.java生成class文件,用javah -classpath E:\ASWorkspace\LoadImage\app\src\main\java  包名.HelloJni生成.h头文件
3、在src/main目录下新建一个jni目录,将生成的HelloJni.h文件拷贝到jni目录,jni目录右键C++ source file,命名HelloJni.cpp,实现native方法
  #include <jni.h>
#include <string>


extern "C"
JNIEXPORT jstring


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


4、编译工程,在app/build/intermediates/cmake/debug/obj目录生成了各平台的so文件
app目录右键新建libs文件夹,将刚刚生成的so文件拷贝到这个目录


5、在需要调用jni方法的类里面声明
static{
 System.loadLibrary("HelloJni");
}
在需要调用方法的地方:
HelloJni jni = new HelloJni();
jni.printStr();


6、报错app:transformNativeLibsWithMergeJniLibsForDebug'. > Unknown file null
  解决://        sourceSets.main{
//            jni.srcDirs = []
//            jniLibs.srcDir "src/main/libs"
//        }
将上面代码注释掉,然后clean Project,再运行一下就可以了


7、在jni目录下新建Android.mk文件和Application.mk文件
Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := HelloJni
LOCAL_SRC_FILES := HelloJni.cpp
inclue $(BUILD_SHARED_LIBRARY)


Application.mk:
APP_STL := gnustl_shared


8、app的build.gradle同级目录新建CMakeLists.txt文件,内容如下:
cmake_minimum_required(VERSION 3.4.1)
add_library(HelloJni SHARED src/main/jni/HelloJni.cpp)


9、app的build.grdle文件里面添加
 defaultConfig {
        ndk{
            moduleName "HelloJni"
            abiFilters "armeabi","armeabi-v7a", "x86", "mips", "arm64-v8a"
        }
} 就可以生成多个平台的so文件了

10、在项目的gradle.properties里添加android.useDeprecatedNdk=true
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值