Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem mit Android-Programmierung und OpenGL

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Problem mit Android-Programmierung und OpenGL

    Hi,

    ich versuche eine simple Beispiel-App mit OpenGL in Android Studio zum Laufen zu bekommen. Den nötigen Programmcode habe ich von der offiziellen Android Studio Seite:

    (Die App zeichnet ein Dreick und lässt dieses rotieren)
    Spoiler: 
    https://developer.android.com/training/graphics/opengl/index.html

    In einem Emulator mit Android 4.4 und auf einem Handy mit Android 6.0 funktioniert die App ohne Probleme. Allerdings funktioniert die App auf meinem Tablet mit Android 4.4 nicht - Die Grafik wird nicht angezeigt --> Black Screen.

    Ich verwende wie in dem obigen Tutorial OpenGL 2.0 was ab Android 2.2 und höher unterstützt wird.
    OpenGL ES 2.0 - This API specification is supported by Android 2.2 (API level 8) and higher.
    Ich habe wo gelesen, dass Android veraltete oder inkompatible Methoden nicht ausführt, um ein crashen der App zu verhindern. Allerdings sollte mein Tablet aufgrund von Android 4.4 ja nicht zu alt sein?

    Mein Gradle-File sieht folgendermaßen aus:
    Spoiler: 
    apply plugin: 'com.android.application'
    android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"

    defaultConfig {
    applicationId "com.example.pati.opengl_test"
    minSdkVersion 19
    targetSdkVersion 19
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunne r"

    externalNativeBuild {
    cmake {
    cppFlags "-frtti -fexceptions" }
    }
    }

    buildTypes {
    release {
    minifyEnabled false
    proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
    }

    externalNativeBuild {
    cmake {
    path "CMakeLists.txt" }
    }
    }

    dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espre sso:espresso-core:2.2.2', {
    exclude group: 'com.android.support', module: 'support-annotations' })
    compile 'com.android.support:appcompat-v7:25.1.1'
    testCompile 'junit:junit:4.12'
    }

    Die CompileSDKVersion wird von Android Studio automatisch auf 25 gesetzt. Android 4.4 würde Version 19 entsprechen (minSdkVersion). Allerdings kann ich die CompileVersion nicht auf 19 runterdrehen, da sonst einige Standard-Widgets nicht mehr funktionieren.

    Frage:
    Wieso wird mir nur ein schwarzer Bildschirm auf einem Tablet mit Android 4.4 angezeigt, während es in einem Emulator mit Android 4.4 und auf einem Handy mit Android 6.0 funktioniert?

    Vielleicht kennt sich da ja wer aus und kann mir einen Tipp geben.

    #2
    https://developer.android.com/guide/topics/graphics/opengl.html

    Vielleicht hängt es damit zusammen:

    OpenGL ES 1.0 and 1.1 - This API specification is supported by Android 1.0 and higher.
    OpenGL ES 2.0 - This API specification is supported by Android 2.2 (API level 8) and higher.
    OpenGL ES 3.0 - This API specification is supported by Android 4.3 (API level 18) and higher.
    OpenGL ES 3.1 - This API specification is supported by Android 5.0 (API level 21) and higher.

    Caution: Support of the OpenGL ES 3.0 API on a device requires an implementation of this graphics pipeline provided by the device manufacturer. A device running Android 4.3 or higher may not support the OpenGL ES 3.0 API. For information on checking what version of OpenGL ES is supported at run time, see Checking OpenGL ES Version.
    Ich glaube nicht, dass deine gradle file dafür Schuld sein wird.
    Die targetSdkVersion lege ich immer gleich der compileSdkVersion, gibt eig. nur an mit welcher höchsten API du es getestet hast. Würde sie auch auf 25 setzen.

    Außerdem kannst du auch den testCompile kram rauswerfen, wenn du möchtest:

    Spoiler: 
    apply plugin: 'com.android.application'
    android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"

    defaultConfig {
    applicationId "com.example.pati.opengl_test"
    minSdkVersion 19
    targetSdkVersion 25
    versionCode 1
    versionName "1.0"

    externalNativeBuild {
    cmake {
    cppFlags "-frtti -fexceptions" }
    }
    }

    buildTypes {
    release {
    minifyEnabled false
    proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
    }

    externalNativeBuild {
    cmake {
    path "CMakeLists.txt" }
    }
    }

    dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:25.1.1'
    }


    Vllt. bekommst du ja im Android Monitor/logcat entsprechende info/debug messages für das Problem?

    Kommentar


      #3
      Du kannst prüfen welche OpenGL ES Version dein Tablet unterstützt.
      In der Beispielapp setzt du zwar
      aber uses-feature wird nicht vom Android System überprüft, sondern betrifft nur die Installation über den Play Store (oder andere Paketmanager) die dann entsprechende Einträge rausfiltern.

      Theoretisch sollte es aber eigentlich daran nicht scheitern, die Android 4.4 Compatibility Definition sagt:
      Device implementations MUST support both OpenGL ES 1.0 and 2.0, as embodied and detailed in the Android SDK documentations. Device implementations SHOULD support OpenGL ES 3.0 on devices capable of supporting OpenGL ES 3.0.
      Zumindest solange dein Tablet Google zertifiziert ist und du kein 3rd Party ROM drauf hast müsste es also eigentlich gehen.

      Kommentar


        #4
        Zitat von Lexycon
        Außerdem kannst du auch den testCompile kram rauswerfen, wenn du möchtest
        Gute Idee eine App zu schreiben ohne Tests dafür zu haben oder überhaupt Unit-Tests zu schreiben. Will mir nicht vorstellen was für Code dabei rauskommt...

        Kommentar


          #5
          Zitat von tob1
          Zitat von Lexycon
          Außerdem kannst du auch den testCompile kram rauswerfen, wenn du möchtest
          Gute Idee eine App zu schreiben ohne Tests dafür zu haben oder überhaupt Unit-Tests zu schreiben. Will mir nicht vorstellen was für Code dabei rauskommt...
          Überhaupt gelesen worum es geht ?

          Kommentar


            #6
            Zitat von Auti
            Zitat von tob1
            Zitat von Lexycon
            Außerdem kannst du auch den testCompile kram rauswerfen, wenn du möchtest
            Gute Idee eine App zu schreiben ohne Tests dafür zu haben oder überhaupt Unit-Tests zu schreiben. Will mir nicht vorstellen was für Code dabei rauskommt...
            Überhaupt gelesen worum es geht ?
            ja trotzdem ist das ein unnötiger Tipp. Die Dependency zu JUnit hat absolut nichts mit dem Problem zu tun und später wundert sich der TE dann warum AndroidStudio die @Test Annotation nicht findet ^^

            Kommentar


              #7
              Hi,

              danke für die Antworten. Ich habe mal überprüft welche Version mein Tablet unterstützt, scheinbar ist es OpenGL 2.0.
              Ich habe mir nochmal die logcat messages angeschaut und zumindest die Fehlermeldung gefunden. Habe die vorher immer übersehen :/

              E/dalvikvm: Could not find class 'android.graphics.drawable.RippleDrawable', referenced from method android.support.v7.widget.AppCompatImageHelper.has OverlappingRendering
              W/dalvikvm: VFY: unable to resolve instanceof 140 (Landroid/graphics/drawable/RippleDrawable;) in Landroid/support/v7/widget/AppCompatImageHelper;

              RippleDraw wurde mit der Sdk-Version 21 (Lollipop) eingeführt. Scheinbar haben da ziemlich viele Leute Probleme mit pre-Lollipop Versionen. Eine Lösung habe ich nicht wirklich gefunden. Ich werde OpenGL erstmal zur Seite legen...

              Kommentar

              Lädt...
              X