2017-08-21 2 views
0

Android Studio 2.3.3 (AKTUELLE)Sonar Cocos Helper - Einrichten Google Play-Spieldienste auf Android Studio

Cocos2d-x 3.15.1 (AKTUELLE)

I getestet Debuggen.

Es ist meine erste Erfahrung mit Cocos2d-x Game Engine, entwickelte ich ein Spiel für Android mit Cocos2d-x, all das ist in Ordnung, aber wenn ich versuchte, die Leistungen zu zeigen, es zeigt mir einen Fehler wie folgt aus:

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) 

Mein-Code, wenn ich die Leistungen zu zeigen, klicken Sie auf:

SonarCocosHelper::GooglePlayServices::showAchievements(); 

wenn ich will, sich anzumelden:

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) 

My-Code für Anmelden:

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

Mein Manifest-Datei:

<?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 Datei Körperbau:

enter image description here

Cocos Helper Frameworks verwendet:

enter image description here

Meine Google Play-Auszeichnung (ich die ID dieses Foto entfernt):

enter image description here

ich für Lösungen in Verbindung mit Android Studio schon gesucht, aber die Ergebnisse sind sehr selten, ich don nicht wissen, was die Lösung ist und was das der Grund für diesen Fehler ist.

Danke,

Antwort

0

ich eine Lösung gegründet, aber jetzt denke ich, es ist nur eine schmutziges fix, zuerst das Problem ist in dem GooglePlayServices.java und genau in onStart Methode: Null-Zeiger-Ausnahme, weil mHelper ist Null.

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

Lassen Sie uns ein wenig weiter, warum es null erzeugt, so:

1. SonarFrameworkFunctions.java

wenn wir GooglePlayServices Konstruktor von SonarFrameworkFunctions anrufen möchten. 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. Methode: InstantiateFramework in 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; 
} 

Der Konstruktor ist leer, so gibt es nur eine Methode ist onCreate genannt, die instanziiert und bereiten die mHelper auf Zugang zu allen Funktionen von Google Play Services.

Lösung (Dirty Fix):

GooglePlayServices.java

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