如何在jni文件夹中创建java类?可能吗?

时间:2017-06-22 11:08:18

标签: java android android-ndk java-native-interface ndk-build

我想要隐藏我的java代码。所以我在jni文件夹中创建java类并尝试调用该类方法。但是我在c ++中查找类时遇到ClassNotFound异常。是否可能?。这是我的第一个ndk project.so我不知道这个。请告诉我解决方案。

这是我的c ++代码

#include <jni.h>
#include <string.h>
#include <iostream>
using namespace std;

extern "C" JNIEXPORT jstring JNICALL 
Java_com_example_sohamsaa_ndktest_MyNativeClass_startRecord(JNIEnv* env,jobject obj){

jclass cls2 = env->FindClass("jni/MyTest");//here i'm getting classnotfound exception  

if(cls2 == NULL) {
   cerr << "ERROR: class not found !";
}
else {                                 
   cout << "Class MyTest found" << endl;
   jmethodID mid = env->GetStaticMethodID(cls2, "mymain", "()V"); 
   if(mid == NULL)
       cerr << "ERROR: method void mymain() not found !" << endl;
   else {
       env->CallStaticVoidMethod(cls2, mid);                     
       cout << endl;
   }
}
return (*env).NewStringUTF("Hi siddharthan");
}

这是我的java类

public class MyTest {
   public static void mymain() {  
      System.out.println("Hello, World in java from mymain");
  }
}

1 个答案:

答案 0 :(得分:2)

理论上,是的,你可以把一个类放在JNI文件夹中。但是,它不会达到你想要的结果:

  1. Android运行时(类加载器)无法找到该类,因此当您的应用程序尝试加载时,您会收到运行时异常。
  2. 拥有已安装应用程序的设备的人员将能够找到该课程。它将存储在某个文件系统中。
  3. 基本上,它不起作用。如果您希望用户的设备能够运行它,则无法隐藏代码。