Android N – Ne peut pas fonctionner sur une API inférieure, bien que minSDK soit réglé sur 14

J'essaie d'exécuter l'APK sur le périphérique API 22 après avoir mis à jour compileSdkVersion vers N mais impossible de le faire.

 compileSdkVersion 'android-N' buildToolsVersion "24.0.0 rc1" defaultConfig { minSdkVersion 14 targetSdkVersion 'N' } 

Entrez la description de l'image ici

  • DialogFragments avec périphériques api niveau <11
  • Vue de défilement de chevauchement avec AppBarLayout
  • Traduire une vue d'une mise en page vers une autre avec Translate Animation
  • Erreur d'emballage Kivy avec une bibliothèque numpy pour Android utilisant buildozer
  • Traiter des espaces dans logcat
  • SpannableStringBuilder pour créer une chaîne avec plusieurs polices / tailles de texte, etc. Exemple?
  • Persian / arabic search in sqlite android donne un mauvais résultat
  • Comment désactiver ou activer le balayage de votre navigateur dans Android
  • Qu'est-ce que JNI Graphics ou comment l'utiliser?
  • Comment puis-je modifier les actions de la barre d'action de façon dynamique?
  • Bouclez tous les enfants de GroupView?
  • Android, DrawerLayout + Fragments + CollapsingToolbarLayout
  • 3 Solutions collect form web for “Android N – Ne peut pas fonctionner sur une API inférieure, bien que minSDK soit réglé sur 14”

    Out of the box, les outils de construction sont configurés pour bloquer l'exécution des applications N Developer Preview sur des périphériques plus anciens. On peut supposer que c'est un moyen négligent pour Google d'essayer d'empêcher les gens d'embarquer des choses construites à partir de l'aperçu. Cette approche a également été utilisée dans les deux derniers aperçus de développeurs. Donc, Google ne veut pas que vous testez votre application N Developer Preview sur votre appareil Android 5.0 (API Level 22) pour voir si vous manipulez correctement la compatibilité ascendante.

    ¯ \ _ (ツ) _ / ¯

    Heureusement, vous pouvez pirater une solution:

     android { compileSdkVersion 'android-N' buildToolsVersion "24.0.0 rc1" defaultConfig { minSdkVersion 15 targetSdkVersion 'N' } // based on http://stackoverflow.com/a/27372806/115145 applicationVariants.all { variant -> variant.outputs.each { output -> output.processManifest.doLast { def manifestOutFile = output.processManifest.manifestOutputFile def xml = new XmlParser().parse(manifestOutFile) def usesSdk = xml.'uses-sdk' usesSdk.replaceNode{ 'uses-sdk'('android:minSdkVersion': '15', 'android:targetSdkVersion': '15') } def fw=new FileWriter(manifestOutFile.toString()) new XmlNodePrinter(new PrintWriter(fw)).print(xml) } } } } 

    Ce que les outils demandent est targetSdkVersion 'N' , et c'est ce qui brise votre capacité à exécuter l'application sur des périphériques plus anciens. Ainsi, ce code de Groovy permet aux outils de construction de commencer avec targetSdkVersion 'N' , puis échange dans une autre valeur targetSdkVersion dans le manifeste généré avant l'emballage. Dans ce cas, je minSdkVersion le minSdkVersion et targetSdkVersion à 15, mais vous pouvez vous substituer à vos propres valeurs. En outre, vous devrez reconstruire ou nettoyer votre projet pour que la modification prenne effet.

    Sur le côté positif, l'application résultante peut être installée et exécutée sur un ancien appareil Android (mais peut-être uniquement grâce à une compilation de ligne de commande, je pense que Android Studio n'a pas aimé cette technique).

    Sur le côté négatif, votre targetSdkVersion ne sera en réalité pas N , ce qui peut avoir un impact sur certains comportements sur les périphériques N Developer Preview. Vous voudrez peut-être configurer un type de construction particulier que vous utilisez pour les tests de compatibilité ascendante et ne fait que mon truc hack-the-manifeste sur ce type de construction. Ensuite, vous pouvez tester les deux en utilisant une configuration officielle N Developer Preview et effectuer une certaine mesure de compatibilité ascendante dans une seule version.

    J'ai trouvé une solution qui fonctionne mais avant cela un peu d'histoire. Ce que j'ai fait était d'essayer d'avoir différentes variantes de mon application et chaque variante aurait son propre compileSdkVersion

    Ce sont des extraits de mon build.gradle

    Première tentative (compileSdkVersion est une variante spécifique) : Laissez-vous installer l'application sur le niveau API> = ANDROID-N uniquement

      //compileSdkVersion 'android-N' buildToolsVersion '24.0.0 rc1' productFlavors { dev { compileSdkVersion 23 targetSdkVersion 23 } experimental { compileSdkVersion 'android-N' minSdkVersion 'N' targetSdkVersion 'N' } } 

    Deuxième tentative (compileSdkVersion encore variante spécifique mais j'ai supprimé experimental variante experimental ) : laissez-vous installer l'application sur le niveau API <ANDROID-N uniquement

      //compileSdkVersion 'android-N' buildToolsVersion '24.0.0 rc1' productFlavors { dev { compileSdkVersion 23 targetSdkVersion 23 } /* experimental { compileSdkVersion 'android-N' minSdkVersion 'N' targetSdkVersion 'N' } */ } 

    Troisième tentative (compileSdkVersion encore variante spécifique mais experimental est définie avant dev )

     //compileSdkVersion 'android-N' buildToolsVersion '24.0.0 rc1' productFlavors { experimental { compileSdkVersion 'android-N' minSdkVersion 'N' targetSdkVersion 'N' } dev { compileSdkVersion 23 targetSdkVersion 23 } } 

    À ma grande surprise, celui-ci a fonctionné! Je ne sais pas pourquoi, mais il le fait. Il vous suffit de définir votre variante Android-N uniquement avant toute autre variante , cliquez sur Créer des variantes dans Android Studio et sélectionnez celui que vous souhaitez compiler.

    Je vais déposer un problème sur le tracker des incidents Android-N et mettre à jour cette réponse lorsque j'aurai plus d'informations.

    Vous ne pouvez pas le faire sans pirater la solution.
    C'est une limitation de la N-Preview et vous devez utiliser uniquement cette configuration:

     android { compileSdkVersion 'android-N' buildToolsVersion 24.0.0 rc1 ... defaultConfig { minSdkVersion 'N' targetSdkVersion 'N' ... } ... } 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.