2012-08-05 4 views
0

아래 코드로 Android에 연결된 서비스 이름을 얻을 수 있습니다.JNI에서 아래 코드를 구현 하시겠습니까?

//packageToCheck - pass the package name 
PackageInfo servicePackage = null; 
servicePackage = pm.getPackageInfo(packageToCheck, PackageManager.GET_SERVICES); 
ServiceInfo[] sinfo = servicePackage.services; 

for(ServiceInfo Servinfo : sinfo){ 
    System.out.println("Service Name:" + Servinfo.name + "for Package:" + packageToCheck); 
} 

이제 C 코드를 사용하여 JNI에서 구현하려고합니다. 구현 방법에 대한 통찰력이나 샘플 코드? 감사!!!

첫 번째 시도는 다음과 같습니다. jclass cls = (* env) -> GetObjectClass (env, obj);

__android_log_print(ANDROID_LOG_VERBOSE, APPNAME, "1\n"); 
jmethodID mid = (*env)->GetMethodID(env, cls, "getPackageManager", "()Landroid/content/pm/PackageManager;"); 
__android_log_print(ANDROID_LOG_VERBOSE, APPNAME, "2\n"); 
jobject packageManager = (*env)->CallObjectMethod(env, obj, mid); 
__android_log_print(ANDROID_LOG_VERBOSE, APPNAME, "3\n"); 
// this.getPackageName() 
mid = (*env)->GetMethodID(env, cls, "getPackageName", "()Ljava/lang/String;"); 
__android_log_print(ANDROID_LOG_VERBOSE, APPNAME, "4\n"); 
jstring packageName = (jstring) (*env)->CallObjectMethod(env, obj, mid); 
__android_log_print(ANDROID_LOG_VERBOSE, APPNAME, "5\n"); 

"2"를 출력 한 후 LogCat에 그냥 멈 춥니 다. 확실하지 않은 무엇이 잘못 !!!

+0

다른 쉬운 예를 확인할 수 있습니까? 그리고 첫 번째 시도는 어디 있습니까? – EJP

+0

첫 번째 시도는 다음과 같습니다. – user1416662

+0

JNI에서 다시 구현하려는 Java 코드와 처음에는 아무런 닮은 점이 없었으며 아직 수행하려는 * 이유 *를 제공하지 않았습니다. 나는 그 요점을 볼 수 없다. – EJP

답변

0

정말 최소한의 예입니다. 확인하고 실행하면됩니다.

https://bitbucket.org/sentimental/jni_poc

+0

Bryan, 이것은 JNI를위한 아주 간단한보기이다. 그러나, 나는 나의 첫번째 시도를위한 어떤 실시라도 얻게 행복 할 것이다. 감사!!! – user1416662

+1

@ user1416662 잊어 버려. 이것은 무료 코딩 서비스가 아닙니다. 당신이 얻게 될 것은 * 당신의 코드에 대한 비판입니다. – EJP

+0

;) 하하, plz 내 일을하고 나는 클라이언트에게 청구합니다. –

0

당신은 무엇을 목적으로 here

관련 문제