【问题标题】:How to create java class in jni folder? is it possible?如何在 jni 文件夹中创建 java 类?是否可以?
【发布时间】:2017-06-22 11:08:17
【问题描述】:

我想隐藏我的 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");
  }
}

【问题讨论】:

  • 我想隐藏我的 java 代码。 对谁隐藏?您部署应用的设备的所有者?
  • @Andrew Henle 感谢您的回复。有些客户想在他的项目中实现我的代码。所以我只想给出函数名称。但是如果我制作 jar 文件,他们可以看到我的代码。

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


【解决方案1】:

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

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

基本上,它不会起作用。如果您希望用户的设备能够运行代码,则不能隐藏代码。

【讨论】:

    猜你喜欢
    • 2010-09-23
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    • 2015-12-22
    • 2023-01-13
    • 2018-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多