Mise à niveau d'AndroidStudio Gradle Pit

J'ai récemment mis à jour un ancien projet. La version originale de Gradle est 4.6 et doit être mise à niveau vers 7.6. Le JDK est mis à niveau de 8 à 17. Il y a de nombreux pièges en cours de route. Enregistrons-les un par un.

1. L'entrepôt Maven doit être mis à niveau vers https

Vous rencontrerez cette erreur

L’utilisation de protocoles non sécurisés avec des référentiels, sans adhésion explicite, n’est pas prise en charge. Basculez le référentiel Maven 'maven(http://mapmo.baidu.com/artifactory/libs-release)' pour rediriger vers un protocole sécurisé (comme HTTPS) ou autoriser les protocoles non sécurisés. Voir https://docs.gradle.org/7.6.1/dsl/org.gradle.api.artifacts.repositories.UrlArtifactRepository.html#org.gradle.api.artifacts.repositories.UrlArtifactRepository:allowInsecureProtocol pour plus de détails

Si vous ne pouvez pas effectuer la mise à niveau vers https, il existe un moyen de le rendre compatible. Remplacez-le par la méthode suivante.

maven {
            url "http://xxxxxx.com/artifactory/libs-release"
            allowInsecureProtocol = true
            credentials {
                username ""
                password ""
            }
        }

2. Lors de la mise à niveau de la syntaxe Gradle, vous rencontrerez l'erreur suivante

Impossible de trouver la méthode fournie() pour les arguments [com.android.support:appcompat-v7:26.+] sur un objet de type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler

Impossible de trouver la méthode compile() pour les arguments [répertoire 'libs'] sur l'objet de type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler

C'est facile de changer

fourni ---> compileOnly

compiler ---> implémentation

3. Proguard est introuvable

Impossible d'obtenir la propriété inconnue « proguard » pour le projet « :XXXXX » de type org.gradle.api.Project.

Cela devrait être dû au fait que la version supérieure de Gradle est configurée avec R8 par défaut. Vous devez introduire Proguard vous-même. GPT a également donné une réponse spécieuse. Ce problème m'a causé des douleurs pendant longtemps avant de le résoudre. La méthode est la suivante :

Introduisez proguard dans le fichier build.gradle de votre projet

dependencies {
        classpath 'com.android.tools.build:gradle:7.4.2'
        classpath 'com.guardsquare:proguard-gradle:7.1.0'
    }

4. Le fichier BuildConfig est introuvable

Pour les anciennes versions des fichiers Gradle, vous pouvez configurer une option de publication dans buildTypes, et un fichier de débogage BuildConfig sera également généré, qui peut être référencé dans le projet. Après la mise à niveau, si l'option de débogage n'est pas configurée dans buildTypes, le fichier de débogage BuildConfig ne sera pas généré, ce qui entraînera une erreur signalée lorsque le projet n'est pas référencé.

Modifier le fichier précédent

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

Après modification

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

Ajoutez simplement un débogage

5. Certains attributs du fichier BuildConfig sont introuvables.

C'est également très pénible. Dans mon fichier BuildConfig, il y a un attribut VERSION_NAME qui est introuvable. Il n'est pas trouvé dans le fichier BuildConfig généré. Je n'ai pas non plus trouvé quelque chose de similaire dans le fichier build.gradle.

buildConfigField "Chaîne", "NOM_VERSION", "11.2"

Ce genre de déclaration, je suis donc très curieux de savoir comment le code précédent a été compilé.

Enfin, il a été découvert que l'ancienne version de gradle modifierait automatiquement les attributs versionCode et versionName dans defaultConfig en attributs VERSION_CODE et VERSION_NAME et les ajouterait au fichier BuildConfig, tandis que la nouvelle version du fichier gradle ne s'en soucierait pas.

 Alors ajoutez-le vous-même

defaultConfig {
        minSdkVersion rootProject.ext.minSdkVersion
        targetSdkVersion rootProject.ext.targetSdkVersion
        versionCode 1
        versionName rootProject.ext.MAPCOM_VERSION
        buildConfigField "String", "VERSION_NAME", "\"${rootProject.ext.MAPCOM_VERSION}\""
        buildConfigField "String", "MECP_VERSION", "\"${rootProject.ext.MECP_VERSION}\""
        buildConfigField "String", "MAPCOM_VERSION", "\"${rootProject.ext.MAPCOM_VERSION}\""
        buildConfigField "String", "ENGINE_VERSION", "\"${rootProject.ext.ENGINE_VERSION}\""
        buildConfigField "String", "MANUFACTURER", "\"${rootProject.ext.MANUFACTURER}\""

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    }

6. class.jar est introuvable

Dans mon projet, je dois compiler certains projets dans des bocaux. J'ai écrit moi-même l'implémentation de la fonction gradle, mais j'ai rencontré cette erreur.

Impossible d'étendre le ZIP '/home/GitDownload/mappreset/mapcom/android/ComBase/build/intermediates/packaged-classes/release/classes.jar' car il n'existe pas

Le code original est écrit comme ceci

def zipFile = file('build/intermediates/packaged-classes/release/classes.jar')

Ou le chemin de class.jar généré par la nouvelle version de gradle a changé, remplacez-le simplement par celui ci-dessous

def zipFile = fichier('build/intermediates/aar_main_jar/release/classes.jar')

7. Problème de stratégie en double

L'erreur est signalée comme suit

Entry assets/CircleDashTexture.png est un doublon mais aucune stratégie de gestion des doublons n'a été définie. Veuillez vous référer à https://docs.gradle.org/7.6.1/dsl/org.gradle.api.tasks.Copy.html#org.gradle.api.tasks.Copy:duplicatesStrategy pour plus de détails.

J'ai signalé une erreur dans la fonction de compilation du package jar. Il n'est pas difficile de le modifier. Ajoutez simplement la stratégie de gestion des conflits dans la première phrase, comme suit

task makeJar(type:Jar){
    duplicatesStrategy = DuplicatesStrategy.EXCLUDE
    archiveName = SDK_BASENAME + "_" + SDK_VERSION + '.jar'
    // 复制资源文件
    from fileTree(dir: 'src/main', includes: ['assets/**'])
    ***********
}

8. Erreur de compilation du fichier AIDL

Si vous rencontrez cette erreur, org.gradle.api.tasks.TaskExecutionException : l'exécution a échoué pour la tâche ':app:compileDebugAidl'

En même temps il y a

* L'exception est : 
[2023-08-24 11:28:29] java.lang.OutOfMemoryError : métaespace

Ce problème est généralement dû au fait que les métadonnées utilisées lors de la compilation dépassent Metaspacela limite. Il peut être résolu en l'ajoutant au fichier gradle.properties.

org.gradle.jvmargs=-XX:MaxMetaspaceSize=512m

La Metaspacetaille augmentée est de 512 Mo. Je l'ai compilé avec 512 Mo. Bien entendu, vous pouvez également ajuster cette valeur de manière appropriée en fonction des besoins réels du projet.

Ce qui précède est un voyage à travers les fosses, j'espère qu'il sera utile à tout le monde !

Je suppose que tu aimes

Origine blog.csdn.net/guo_zhen_qian/article/details/132347483
conseillé
Classement