2016-09-06 98 views
1

首先產生的,我會解釋我的項目結構如何添加JAR依賴於AAR

Test Application 
| 
| - Library Module 
| | 
| | - Core Library Module 
|  | Module 1 
|  |- Jar dependency 1 
|  | 
|  | Module 2 
|  |- Jar dependency 2 

我有_I用來測試庫模塊是使用生成AAR文件,這是一個測試應用程序分發到其他應用程序。

庫模塊對另一個模塊具有依賴性,該模塊包含我的庫和其他庫的一些核心功能。

問題是核心庫有2個依賴關係,2個jar文件。那些被添加到項目中的模塊只包含該jar。

現在,當我爲庫模塊生成aar文件時,這些jar文件不會被添加到aar中。我不想將這些罐子直接添加到客戶端應用程序,所以我唯一的解決方案是找到一種方法將它們添加到aar文件中。

我已經嘗試使用這個https://github.com/adwiv/android-fat-aar添加它們,但沒有運氣,因爲它用於將常規模塊添加到aar而不僅僅是一個jar文件。

有沒有辦法將這些罐子添加到罐子上? aar在jenkins中生成並部署到artifactory中。

感謝,

回答

0

我could'nt發現這樣做的直接的方式,但我將圍繞解釋,以防有人我的工作別人有同樣的問題,也許這會爲你工作。我不會將這個答案設置爲正確答案,因爲也許別人可以給我們一個更好的答案。

因爲我不能直接添加jar文件,所以我創建了一個gradle tak,它複製了我想添加到classes目錄下的jar文件中的所有文件,然後gradle將它們加入到class.jar中位於.aar文件中的文件。

這是gradle這個任務

tasks.whenTaskAdded { task -> 
if (task.name == 'bundleRelease') { 
    task.dependsOn embedJavaJarsCustom 
} 
} 

task embedJavaJarsCustom << { 

def finalPath = '/Users/jenkins/workspace/MyProject/MyLibrary/libs' 
    // Collect list of all jar files 
    FileTree jars = fileTree(dir: finalPath, include: ['*.jar']) 

    println "Embedding jars : " + jars 

    // Explode all jar files to classes so that they can be proguarded 
    jars.visit { 
     FileVisitDetails element -> 
      println element.getName() 
      if (element.getName().equals('my.jar') 
        || element.getName().equals('my2.jar')) { 
        copy { 

         from(zipTree(element.file)) 
         into("${getProject().getBuildDir()}/intermediates/classes/release/") 
        } 
      } 

    } 
} 
相關問題