как «Получить указатель службы Android ServiceManager (getService)» с помощью «API вызова jni. (c ++ -> java)» - PullRequest
0 голосов
/ 25 июня 2019

[Android] используется "API вызова jni". (C ++ -> My.Java) Успешность вызова метода My.java из c ++. Однако, Моя проблема, невозможно получить дескриптор через getService (ServiceManager) внутри метода My.Java.

Если вы создадите экземпляр my.java в приложении для Android, getservice будет работать. но getService завершается ошибкой при вызове метода в My.java из исполняемого файла C ++ (JNI Invocation). (нужно наследование контекста?: но «API вызова JNI» не работает при наследовании контекста.)

C ++ (Call Java)

int JNI_Call_RadioManager(const char* str, int vel){    
jmethodID Method = nullptr;

if(!JNI_EnvCheck()){return -1;}

Method = ENV->GetStaticMethodID(CLS,"RadioManager_call", "(Ljava/lang/String;I)V");
if (Method) {       
    ENV->CallStaticVoidMethod(CLS,Method,ENV->NewStringUTF(str), vel);
    log(STAGI"JNI_Call_RadioManager  \n");
}else
    log(STAGE"JNI_Call_RadioManager Err \n");

return 0;

My.java

private static void RadioManager_call(String str, int num){     
    getService();
}

private static IRadioService getService() {
    LOG.info("[  JNI  ] getService\n");

    if (sService == null) {
        IBinder b = ServiceManager.getService(Service.RADIO_SERVICE);  //Error
        sService = IRadioService.Stub.asInterface(b);
    }
    return sService;
}

(Logcat Log)

Не найдена реализация для int android.os.SystemProperties.native_get_int (java.lang.String, int) (пробовал Java_android_os_SystemProperties_native_1get_1int и Java_android_os_SystemProperties_native_1get_1int__Ljava_lang_String_2)

Landroid / OS / ServiceManager; не удалось инициализировать: java.lang.UnsatisfiedLinkError: Не найдена реализация для int android.os.SystemProperties.native_get_int (java.lang.String, int) (пробовали Java_android_os_SystemProperties_native_1get_1int и Java_android_os_SystemProperties_ava_1_1_1_1_1_1_1_1_1_1_1_1)

...