2017-06-22 51 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. 擁有已安裝應用程序的設備的人將能夠找到該類。它將被存儲在某個地方的文件系統中。

基本上,它不會工作。如果您希望用戶的設備能夠運行它,則無法隱藏代碼。