2016-04-20 3 views
2

Hallo Ich versuche proguard in meinem libgdx Projekt zu verwenden, aber ich habe einen Fehler, den ich nicht lösen kann.Proguard und Libgdx NullPointerException bei unbekannter Quelle

Das sind meine Dateien:

build.gradle:

android { 
       buildToolsVersion "23.0.3" 
       compileSdkVersion 23 
       sourceSets { 
        main { 
         manifest.srcFile 'AndroidManifest.xml' 
         java.srcDirs = ['src'] 
         aidl.srcDirs = ['src'] 
         renderscript.srcDirs = ['src'] 
         res.srcDirs = ['res'] 
         assets.srcDirs = ['assets'] 
         jniLibs.srcDirs = ['libs'] 
        } 

        instrumentTest.setRoot('tests') 
       } 
       defaultConfig { 
        applicationId "com.vabrang.zeros" 
        minSdkVersion 8 
        targetSdkVersion 23 
       } 

       buildTypes { 
        debug { 
         minifyEnabled true 
         proguardFile getDefaultProguardFile('proguard-android-optimize.txt') 
         proguardFile 'proguard-project.txt' 
        } 
       } 
      } 


      // called every time gradle gets executed, takes the native dependencies of 
      // the natives configuration, and extracts them to the proper libs/ folders 
      // so they get packed with the APK. 
      task copyAndroidNatives() { 
       file("libs/armeabi/").mkdirs(); 
       file("libs/armeabi-v7a/").mkdirs(); 
       file("libs/arm64-v8a/").mkdirs(); 
       file("libs/x86_64/").mkdirs(); 
       file("libs/x86/").mkdirs(); 

       configurations.natives.files.each { jar -> 
        def outputDir = null 
        if(jar.name.endsWith("natives-arm64-v8a.jar")) outputDir = file("libs/arm64-v8a") 
        if(jar.name.endsWith("natives-armeabi-v7a.jar")) outputDir = file("libs/armeabi-v7a")   
        if(jar.name.endsWith("natives-armeabi.jar")) outputDir = file("libs/armeabi") 
        if(jar.name.endsWith("natives-x86_64.jar")) outputDir = file("libs/x86_64") 
        if(jar.name.endsWith("natives-x86.jar")) outputDir = file("libs/x86") 
        if(outputDir != null) { 
         copy { 
          from zipTree(jar) 
          into outputDir 
          include "*.so" 
         } 
        } 
       } 
      } 

      task run(type: Exec) { 
       def path 
       def localProperties = project.file("../local.properties") 
       if (localProperties.exists()) { 
        Properties properties = new Properties() 
        localProperties.withInputStream { instr -> 
         properties.load(instr) 
        } 
        def sdkDir = properties.getProperty('sdk.dir') 
        if (sdkDir) { 
         path = sdkDir 
        } else { 
         path = "$System.env.ANDROID_HOME" 
        } 
       } else { 
        path = "$System.env.ANDROID_HOME" 
       } 

       def adb = path + "/platform-tools/adb" 
       commandLine "$adb", 'shell', 'am', 'start', '-n', 'com.vabrang.zeros/com.vabrang.zeros.AndroidLauncher' 
      } 

      // sets up the Android Eclipse project, using the old Ant based build. 
      eclipse { 
       // need to specify Java source sets explicitly, SpringSource Gradle Eclipse plugin 
       // ignores any nodes added in classpath.file.withXml 
       sourceSets { 
        main { 
         java.srcDirs "src", 'gen' 
        } 
       } 

       jdt { 
        sourceCompatibility = 1.6 
        targetCompatibility = 1.6 
       } 

       classpath { 
        plusConfigurations += [ project.configurations.compile ]   
        containers 'com.android.ide.eclipse.adt.ANDROID_FRAMEWORK', 'com.android.ide.eclipse.adt.LIBRARIES'  
       } 

       project { 
        name = appName + "-android" 
        natures 'com.android.ide.eclipse.adt.AndroidNature' 
        buildCommands.clear(); 
        buildCommand "com.android.ide.eclipse.adt.ResourceManagerBuilder" 
        buildCommand "com.android.ide.eclipse.adt.PreCompilerBuilder" 
        buildCommand "org.eclipse.jdt.core.javabuilder" 
        buildCommand "com.android.ide.eclipse.adt.ApkBuilder" 
       } 
      } 

      // sets up the Android Idea project, using the old Ant based build. 
      idea { 
       module { 
        sourceDirs += file("src"); 
        scopes = [ COMPILE: [plus:[project.configurations.compile]]]   

        iml { 
         withXml { 
          def node = it.asNode() 
          def builder = NodeBuilder.newInstance(); 
          builder.current = node; 
          builder.component(name: "FacetManager") { 
           facet(type: "android", name: "Android") { 
            configuration { 
             option(name: "UPDATE_PROPERTY_FILES", value:"true") 
            } 
           } 
          } 
         } 
        } 
       } 
      } 

