(android studio) gradle中利用maven下載apk等非jar文件的方法
首先感謝Jiraiya的這篇文章提供了解決方案!
在我們使用android studio開始的時候祷舀,我們通常都會使用maven來下載需要的一些jar,aar資源。我們在實(shí)現(xiàn)android插件化的時候,可能會將某些模塊直接以apk的形式,和主程序打包發(fā)出來客扎。可這些模塊化的apk多起來的時候,我們就需要借助maven倉庫將這些apk管理起來垒探。可是我們通常在使用maven倉庫時怠李,都是如下所示
dependencies {
compile 'com.crashlytics.sdk.android:crashlytics:2.2.4@aar'
}
這個時候圾叼,如果我們將compile里面的路徑替換成
dependencies {
compile 'com.***.bundlemmp:test:0@apk'
}
編譯蛤克,報錯。
Dependency com.***.bundlemmp:test:0 on project app resolves to an APK archive which is not supported as a compilation dependency. :app:prepareDebugDependencies FAILED
因?yàn)閏ompile并不能對apk進(jìn)行編譯操作夷蚊。但是我們又需要通過maven對apk進(jìn)行下載构挤,并移動到指定的文件夾下,從而完成最終的打包操作惕鼓。
直接上代碼
在project的build.gradle文件中配置好maven庫的地址
allprojects {
repositories {
jcenter()
maven{
url 'http://192.168.58.38:8081/nexus/content/groups/public/'
}
}
}
下面是核心代碼
configurations {
mrsFile
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:25.3.0'
mrsFile 'com.***.bundlemmp:test:0@apk'
}
task downloadMRSFile(type:Copy){
new File("${rootDir}/leo").mkdirs();
configurations.mrsWar.resolve().each { file ->
from file.getParent()+"/"+file.getName()
into "${rootDir}/leo/"
}
}
tasks.whenTaskAdded { task ->
if (project.name.equals("app") && task.name.equals("mockableAndroidJar")) {
task.dependsOn downloadMRSWar
}
}
在主程序app中的build.gradle文件中配置好configurations筋现,聲明一個mrsFile。
然后在dependencies中通過mrsFile下載我們需要的apk
再自定義一個task箱歧,執(zhí)行下載矾飞,以及遷移apk到我們想要的目錄中去
最后還需要將這個tsask加入到build環(huán)節(jié)中,我這里用的是mockableAndroidJar這個task呀邢,你們也可以根據(jù)自己的實(shí)際情況去修改洒沦。不然downloadMRSFile這個task,會執(zhí)行不了copy的操作价淌。之所以使用gradle的copy操作微谓,是因?yàn)槲覀兿螺d的文件,在本地的maven倉庫中會有緩存输钩,我們可以通過println file.getPath()來查看具體的位置豺型。這樣,我們使用copy之后买乃,可以避免重復(fù)的下載姻氨。