Вызов JNI из cocos2d-x на Android не запускается в режиме выпуска - PullRequest
0 голосов
/ 31 октября 2018

У меня проблема с вызовом функции из cocos2d-x (C ++) в Android Native (Java) в режиме выпуска.

В cocos2d-x у меня есть функция: logInToGamePlayServices , которая будет вызывать функцию на стороне Java, начиная вход в службу Game Play. Работает нормально в режиме отладки. Но когда я делаю сборку релиза для загрузки в хранилище, эта функция не срабатывает.

Настройки моей сборки:
Версия SDK для компиляции: API 27: Android 8.1 (Oreo)
Целевая версия SDK: API 27: Android 8.1 (Oreo)
Минимальная версия SDK: API 15: Android 4.0.3 (IceCreamSandwich)
Версия инструмента сборки: 28.0.3
NDK: android-ndk-r16b
Cocos2d-x: v3.17

C ++:

#include "platform/android/jni/JniHelper.h"
#include <jni.h>

USING_NS_CC;
void NativeHelper::logInToGamePlayServices() {

    JniMethodInfo methodPlayGame;
    if (JniHelper::getStaticMethodInfo(methodPlayGame, "games/core/CoreActivity", "logInToGamePlayServices", "()V")) {
        methodPlayGame.env->CallStaticVoidMethod(methodPlayGame.classID, methodPlayGame.methodID);
    }

}

Родной Android:

package games.core;

public class CoreActivity extends Cocos2dxActivity {

       public static void logInToGamePlayServices() {

        _shareInstance.runOnUiThread(new Runnable() {
            public void run() {
                Intent signInIntent = _shareInstance.mGoogleSignInClient.getSignInIntent();
                _shareInstance.startActivityForResult(signInIntent, RC_SIGN_IN);
            }
        });

    }
}

1 Ответ

0 голосов
/ 06 ноября 2018

По умолчанию в сборке релиза используется запутывание ProGuard. Если вы планируете использовать некоторые обратные вызовы Java из JNI или с помощью рефлексии, вы должны явно исключить эти методы от запутывания. Еще несколько примеров можно найти в https://stackoverflow.com/a/7881522/192373.

...