2017-06-22 87 views
0

我想隐藏我的java代码。因此,我在jni文件夹中创建了java类,并尝试调用该类的method.But,但在C++中查找类时发生了ClassNotFound异常。是否有可能?这是我的第一个ndk项目所以我不知道这个。请告诉我解决方案。如何在jni文件夹中创建java类?可能吗?

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

*我想隐藏我的java代码。*将它隐藏起来?您部署应用的设备的所有者? –

+0

@Andrew Henle谢谢你的回复。有些客户希望在他的项目中实现我的代码。所以我只想给函数名称。但是如果我创建jar文件,他们可以看到我的代码。 – Siddharthan

回答

2

从理论上说,是的,你可以把一个类的JNI文件夹中。但是,它不会达到的效果,你的愿望:

  1. 安卓运行库(类加载器)将无法找到类,所以当你的应用程序试图加载它,你会得到一个运行时异常。
  2. 拥有已安装应用程序的设备的人将能够找到该类。它将被存储在某个地方的文件系统中。

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