草庐IT

JNI_OnLoad

全部标签

安卓 : JNI ERROR (app bug): local reference table overflow (max=512)

我有一个具有native代码的Android应用程序。native代码需要从java代码中获取特定值;这个值会定期更新,所以我需要在需要使用它的时候获取它。我正在使用JNI进行从native代码到Java代码的调用。std::stringval;JNIEnv*env=JSC::Bindings::getJNIEnv();jclassbridgeClass=env->FindClass("com.mypackage.MyClass");jmethodIDmethod=env->GetStaticMethodID(bridgeClass,"getVal","()Ljava/lang/Str

android - 在 Android : UNsatisfiedLinkError 中使用 jni

我是jni的新手,我正在阅读一个教程来实现一个简单的native方法,但我遇到了一个不满意的链接错误。据我所知,我完全按照教程中的步骤操作。请帮助我。这是java包装器代码:packagecom.cookbook.jni;publicclassSquaredWrapper{//Declarenativemethod(andmakeitpublictoexposeitdirectly)publicstaticnativeintsquared(intbase);//Provideadditionalfunctionality,that"extends"thenativemethodpubl

java - 调用静态 JNI 方法以从 C++ 返回字符串

我正在尝试在Android中调用以下java方法publicstaticStringgetLevelFile(StringlevelName){/*body*/}从c++使用以下jni代码JniMethodInfoJavaApimethodInfo;if(!getStaticMethodInfo(methodInfo,"getLevelFile","(Ljava/lang/String;)Ljava/lang/String;")){returnstd::string("");}LOGD("callinggetLevelFile");jstringreturnString=(jstrin

android - 如何从 JNI 启动一个新线程

我需要从android应用程序的native部分启动一个新线程。它必须在JNI中声明和定义。有人知道我该怎么做吗?如果有人会发布示例,我将非常高兴。 最佳答案 最简单的方法是使用C++11线程类。参见thistopic关于如何使用AndroidNDK启用C++11。另见thispost如果您在让线程类工作时遇到问题。然后你可以像这样使用它:#include//std::threadvoidfoo(){//dostuff...}voidbar(intx){//dostuff...}JNIEXPORTvoidJNICALLJava_or

android - 如何将字节数组从 android java 类传递到 JNI C NDK?

我在java类中有字节数组,我想将该字节数组传递给JNIC类,我无法在JNIC中访问该数组,请帮忙。 最佳答案 您需要像这样声明接收数组的JNI函数(在Java中):privatenativevoidsendData(byte[]data);您可以像调用任何其他函数一样调用该函数:sendData(buffer);然后在您的C代码中实现如下函数:JNIEXPORTvoidJNICALLJava_com_packageXXX_yourClass_sendData(JNIEnv*env,jobjectthiz,jbyteArraydat

android - 检测 Android JNI 代码中的 native 内存泄漏

如何检测AndroidJNI代码中的内存泄漏?我正在使用Froyo 最佳答案 2017年更新:valgrindisavailable对于安卓。内置的malloc调试功能在AndroidN中得到了显着扩展,并且对于查找内存泄漏非常有用。您可能需要_exit()应用程序来触发转储。下面描述的DDMS功能目前获得briefmention在官方文档中。您可以利用一项不受支持的实验性功能。在您的DDMS配置文件中(例如Linux上的~/.android/ddms.cfg),添加“native=true”。这会启用NativeHeap选项卡。接

java - 从 native 函数(c++、jni)返回一个 int 会使应用程序崩溃

试图找出为什么返回int的c++函数调用会导致整个应用程序崩溃而没有任何错误/警告。这是工作代码:jintJava_org_ntorrent_DummyTorrentInfoProvider_next(JNIEnv*env,jobjectobj,jintnumber){jinttest=rand();__android_log_print(ANDROID_LOG_DEBUG,"HelloNDK!","rand()=%d",test);returnnumber;}这段代码在没有警告的情况下使应用程序崩溃:jintJava_org_ntorrent_DummyTorrentInfoProv

android - JNI 加载 : Warning : Do not hardcode use Context. getFilesDir().getPath() 而不是

我的一个应用程序遇到问题,我有以下代码来加载应用程序需要的库(JNI):static{//loadtheJNIlibraryLog.i("JNI","loadingJNIlibrary...");System.load("/data/data/com.mypackage.appname/lib/libxxxxxx.so");Log.i("JNI","JNIlibraryloaded!");}所以我得到警告:“请注意硬编码使用Context.getFilesDir().getPath()代替”这是完全正确的(它不会在所有设备上都可移植)。问题是,因为我使用的是静态的,所以我无法调用Con

java - 什么是使用 JNI 的 byte[] 字节数组的方法描述符/签名?

我的JAVA类代码fragment。我想使用JNI从我的C文件访问getReg_chal()方法:publicbyte[]getReg_chal(){returnreg_chal;}我的C文件执行一些jni操作:mid=(*env)->GetMethodID(env,info,"getReg_chal()","([B)V");mid=(*env)->GetMethodID(env,info,"getReg_chal()",***);我想知道我的byte[]的方法描述符。编写"({B)V"给我方法未找到错误。我要填***什么?请帮我。提前致谢。 最佳答案

java - Android JNI - 从 C++ 调用 Android UI 线程上的函数

我们的游戏引擎Cocos2d-x在android上本地运行在它自己的non-Java-UI-thread上。我们需要通过AndroidUI线程上的JNI从C++调用某些Java函数。为了调用JNI-Functions,我们使用来自此处(GitHub)的JNIHelper.h/cpp:JniHelper.h,JniHelper.cpp例如这个C++代码:autoretVal=JniHelper::callStaticStringMethod("org/utils/Facebook","getFacebookTokenString");理想情况下,我们希望所有这些调用都发生在Android