0

AndroidのJavaで以下のコードにリンクされたサービス名を取得できます。

//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 でハングアップします。何が悪いのかわからない!!!

4

2 に答える 2

0

ここで別の簡単な例を確認できます

于 2012-11-04T16:18:29.583 に答える
0

これは非常に最小限の例です。チェックアウトして実行できます。

https://bitbucket.org/sentimental/jni_poc

于 2012-08-05T08:03:59.183 に答える