android studio 生成aar和引用aar


以android studio 2.0正式版為例

1.aar包是Android studio下打包android工程中src、res、lib后生成的aar文件,aar包導入其他android studio 工程后,其他工程可以方便引用源碼和資源文件

2.生成aar包步驟:

2.1用android studio打開一個工程,然后新建一個Module,新建Module時候選擇Android Library,后面按新建普通工程操作

 

 

2.2新建Module 類型為android Library 后如下圖所示

 

2.3在新建的Module中編寫完代碼后,接下來編譯整個工程后就會自動生成aar包,選中自己創建好的Module(我的就是paysdk)

點擊菜單欄 Build里面的Make Module ‘xxx’  如下圖:

 

2.4編譯完成之后會在Module的build-->outputs-->aar-->xxxxx.aar 如圖:

 

 

3.其他androidstudio工程引用aar包

3.1將aar包復制到libs目錄下 如下圖:

 

 

3.2配置build.gradle文件:

加入

  repositories {
        flatDir {
        dirs 'libs'
    }

compile(name:'paysdk-debug', ext:'aar')   name后面是自己的aar的名字

完整的配置文件:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        applicationId "com.umpay.paydemo"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }


}
repositories {
    flatDir {
        dirs 'libs'
    }
}
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:23.3.0'
    compile(name: 'paysdk-debug', ext: 'aar')
}

 

3.3最后一個同步gradle

在這里說一下發布一個aar的注意事項:

修改Module(也就是生成aar的工程,我的是paysdk)里面的代碼的時候,重新編譯好之后,需要把引用aar項目當中的aar文件刪掉,並且也需要刪除掉build--intermediates--exploded-aar--paysdk,完了在重新同步

1 要盡量避免定義內部接口,


這其實是一個編程習慣, 接口interface最好是獨立定義, 避免定義在類的內部.


因為當你發布aar時, 內部的接口在混淆后會獨立成一個外部的接口Outer$InnerInterface.


然后麻煩來了, 別人在實現這個類的時候必須也寫成XXX implement Outer$InnerInterface{}的形式. 否則是找不到這個類的.


想寫成XXX implement Outer.InnerInterface{}是不行的, 因為在Outer里沒有這個InnerInterface的定義, 在混淆后, 所有的內部類都被改寫成了形如Outer$Inner的外部類了. 包括interface, enum, 等等.


更糟糕的是, 你很可能只是發布項目的一部分代碼作為aar, 那你的項目內已經引用的Outer.Inner的類或接口都必須寫成Outer$Inner的形式, 否則編譯不過, 否則運行時找不到類. 所以, 為了以后不必要的麻煩, 盡量避免使用內部類, 內部接口,


除非你確認不會混淆代碼, 或者會將所有定義和調用都參與混淆.


2 使用maven發布需要將所有依賴都發布到maven上

如果你發布多個aar, 每個aar互相依賴, 那么你需要將這些依賴都以maven的形式定義, 否則會在編譯時, maven解析某個aar的pom時會報空指針異常.

maven的形式定義:

apply plugin: 'maven'
compile 'com.nineoldandroids:library:2.4.0+'

3 res內定義的屬性或者名稱, 都應當加上前綴

你的aar里定義資源文件是很正常的事, 資源文件很有可能和別人的資源重名, 而悲劇的是, 別人很有可能是引用了另外一個aar導致與你重名. 他無法修改那個aar的資源名, 就像他不能修改你的aar資源名一樣. 為了避免這種尷尬, 最好在定義的資源程前加上一個前綴, 比如你的模塊簡寫,商標簡寫等等. 避免沖突, 還能打個廣告, 何樂而不為.

 

參考博客:http://blog.csdn.net/getchance/article/details/47257389,http://my.oschina.net/u/1393188/blog/492576?fromerr=GtSFp8Qa


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM