java - 如何在jni文件夹中创建java类?是否可以?

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

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

这是我的 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");
  }
}

最佳答案

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

  1. Android 运行时(类加载器)将无法找到该类,因此当您的应用尝试加载该类时,您会收到运行时异常。
  2. 拥有安装了您的应用的设备的人将能够找到该类(class)。它将存储在文件系统中的某个位置。

基本上,这是行不通的。如果您希望用户的设备能够运行该代码,则无法隐藏该代码。

关于java - 如何在jni文件夹中创建java类?是否可以?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44697629/

相关文章:

java - 线程同步

java-native-interface - FindClass 在 Android NDK 中崩溃

Android NDK 同时使用 C 和 C++ 文件

android - NDK - 包括错误

java - 如何从android中的ActivityThread读取/写入文件?

java - 每次遇到字符时,在数组列表中拆分字符串

java - 在 AnyLogic 的汇编器 block 中配置 "New Agent"

java - 如何在 Android 中旋转 Rect 对象

java - 声明一个全局变量,或者在每个类中声明多次

找到 Android Studio 3.0.1 未知元素 <user-permission>