2017-06-22 6 views
0

私はjavaコードを隠したいと思っています。jniフォルダ内にJavaクラスを作成し、そのクラスメソッドを呼び出そうとしています。しかし、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. をあなたのアプリがそれをロードしようとしたときに実行時例外になるだろうように、Androidのランタイム(クラスローダー)は、クラスを見つけることができないだろう。
  2. あなたのアプリがインストールされているデバイスを所有している人は、そのクラスを見つけることができます。それはどこかのファイルシステムに保存されます。

基本的には動作しません。ユーザーのデバイスで実行できるようにする場合は、コードを非表示にすることはできません。

関連する問題