19
votes

Flutter: la compilation Gradle n'a pas réussi à produire un fichier .apk. Il est probable que ce fichier ait été généré sous <app_root> \ build, mais l'outil n'a pas pu le trouver

J'essaye de tester une application. Je reçois un problème étrange avec ce problème car l'application ne parvient pas à déboguer / exécuter. La version du SDK est 28 tandis que le reste est ci-dessous:

Android Studio -v 3.5.3 
Gradle -v 3.4.2 
Gradle Wrapper -v 5.1.1

entrez la description de l'image ici

La génération Gradle n'a pas réussi à produire un fichier .apk. Il est probable que ce fichier ait été généré sous C: \ Development \\ build, mais l'outil n'a pas pu le trouver.

Existe-t-il un moyen de transmettre ce problème ou une configuration qui peut me permettre de s'exécuter en fournissant ou en donnant le chemin de sortie à Gradle? Le .apk semble généré lorsque l'erreur se déclare.

entrez la description de l'image ici

MISE À JOUR:

Flutter 1.13.9-pre.79 • channel master • https://github.com/flutter/flutter.git
Framework • revision 9eb9ea0ffa (6 hours ago) • 2020-01-13 21:30:42 -0800
Engine • revision 0235a50843
Tools • Dart 2.8.0 (build 2.8.0-dev.0.0 28c335d5a2)


5 commentaires

Quelle version d'Android Studio, Gradle Plugin pour Android et Gradle Wrapper utilisez-vous? Si je me souviens bien, cette erreur ne s'est produite que sur une ancienne version de l'un d'entre eux. Vous devez être au moins sous Android Studio 3.5.3, en utilisant Gradle Plugin version 3.5.3 et Gradle Wrapper version 5.4.1


@Ovidiu merci d'abord. Maintenant, la version AS est 3.5.3 (en effet), la version GP était 3.4.2 et la version GW était 5.1.1, j'ai mis à jour, mais le problème est toujours présent, j'ai également essayé une gradle clean build


Ignorez mon commentaire précédent, ce n'est pas ce qui cause l'erreur. J'ai réussi à le répliquer en exécutant 'flutter run' dans un projet qui a configuré des saveurs. Selon votre capture d'écran, vous avez une saveur nommée 'debug', vous voudrez donc exécuter 'flutter run --flavor = debug'


désolé @Ovidiu, je ne suis pas d'accord, j'ai parcouru un formulaire dans github à propos de l'argument de la saveur et de la possibilité que cela cause le problème, mais je peux vous assurer que non. D'après ce cogitas.net/creating-flavors-of-a-flutter-app , j'ai vérifié mon /android/app/build.gradle et j'en ai trouvé non. Peut-être y a-t-il un autre moyen de vérifier s'il y a des saveurs et je ne sais pas ... comment avez-vous déterminé le fait que j'ai une saveur de debug ?


il semble que vous ayez des variantes de nom de fichier apk , et certaines solutions de contournement sur github.com/flutter/flutter/issues/44796 montrent que vous devez vérifier le nom des fichiers apk.


10 Réponses :


20
votes

dans mon cas, j'ai une application multi-saveurs comme celle-ci:

flutter run --flavor staging -t lib/main_staging.dart

Donc, si vous voulez exécuter l'application, vous devez écrire le nom de la saveur, puis le nom de la classe qui contient la fonction main ()

 android {

    ...

    buildTypes {
        release {
            // TODO: Add your own signing config for the release build.
            // Signing with the debug keys for now, so `flutter run --release` works.
            signingConfig signingConfigs.debug
        }
    }

    flavorDimensions "flavor-type"

    productFlavors{
        development{
            dimension "flavor-type"
        }
        staging{
            dimension "flavor-type"
        }
        production{
            dimension "flavor-type"
        }
    }
}

et j'ai résolu mon erreur et construit le .apk


0 commentaires

5
votes

Ajoutez le code ci-dessous dans le fichier build.gradle de l'étiquette d'application après buildTypes:

flavorDimensions "flavor"

productFlavors {
    staging {
        dimension "flavor"
    }
}

Et modifiez vos configurations d'édition comme l'image ci-dessous: entrez la description de l'image ici


0 commentaires

0
votes

Dans mon cas, le problème était qu'un SDK spécifique au module n'était pas défini pour mon module d'API Android. La solution que j'ai trouvée est:

