NDK开发中问题

1.前期ndk开发主要是在开源项目中复用项目的makefile等,就需要修改指定CC或C++编译链;具体情况还依赖于工程的config文件;
对于简单项目,则可以直接编写Android.mk;例如引入的GTest与GMock;
重新创建Android.mk,利用ndk-build生成.a文件,一同引入新ndk工程即可;
另外吐槽下Gmock;对于mock函数还需要继承类,比linux上的mock难用多了;
另外Gtest 也不支持静态对象的判断,对于函数内赋值,不能指望全局对象,只能判断输出参数或者返回值

  1. JNI调用
    C++ 回调java,不同线程间根据Jvm重新获取env不必再多解释
    g_JavaVM->GetEnv((void **)&envnow
    g_JavaVM->AttachCurrentThread(&envnow

    在保存class 对象时;
    g_DMClass = env->findclass("/com/example/controller")
    即使g_DMClass 是全局对象也不行;也会遇到stable local ref ;
    需要
    jclass tmp =  env->findclass("/com/example/controller");
    g_DMClass = (jclass)env->NewGlobalRef(tmp);
    
    但是在子线程中遇到FIndClass为空问题,始终没找到合适解释,部分文章提到是子线程的类查找机制问题,但没有提供准确解决方式

原文地址:https://blog.51cto.com/lindt/2446941

时间: 2024-10-17 12:37:58

NDK开发中问题的相关文章

NDK开发中出现各种Semantic Error“XXX 'xxx' could not be resolved”的解决方法

项目要求NDK开发App程序,于是import了工程项目,搭好了环境,结果出现各种 Type 'xxx' could not be resolved Method 'xxx' could not be resolved 等等Semantic Error.但是工程本身并不存在错误,可以成功编译. 解决方法:明显是没有包含各种头文件造成的,<jni.h>这些头文件包含进工程即可. 右键工程->Properties->C/C++ General->Paths and Symbols

Couldn&#39;t load libPassword from loader:NDK开发中C文件编译成cpu的so类库时,找不到类库报错的原因之一

LogCat输出: 03-03 12:42:32.665: E/AndroidRuntime(32432): FATAL EXCEPTION: main03-03 12:42:32.665: E/AndroidRuntime(32432): Process: com.toro.passwordencode, PID: 3243203-03 12:42:32.665: E/AndroidRuntime(32432): java.lang.UnsatisfiedLinkError: Couldn't

android -------- 解决NDK开发中的 Method &#39;NewStringUTF&#39; could not be resolved

创建NDK项目时, .cpp文件中出现错误, Method 'NewStringUTF' could not be resolved 如图: 网上看了很多解决方式 项目右键->属性->c/c++常规->Code Analysis,选择"Use project settings"  中的方法无法被解析(Method cannot be resolved)取消选择,应用->确定,然后刷新.清理.刷新.build项目.搞定. 我的是这样改了之后也没成功 , 我在cle

如何定位Android NDK开发中遇到的错误

做android应用的调试,最怕就是报错,crash,看到这篇好文章,记录一下: 转自:http://www.csdn.net/article/2014-12-30/2823366-Locate-Android-NDK Android NDK是什么? Android NDK 是在SDK前面又加上了“原生”二字,即Native Development Kit,因此又被Google称为“NDK”.众所周知,Android程序运行在Dalvik虚拟机中,NDK允许用户使用类似C / C++之类的原生代

android NDK开发中,用Cygwin调试本地代码时报错“Another debug session running,Use --force to kill it”原因及解决办法

在使用ndk-gdb调试的时候,执行$NDK/ndk-gdb --verbose报错"Another debug session running,Use --force to kill it". 我查了NDK官方文档,是这样说的: --force: By default, ndk-gdb aborts if it finds that another native debugging session is running on the same device. Using --forc

Android NDK 开发(三)--常见错误锦集合Log的使用【转】

转载请注明出处:http://blog.csdn.net/allen315410/article/details/41826511  Android NDK开发经常因某些因素会出现一些意想不到的错误,很多时候调试这些错误的时候,显得比调试Java代码要复杂,一方面是导致错误的原因很多很杂,另一方面NDK开发涉及到C/C++代码的编写,很多程序员对此不熟悉.那么这篇博客就总结一下,在NDK开发中经常出现的一些问题,并且尝试提供一些正确的解决方案,方便在开发时能够快速定位到错误,更改错误,当然了,错

NDK开发基本知识

(3) NDK开发中乱码问题 解决乱码思路 : C语言编译的时候用的是 ISO-8859-1 码表进行编码, 如果我们使用C语言jni开发, 需要进行转码操作; -- 将ISO-8859-1转为UTF-8字符: String string = new String(str.getBytes("iso8859-1"), "UTF-8"); 示例 : 添加中文jni调用 : 将jni中的hello.c 中返回的字符串修改为中文, 重新编译 .so 静态库文件; -- 修

Android NDK开发(一)——环境搭建

转载请注明出处:http://blog.csdn.net/allen315410/article/details/41800955 Android下的NDK开发是Android开发中不可或缺的一部分,通过Google提供的NDK套件,我们可以使用JNI这座桥梁在Java和C/C++之间建立联系(互相调用).那么,为什么在Android开发中需要了解NDK开发呢?诚然,这些原因有很多说法,在我总结来是这样的.C/C++是比Java还要古老的编程语言,由于其古老的特性,导致早期有很多优秀的类库出现,

Android NDK 开发(四)java传递数据到C【转】

转载请注明出处:http://blog.csdn.net/allen315410/article/details/41845701 前面几篇文章介绍了Android NDK开发的简单概念.常见错误及处理和从第一个Hello World开始实际做一个简单的JNI开发示例,相信看完之后,大家对NDK开发有了一个概念上的认识了,那么接下来我们需要再深入一下NDK的开发,我们知道NDK开发就是使用JNI这层“协议”在Java和C之间起个“桥梁”的作用,将Java和Native C之间联立起来,让Java