我想从NDK C++线程调用Java,但是env->FindClass()返回0。但是当我在主线程中调用Java时,它工作得很好。我已经在线程中调用了AttachCurrentThread(),有人能帮我吗?
以下是源代码:
JAVA代码:
public class simple_test extends Activity {
...
// This functin will be called in C++
public void PrintNdkLog(String slog) {
Log.e(logTagNDK, slog);
我正在和C++一起尝试JNI。但我得到了一个错误:Class not found!。我搜索了其他解决方案,但不是为我工作。
Code.java:
package com.xxx;
public class Code
{
public void getMessage()
{
System.out.println("Hello World!");
}
}
main.cpp:
#include <jni.h>
#include <iostream>
using namespace std;
int main(int argc, char
请帮助从C++调用(非静态),它是简单的sdl2安卓项目。我试过很多次了,但做不到。CallVoidMethod总是崩溃。
C++代码:
JNIEnv* Android_JNI_GetEnv(void) {
JNIEnv *env;
int status = mJavaVM->AttachCurrentThread(&env, NULL);
if(status < 0) {
LOGE("failed to attach current thread");
return 0;
}
ret
我正在我的C++应用程序中为windows创建一个JVM,我无法说服它加载多个jars。
我的C++代码:
MyClass::MyClass(std::string & classPath) {
classPath = "-cp "+classPath; // <-- Won't work with any path or single jar
//classPath = "-Djava.class.path="+classPath; <-- Only works with single jar
jvmO
我得到了以下错误:
JNI检测到应用程序中的错误: JNI GetMethodID调用了挂起的异常,java.lang.ClassNotFoundException:没有找到路径上的类"package.name.class“:DexPathList[zip file "/system/framework/sample.jar",nativeLibraryDirectories=/供应商/lib,/system/lib]
JNI DETECTED ERROR IN APPLICATION: JNI GetMethodID called with pending e
在JNI内部,如何获得字符串资源id?例如,在Java中,它看起来像
final int langId = R.string.LANGUAGE;
有自动生成的R.java:
package com.my.game;
...
public final class R {
...
public static final class string {
public static int LANGUAGE=0x7f06001c;
...
}
...
}
我试过了
jclass rcl = jni_env->FindClass("
下面的代码在JAVA级别上接受int值
dataObj.property(20);
这是属性函数的定义。
void property(Object value){
// JNI called
}
JNI函数定义
Java_com_XXX_XXXX_JNIProperty(JNIEnv *a_pEnv, jclass, **jobject a_oPropertyValue**) {
// how to convert jobject to Integer object and then get the intValue
jclass cls = a_pEnv->Fin
我试图使一些JNI代码从一个应用程序移植到另一个应用程序。最终目标是创建一个本机代码库,可以在任何应用程序中使用。
我到目前为止所做的事:
创建了一个Java类,其唯一目的是调用本机方法:
package my.example.nativelib;
public class JavaToC {
public static void loadLib() {
System.loadLibrary("myLib");
}
public static int fooNative(int[] datas) {
return fo