proguard-project.txt:

   # To enable ProGuard in your project, edit project.properties 
      # to define the proguard.config property as described in that file. 
      # 
      # Add project specific ProGuard rules here. 
      # By default, the flags in this file are appended to flags specified 
      # in ${sdk.dir}/tools/proguard/proguard-android.txt 
      # You can edit the include path and order by changing the ProGuard 
      # include property in project.properties. 
      # 
      # For more details, see 
      # http://developer.android.com/guide/developing/tools/proguard.html 

      # Add any project specific keep options here: 

      # If your project uses WebView with JS, uncomment the following 
      # and specify the fully qualified class name to the JavaScript interface 
      # class: 
      #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 
      # public *; 
      #} 

      -verbose 

      -dontwarn android.support.** 
      -dontwarn com.badlogic.gdx.backends.android.AndroidFragmentApplication 
      -dontwarn com.badlogic.gdx.utils.GdxBuild 
      -dontwarn com.badlogic.gdx.physics.box2d.utils.Box2DBuild 
      -dontwarn com.badlogic.gdx.jnigen.BuildTarget* 
      -dontwarn com.badlogic.gdx.graphics.g2d.freetype.FreetypeBuild 

      -keep class com.badlogic.gdx.controllers.android.AndroidControllers 

      -keepclassmembers class com.badlogic.gdx.backends.android.AndroidInput* { 
       <init>(com.badlogic.gdx.Application, android.content.Context, java.lang.Object, com.badlogic.gdx.backends.android.AndroidApplicationConfiguration); 
      } 

      -keepclassmembers class com.badlogic.gdx.physics.box2d.World { 
       boolean contactFilter(long, long); 
       void beginContact(long); 
       void endContact(long); 
       void preSolve(long, long); 
       void postSolve(long, long); 
       boolean reportFixture(long); 
       float reportRayFixture(long, float, float, float, float, float); 
      } 

LogCat:

