以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