Sonar Cocos Helper — Настройка игровых сервисов Google Play на Android Studio

Android Studio 2.3.3 (ПОСЛЕДНЯЯ)

Cocos2d-x 3.15.1 (ПОСЛЕДНЯЯ)

Я тестировал на Debug.

Это мой первый опыт работы с Cocos2d-x Game Engine. Я разработал игру для Android с использованием Cocos2d-x, все хорошо, но когда я попытался показать достижения, это показывает мне ошибка как это :

java.lang.NullPointerException
at sonar.systems.framework.SonarFrameworkFunctions.showAchievements(SonarFrameworkFunctions.java:432)
at org.cocos2dx.lib.Cocos2dxRenderer.nativeTouchesEnd(Native Method)
at org.cocos2dx.lib.Cocos2dxRenderer.handleActionUp(Cocos2dxRenderer.java:129)
at org.cocos2dx.lib.Cocos2dxGLSurfaceView$10.run(Cocos2dxGLSurfaceView.java:311)
at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1486)
at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1263)

Мой код, когда я нажимаю, чтобы показать достижения:

SonarCocosHelper::GooglePlayServices::showAchievements();

Когда я хочу войти:

 java.lang.NullPointerException
at sonar.systems.framework.SonarFrameworkFunctions.isSignedIn(SonarFrameworkFunctions.java:277)
at org.cocos2dx.lib.Cocos2dxRenderer.nativeRender(Native Method)
at org.cocos2dx.lib.Cocos2dxRenderer.onDrawFrame(Cocos2dxRenderer.java:105)
at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1557)
at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1263)

Мой код для входа:

 if(!SonarCocosHelper::GooglePlayServices::isSignedIn())
SonarCocosHelper::GooglePlayServices::signIn();

Мой файл манифеста:

    <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.ilyo.test"android:installLocation="auto">

<supports-screens android:anyDensity="true"android:smallScreens="true"android:normalScreens="true"android:largeScreens="true"android:xlargeScreens="true"/>

<uses-feature android:glEsVersion="0x00020000" />

<!-- Basic permission for Internet and don't allow turn of the screen -->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

<application
android:label="@string/app_name"android:allowBackup="true"android:hardwareAccelerated="true"android:icon="@mipmap/ic_launcher">

<!-- Tell Cocos2dxActivity the name of our .so -->
<meta-data android:name="android.app.lib_name"android:value="MyGame" />

<!-- Required for Google Play Services -->
<meta-data android:name="com.google.android.gms.games.APP_ID"android:value="@string/app_id" />
<meta-data android:name="com.google.android.gms.version"android:value="@integer/google_play_services_version"/><activity
android:name="org.cocos2dx.cpp.AppActivity"android:screenOrientation="portrait"android:configChanges="orientation|keyboardHidden|screenSize"android:label="@string/app_name"android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >

<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

</application>
</manifest>

Файл сборки Gradle:

введите описание изображения здесь

Используемые каркасы Cocos Helper:

введите описание изображения здесь

Мои достижения в Google Play (я удалил удостоверение личности с этой фотографии):

введите описание изображения здесь

Я уже искал решения, связанные с Android Studio, но результаты очень редки, я не знаю, что это за решение и в чем причина этой ошибки.

Спасибо,

0

Решение

Я нашел решение, но теперь я думаю, что это просто грязное решение, сначала проблема в GooglePlayServices.java и именно в OnStart метод: исключение нулевого указателя, потому что mHelper нулевой.

@Override
public void onStart()
{
mHelper.onStart((Activity) ctx);
}

Давайте немного дальше, почему он генерирует нуль, так что:

1. SonarFrameworkFunctions.java

когда мы хотим вызвать конструктор GooglePlayServices из SonarFrameworkFunctions.java :

 //GOOGLE PLAY SERVICES
if (SonarFrameworkSettings.USE_GOOGLE_PLAY_GAME_SERVICES)
{
String packageName = "sonar.systems.frameworks.GooglePlayServices.GooglePlayServices";
googlePlayServices = (InstantiateFramework(packageName) != null) ? InstantiateFramework(packageName) : new Framework();
}

2. Метод: Создание рамок в SonarFrameworkFunctions.java

public static Framework InstantiateFramework(String packageName)
{
Framework tmp = null;
try
{
tmp = (Framework) Class.forName(packageName).getConstructor().newInstance();
tmp.SetActivity(((SonarFrameworkActivity) app));
} catch (InstantiationException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e)
{
e.printStackTrace();
Log.e("Class not found", "class doesn't exist or bad package name " + packageName);
}
return tmp;
}

Конструктор пуст, поэтому есть только метод onCreate, который создает и подготавливает mHelper для доступа ко всем функциям Сервисов Google Play.

Решение (Dirty Fix):

GooglePlayServices.java

public GooglePlayServices()
{
mHelper=getGameHelper();
mHelper.setup(this);
}
0

Другие решения

Других решений пока нет …