在发布模式下未触发从cocos2d-x到Android的调用JNI

时间:2018-10-31 08:24:47

标签: java-native-interface cocos2d-x cocos2d-x-3.0 cocos2d-android cocos2d-js

在发布模式下,从cocos2d-x(C ++)到Android Native(Java)的调用函数有问题。

在cocos2d-x中,我有一个函数: logInToGamePlayServices ,它将在Java端调用一个函数来开始登录Game Play Service。它在调试模式下正常工作。但是,当我发布要发布到存储的发行版本时,不会触发此功能。

我的构建设置:
编译SDK版本: API 27:Android 8.1(Oreo)
目标SDK版本: API 27:Android 8.1(奥利奥)
最低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 Native:

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 :(得分:1)

默认情况下,发布版本会调用ProGuard模糊处理。如果计划使用JNI或通过反射使用某些Java回调,则必须明确地将这些方法从混淆中排除。在 https://stackoverflow.com/a/7881522/192373 中可以找到更多示例。