[Android] [Componentization] Aar dans le sous-module est introuvable

 

Description du problème

Une fois le projet créé, le premier module: app sera généré.
module: l'application dépend du module: baseapp
module: baseapp dépend du module: c

S'il n'y a pas de dépendance spéciale, la compilation ne posera aucun problème pour le moment.

module: baseapp dépend de baseapp / libs / android_gif_drawable.aar. Selon le traitement habituel, il doit être ajouté dans le fichier build.gradle de baseapp

//【步骤1】
dependencies { 
    compile(name: ‘android_gif_drawable’, ext: ‘aar’) 
} 

//【步骤2】
repositories { 
    flatDir { 
        dirs ‘libs’ 
    } 
} 

Compilez pour le moment, une erreur est détectée, invite: Android_gif_drawable.aar est trouvé dans la build.gradle de l'application

Error:A problem occurred configuring project ':app'.
> Could not resolve all dependencies for configuration ':app:_prodDebugApkCopy'.
   > Could not find :android_gif_drawable:.
     Required by:
         project :app > project :baseapp

causes du problème

Raison 1: Qu'est-ce qui est configuré dans flatDir.dirs?

//【步骤1】
dependencies { 
    compile(name: ‘android_gif_drawable’, ext: ‘aar’) 
} 

Au baseapp/build.gradlemilieu, nous déclarons comme format 'aar' dépendant 'android_gif_drawable', cette dépendance est au même niveau et module de bibliothèque

Cependant, lorsque nous serons similaires Module de bibliothèque de référence de compile project(':jni')cette façon, emprunter la project()fonction pour informer le chemin de gradle correspondant à la position dépendante

Alors, comment dire à Gradle le chemin de ressource spécifique pour la dépendance de la méthode aar? C'est l'étape 2

//【步骤2】
repositories { 
    flatDir { 
        dirs ‘libs’ 
    } 
} 

Ceci est un chemin relatif. Notez que nous sommes configurés dans baseapp/build.gradle, alors baseapp sait quand gradle compile "oh ~ 'android_gif_drawable' est un aar, et son chemin est dans libs dans mon répertoire actuel, qui est baseapp / libs"

Cela explique également la raison pour laquelle baseapp peut être compilé indépendamment lorsqu'il est emballé sous forme d'aar

Raison 2: l'application doit trouver toutes les dépendances dépendantes

aar lui-même est une sorte de module de bibliothèque, directement utilisé dans le plugin apply: 'com.android.application'

En d'autres termes, l'application doit connaître l'emplacement de toutes les dépendances de baseapp, s'il s'agit d'une dépendance distante, déroulez le code de la dépendance distante, s'il s'agit d'une dépendance locale, recherchez l'emplacement de la dépendance locale

Par conséquent, il existe une telle logique:

Application trouvée lors de l'intégration de baseapp,
"Oh ~ android_gif_drawable est un aar, où est-il?
Le chemin pointé par flatDir.dirs se
trouve également dans les libs de mon répertoire actuel, qui est app / libs"

Ensuite, j'ai découvert "Hein, pourquoi pas toi?" Et j'ai signalé une erreur

Solutions

Chemin 1: Chemin exhaustif sous l'ensemble du projet

Ajoutez les références correspondantes aux référentiels dans build.gradle sous Projet comme suit:

allprojects {
    repositories {
        jcenter()

        flatDir {
            // 由于Library module中引用了 gif 库的 aar,在多 module 的情况下,
            // 其他的module编译会报错,所以需要在所有工程的repositories
            // 下把Library module中的libs目录添加到依赖关系中
            dirs 'libs'
            dirs project(':baseapp').file('libs') //借助 project()函数的位置查找
            //dirs '../baseapp/libs'  // 直接指明路径,注意前边的../, 要先回到根目录去查找别的module
        }
    }
}

Chemin 2: Ajouter tous les modules / build.gradle qui dépendent de Module baseapp

repositories {
    flatDir {
        dirs 'xxx/libs' // Module A的libs的目录地址
    }
}

Ajoutez tous les modules à l'adresse relative du répertoire libs du module A.

Je suppose que tu aimes

Origine blog.csdn.net/xfb1989/article/details/110956963
conseillé
Classement