2017-08-21 6 views
0

Android 2.3.3 studio (dernière)Cocos Sonar Helper - Configuration de services Google Play jeu sur Android Studio est

Cocos2d-x 3.15.1 (dernière)

J'ai testé sur Déboguer.

C'est ma première expérience avec Cocos2d-x moteur de jeu, j'ai développé un jeu Android en utilisant Cocos2d-x, tout ce qu'il est bien, mais quand j'essayé de montrer les réalisations qu'il me montre une erreur comme ceci:

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) 

Mon code quand je clique pour montrer les réalisations:

SonarCocosHelper::GooglePlayServices::showAchievements(); 

quand je veux vous connecter:

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) 

Mon code pour identifier:

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

Mon fichier Manifest:

<?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> 

Construire Gradle fichier:

enter image description here

Cocos Cadres Helper d'occasion:

enter image description here

Mon Google Play Achievement (j'ai enlevé l'ID de cette photo):

enter image description here

J'ai cherché déjà des solutions en relation avec Android Studio, mais les résultats sont très rares, je ne Je ne sais pas quelle est la solution et quelle est la raison de cette erreur.

Merci,

Répondre

0

J'ai fondé une solution, mais maintenant je suppose que c'est juste une solution sale, d'abord le problème est dans le GooglePlayServices.java et exactement dans la méthode onStart: pointeur NULL Exception car mHelper est nul.

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

Laissez-nous un peu plus loin pourquoi il génère nulle, donc:

1. SonarFrameworkFunctions.java

quand on veut appeler un constructeur GooglePlayServices de 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. Méthode: InstantiateFramework dans 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; 
} 

Le constructeur est vide, donc il n'y a qu'une méthode appelée onCreate que instancier et de préparer la mHelper d'accès à toutes les fonctionnalités de Google Play Services.

Solution (Fix Dirty):

GooglePlayServices.java

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