04-20 17:49:26.922 23638-23638/com.vabrang.zeros I/art: Late-enabling -Xcheck:jni 
     04-20 17:49:26.978 23638-23650/com.vabrang.zeros I/art: Debugger is no longer active 
     04-20 17:49:27.027 23638-23638/com.vabrang.zeros I/Adreno-EGL: <qeglDrvAPI_eglInitialize:410>: EGL 1.4 QUALCOMM build: AU_LINUX_ANDROID_LA.BF.1.1.1_RB1.05.00.02.042.016_msm8226_LA.BF.1.1.1_RB1__release_AU() 
                    OpenGL ES Shader Compiler Version: E031.25.03.00 
                    Build Date: 02/11/15 Wed 
                    Local Branch: 
                    Remote Branch: quic/LA.BF.1.1.1_rb1.10 
                    Local Patches: NONE 
                    Reconstruct Branch: AU_LINUX_ANDROID_LA.BF.1.1.1_RB1.05.00.02.042.016 + 62ca4eb + acd831d + 9f8b442 + e027a02 + cba30ba + 53c303a + a649d79 + 23e16f8 + 5e97da7 + cbd2a44 + 33d072a + 7aacf06 + 72b33e7 + 28f6f60 + b4c13d8 + NOTHING 
     04-20 17:49:27.118 23638-23638/com.vabrang.zeros I/AndroidInput: sensor listener setup 
     04-20 17:49:27.126 23638-23679/com.vabrang.zeros D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true 
     04-20 17:49:27.139 23638-23638/com.vabrang.zeros D/Atlas: Validating map... 
     04-20 17:49:27.173 23638-23679/com.vabrang.zeros I/Adreno-EGL: <qeglDrvAPI_eglInitialize:410>: EGL 1.4 QUALCOMM build: AU_LINUX_ANDROID_LA.BF.1.1.1_RB1.05.00.02.042.016_msm8226_LA.BF.1.1.1_RB1__release_AU() 
                    OpenGL ES Shader Compiler Version: E031.25.03.00 
                    Build Date: 02/11/15 Wed 
                    Local Branch: 
                    Remote Branch: quic/LA.BF.1.1.1_rb1.10 
                    Local Patches: NONE 
                    Reconstruct Branch: AU_LINUX_ANDROID_LA.BF.1.1.1_RB1.05.00.02.042.016 + 62ca4eb + acd831d + 9f8b442 + e027a02 + cba30ba + 53c303a + a649d79 + 23e16f8 + 5e97da7 + cbd2a44 + 33d072a + 7aacf06 + 72b33e7 + 28f6f60 + b4c13d8 + NOTHING 
     04-20 17:49:27.173 23638-23679/com.vabrang.zeros I/OpenGLRenderer: Initialized EGL, version 1.4 
     04-20 17:49:27.217 23638-23679/com.vabrang.zeros D/OpenGLRenderer: Enabling debug mode 0 
     04-20 17:49:27.241 23638-23666/com.vabrang.zeros W/GL2JNIView: creating OpenGL ES 2.0 context 
     04-20 17:49:27.246 23638-23666/com.vabrang.zeros W/GL2JNIView: Returning a GLES 2 context 
     04-20 17:49:27.253 23638-23666/com.vabrang.zeros I/GL2: all initialized 2 
     04-20 17:49:27.254 23638-23666/com.vabrang.zeros I/AndroidGraphics: OGL renderer: Adreno (TM) 305 
     04-20 17:49:27.254 23638-23666/com.vabrang.zeros I/AndroidGraphics: OGL vendor: Qualcomm 
     04-20 17:49:27.254 23638-23666/com.vabrang.zeros I/AndroidGraphics: OGL version: OpenGL ES 3.0 [email protected] [email protected] ([email protected]) 
     04-20 17:49:27.254 23638-23666/com.vabrang.zeros I/AndroidGraphics: OGL extensions: GL_AMD_compressed_ATC_texture GL_AMD_performance_monitor GL_AMD_program_binary_Z400 GL_EXT_debug_label GL_EXT_debug_marker GL_EXT_discard_framebuffer GL_EXT_robustness GL_EXT_texture_format_BGRA8888 GL_EXT_texture_type_2_10_10_10_REV GL_NV_fence GL_OES_compressed_ETC1_RGB8_texture GL_OES_depth_texture GL_OES_depth24 GL_OES_EGL_image GL_OES_EGL_sync GL_OES_EGL_image_external GL_OES_element_index_uint GL_OES_fbo_render_mipmap GL_OES_fragment_precision_high GL_OES_get_program_binary GL_OES_packed_depth_stencil GL_OES_depth_texture_cube_map GL_OES_rgb8_rgba8 GL_OES_standard_derivatives GL_OES_texture_3D GL_OES_texture_float GL_OES_texture_half_float GL_OES_texture_half_float_linear GL_OES_texture_npot GL_OES_vertex_half_float GL_OES_vertex_type_10_10_10_2 GL_OES_vertex_array_object GL_QCOM_alpha_test GL_QCOM_binning_control GL_QCOM_driver_control GL_QCOM_perfmon_global_mode GL_QCOM_extended_get GL_QCOM_extended_get2 GL_QCOM_tiled_rendering GL_QCOM_writeonly_rendering GL_EXT_sRGB GL_EXT_sRGB_write_control GL_EXT_texture_sRGB_decode GL_EXT_texture_filter_anisotropic GL_EXT_multisampled_render_to_texture GL_EXT_color_buffer_float GL_EXT_color_buffer_half_float GL_EXT_disjoint_timer_query 
     04-20 17:49:27.254 23638-23666/com.vabrang.zeros W/Adreno-EGL: <qeglDrvAPI_eglGetConfigAttrib:632>: EGL_BAD_ATTRIBUTE 
     04-20 17:49:27.254 23638-23666/com.vabrang.zeros W/Adreno-EGL: <qeglDrvAPI_eglGetConfigAttrib:632>: EGL_BAD_ATTRIBUTE 
     04-20 17:49:27.254 23638-23666/com.vabrang.zeros I/AndroidGraphics: framebuffer: (5, 6, 5, 0) 
     04-20 17:49:27.254 23638-23666/com.vabrang.zeros I/AndroidGraphics: depthbuffer: (16) 
     04-20 17:49:27.254 23638-23666/com.vabrang.zeros I/AndroidGraphics: stencilbuffer: (0) 
     04-20 17:49:27.254 23638-23666/com.vabrang.zeros I/AndroidGraphics: samples: (0) 
     04-20 17:49:27.254 23638-23666/com.vabrang.zeros I/AndroidGraphics: coverage sampling: (false) 
     04-20 17:49:27.260 23638-23666/com.vabrang.zeros I/AndroidGraphics: Managed meshes/app: { } 
     04-20 17:49:27.260 23638-23666/com.vabrang.zeros I/AndroidGraphics: Managed textures/app: { } 
     04-20 17:49:27.264 23638-23666/com.vabrang.zeros I/AndroidGraphics: Managed cubemap/app: { } 
     04-20 17:49:27.271 23638-23666/com.vabrang.zeros I/AndroidGraphics: Managed shaders/app: { } 
     04-20 17:49:27.271 23638-23666/com.vabrang.zeros I/AndroidGraphics: Managed buffers/app: { } 
     04-20 17:49:27.394 23638-23666/com.vabrang.zeros E/AndroidRuntime: FATAL EXCEPTION: GLThread 18522 
                     Process: com.vabrang.zeros, PID: 23638 
                     java.lang.NullPointerException: Attempt to invoke virtual method 'int java.util.ArrayList.size()' on a null object reference 
                      at com.vabrang.zeros.i.a(Unknown Source) 
                      at com.badlogic.gdx.backends.android.j.onSurfaceChanged(Unknown Source) 
                      at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1511) 
                      at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1239) 
     04-20 17:49:27.417 23638-23638/com.vabrang.zeros I/AndroidInput: sensor listener tear down 
     04-20 17:49:27.417 23638-23638/com.vabrang.zeros I/AndroidGraphics: Managed meshes/app: { } 
     04-20 17:49:27.417 23638-23638/com.vabrang.zeros I/AndroidGraphics: Managed textures/app: { } 
     04-20 17:49:27.417 23638-23638/com.vabrang.zeros I/AndroidGraphics: Managed cubemap/app: { } 
     04-20 17:49:27.417 23638-23638/com.vabrang.zeros I/AndroidGraphics: Managed shaders/app: { } 
     04-20 17:49:27.417 23638-23638/com.vabrang.zeros I/AndroidGraphics: Managed buffers/app: { } 
     04-20 17:49:29.192 23638-23666/com.vabrang.zeros I/Process: Sending signal. PID: 23638 SIG: 9 
