jni笔记

1.cmd

2.cd 到src/main

3.javah -d jni -classpath  C:\Android\sdk\platforms\android-23\android.jar;..\..\build\intermediates\classes\debug cleanrobot.robot.com.myapplication.nativer.Nativer

4.build.gradle 配置ndk环境编译c/c++  

apply plugin: 'com.android.application'

task ndkBuild(type: Exec) {

commandLine 'C:\\Users\\chuo_qin\\AppData\\Local\\Android\\android-ndk-r11b\\ndk-build.cmd','-C', file('src/main').absolutePath

}


tasks.withType(JavaCompile) {
    compileTask -> compileTask.dependsOn ndkBuild
}


android {

sourceSets {
        main {
            jni.srcDirs = []   //屏蔽gradle的jni生成过程

jniLibs.srcDir 'src/main/libs'
        }
    }

}


5.注意事项

错误1:

Error:error: base operand of '->' has non-pointer type 'JNIEnv {aka _JNIEnv}'

c写法

jclass  clz = (*env)->FindClass(env,"cleanrobot/robot/com/myapplication/nativer/ActivityTestNative");

c++写法

jclass  clz = env->FindClass("cleanrobot/robot/com/myapplication/nativer/ActivityTestNative");


错误2:

g_ctx.activityTestNativeClz = env->NewGlobalRef(clz);

invalid conversion from 'object {aka _jobject*}' to 'jclass {aka _jclass*}'

g_ctx.activityTestNativeClz =(jclass) env->NewGlobalRef(clz);


错误3:

线程结束时记得调用

g_ctx.javaVM->DetachCurrentThread();


6.Error:error: 'string' was not declared in this scope

Application.mk添加以下加以支持APP_STL := gnustl_static

.cpp文件 添加 #include <string> using std::string;  或者 #include <string> using namespace std;


7.can pass objects of 'std::string {aka class std::basic_string

string s = "123"; LOGE("S = %s",s.data()); c 指支持char *, char[]两种类型

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值