Open Android Studio->File->Project Structure->Project SDK box->set Android API


0 commentaires

1
votes

Parfois, ce problème se produit lorsque le code suivant est mentionné dans le fichier build.gradle. Commentez ce code et essayez d'exécuter la compilation et cela a réussi pour moi. Si vous souhaitez créer plusieurs fichiers apk, veuillez les utiliser tout en prenant la version de version et supprimez-la pour les versions de débogage. À partir de la capture d'écran que vous avez partagée, je peux voir plusieurs apk générés pour vous et commenter des apks fractionnés vous aidera à résoudre ce problème.

splits {
    abi {
        enable true
        reset()
        include 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
        universalApk true
    }
}


0 commentaires

1
votes

Ajout du nom de la saveur dans le nom de la Build name partir des Edit Configurations et cela a fonctionné! entrez la description de l'image ici


1 commentaires

où se trouve cette Edit Configurations dans vscode ?



0
votes

Je ne sais pas si cela va vous aider ou non mais j'ai résolu mon problème en suivant la solution-1.

Solution-1

Remplacez votre fichier build.gradle au niveau du projet par le suivant, remplacez les versions et le chemin de classe par les vôtres.

   flutter create --org your.organization <your appname>

La partie la plus importante: assurez-vous que vous utilisez deux sous-projets

 rootProject.buildDir = '../build'
 subprojects {
     project.buildDir = "${rootProject.buildDir}/${project.name}"
 }
 subprojects {
     project.evaluationDependsOn(':app')
 }

La source

Solution-2

  • Essayez de reconstruire vos fichiers Android renommer le dossier Android en
    quelque chose d'autre pour le désactiver comme "android-old" ou autre.

  • Ensuite, allez dans le dossier parent de votre projet, et exécutez la commande ci-dessous

    buildscript {
        ext.kotlin_version = '1.3.50'
        repositories {
            google()
            jcenter()
        }
    
        dependencies {
            classpath 'com.android.tools.build:gradle:3.5.0'
            classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
            classpath 'com.google.gms:google-services:4.3.3' 
        }
    }
    
    allprojects {
        repositories {
            google()
            jcenter()
        }
    }
    
    rootProject.buildDir = '../build'
    subprojects {
        project.buildDir = "${rootProject.buildDir}/${project.name}"
    }
    subprojects {
        project.evaluationDependsOn(':app')
    }
    
    task clean(type: Delete) {
        delete rootProject.buildDir
    }
    

Cela reconstruira tous les fichiers manquants. Cela a fonctionné pour moi


1 commentaires

pourquoi flutter créer ??



3
votes

Ok, je trouve que c'est args dans launch.json si vous utilisez vscode

entrez la description de l'image ici


0 commentaires

0
votes

Après une journée de lutte pour résoudre ce problème, j'ai trouvé par où commencer pour vraiment le résoudre. Avant d'insérer un code aléatoire, nous devons rechercher quel est le nom exact de l'apk qu'il génère.

Flutter Build Folder -> app -> sorties -> apk

ici, vous verrez exactement comment s'appelle le nom apk s'il est en mode version ou débogage.

Dans ce cas, si le nom a app-staging.apk ou un autre nom étrange, il y a quelque chose dans votre build gradle qui ne fonctionne pas bien. Dans mon cas, c'était parce que j'avais une saveur qui n'était pas nécessaire avec la mise en scène du nom.

Si ce n'est pas le cas dans votre cas, ce sera sûrement toujours un paramètre de gradation à vérifier. Essayez de passer du mode version au mode débogage ou à l'opposé de "launch.json" , dans ce cas vous pourrez voir si un côté et l'autre non et comprendre les différences de configuration.


0 commentaires

1
votes

J'ajoute la section suivante au fichier app / build / gradle , car je n'ai besoin que d' arm64-v8a versio apk ,

splits {
    abi {
        enable true
        reset()
        include 'arm64-v8a'
        universalApk true
    }
}

puis l'erreur s'est produite, donc ma solution de contournement pour résoudre ce problème simplement pour créer un lien symbolique nommé app-debug.apk vers le nouveau app-arm64-v8a-debug.apk nommé dans le dossier build / app / output / flutter-apk / it travaux!


0 commentaires

0
votes

J'ai résolu mon problème en désactivant le partage

splits {

    abi {

        enable false

    }
}


0 commentaires