+0

Ihr Logcat teilt Ihnen mit, dass Ihre Arraylist ein Nullwert ist. – buczek

+0

Ich benutze keine Arraylist, das ist für Proguard Ich denke –

Antwort

1

Um den Fehler zu finden, ist es möglich, entstapelte Stacktrace zu bekommen. Im Android SDK gibt es das Skript retrace.sh (oder eine ähnliche Windows-Version), das den Stacktrace entblößt. Um es auszuführen, benötigen Sie die Datei stacktrace und mapping.txt, die während des Builds von ProGuard generiert wird.

Aber die Stacktrace kann mehrdeutig sein - es kann Ihnen mehrere Methoden für jedes Stack-Trace-Element zeigen. dieses Problem zu lösen und auch von „Unknown Source“, fügen Sie diese Regel auf Ihre ProGuard Config loszuwerden:

-keepattributes SourceFile,LineNumberTable 

Damit werden Sie die Quelldateinamen und die Zeilennummer auch in dem verschleierten stacktrace sehen . Auch Ihre entschleierten Stacktraces werden eindeutig sein.

Edit:

List of available attributes mit ihrer Beschreibung.

+0

Ich löse das Problem, einige Klassen zu halten und -keepattributes Signatur zu verwenden, aber ich verstehe nicht, was diese letzte Zeile tut? –

+0

Welche letzte Zeile? – Tomik

+0

Dies: -bezeichnet die Signatur. Entschuldigung für mein Englisch –