本地项目导入AAR

        疫情期间居家办公,将公司项目代码拷贝到家里的电脑,但是公司的项目中引用了本地仓库中的通用模块,拷贝出的项目代码需要引用这些通用模块,就需要将通用模块打包成aar,再进行导入。下文是我在导入aar期间遇到的一些问题,在此记录。

        关于通用模块如何打包成aar,在此暂不做说明,因为这次我使用的aar包是公司本地仓库自动打包好的,可以直接拿来用。

1.更改引用的远程仓库

        遇到的第一个问题,就是项目中引用的代码仓库是公司本地仓库。在项目的build.gradle文件中

buildscript {
    repositories {
        maven { url "http://192.168.0.8:8081/artifactory/xxx/" }
    }
    dependencies {
        ...
    }
}
allprojects {
    repositories {
        maven { url "http://192.168.0.8:8081/artifactory/xxx/" }
    }
}

        这是公司内部服务器,在家里访问不到。这里将仓库替换为阿里的远程库,如果知道具体的需要引用哪些远程库,可以直接写上,像我不知道的就多写几个

buildscript {
    repositories {
        maven { url 'https://maven.aliyun.com/repository/google' }
        maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
        maven { url 'https://maven.aliyun.com/repository/public' }
        maven { url 'https://maven.aliyun.com/repository/jcenter' }
    }
    dependencies {
        ...
    }
}
allprojects {
    repositories {
        maven { url 'https://maven.aliyun.com/repository/google' }
        maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
        maven { url 'https://maven.aliyun.com/repository/public' }
        maven { url 'https://maven.aliyun.com/repository/jcenter' }
    }
}

2.添加AAR依赖

        有两种添加aar依赖的方式,首先不管哪种方式,都需要将要引用的jar和aar拷贝到项目的libs⽬录下,app模块需要引用就放到app的libs文件夹下,module需要就放到module的libs文件夹下。

        其中有一个小坑,如果一个模块既有aar包也有jar包,只拷贝其中一个即可。我在依赖时,将同一个模块的jar包和aar同时拷贝到了libs目录下,导致后面编译时,总是报有重复文件的异常

Error:Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'.

> More than one file was found with OS independent path 'abc/a.java'

        经过多次调试才发现是由于jar和aar包同时存在,导致该模块被加载了两次导致的。删除一个即可。

        方式一:在module的build.gradle文件中的dependencies中添加

android {
    ...
}
dependencies {
    //引⼊jar和aar
    implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')
    //引⼊只有jar
    //implementation fileTree(dir: "libs", include: ["*.jar"])
    ...
}

        此种⽅式简单粗暴,但是不允许同时出现同⼀模块不同编译类型的jar(或aar)。
        例如,如果libs同时存在test-release.aar和test-debug.aar,他们都是来⾃同⼀个module的打包,但是只是编译类型不⼀样,如果同时存在的话,会编译不过。

        方式二:在module的build.gradle文件中的android中添加

android {
    ...
    repositories {
        flatDir {
            dirs 'libs'
        }
    }
}
dependencies {
    implementation fileTree(dir: "libs", include: ["*.jar"])
    implementation (name:'abc',ext:'aar')
    ...
}

 注意:如果app模块引用了module模块,还需要在app模块的build.gradle文件中的android中添加

android {
    ...
    repositories {
        flatDir {
            //app和module在同一级目录下
            dirs 'libs','../module/libs'
        }
    }
}

3.添加aar包中引用的第三方依赖

        添加依赖后,在编译过程中,可能会发现有些第三方框架的类找不到了,这个一般是由于这个第三方框架是由aar依赖的,而本地项目无法使用aar包中引用的第三方框架。解决方法是

        1.将第三方框架的jar包下载到本地,然后拷贝到libs进行依赖;

        2.直接在dependencies中添加远程依赖;

        3.如果自己要集成的aar中包含有其他的aar文件,需要在引入我们自己集成的aar的时候也要额外引用所包含的aar文件,这样虽然繁琐但是能够解决问题。

4.添加其他远程库

        后面编译时我还碰到未找到dependencies中引用的某第三方框架的异常,原因是这个第三方框架的资源没有被下载,可以网上搜索一下这个第三方框架存放在了哪个仓库中,一般集成之前都会说明,补上重新编译即可

buildscript {
    repositories {
       ...
       maven { url "https://jitpack.io" }
    }
    dependencies {
        ...
    }
}
allprojects {
    repositories {
        ...
        maven { url "https://jitpack.io" }
    }
}

        以上就是我此次依赖aar包期间遇到的问题,希望可以帮助到大家~

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值