아래 코드로 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에 그냥 멈 춥니 다. 확실하지 않은 무엇이 잘못 !!!
다른 쉬운 예를 확인할 수 있습니까? 그리고 첫 번째 시도는 어디 있습니까? – EJP
첫 번째 시도는 다음과 같습니다. – user1416662
JNI에서 다시 구현하려는 Java 코드와 처음에는 아무런 닮은 점이 없었으며 아직 수행하려는 * 이유 *를 제공하지 않았습니다. 나는 그 요점을 볼 수 없다. – EJP