以android studio 2.0正式版爲例android
1.aar包是Android studio下打包android工程中src、res、lib後生成的aar文件,aar包導入其餘android studio 工程後,其餘工程能夠方便引用源碼和資源文件編程
2.生成aar包步驟:app
2.1用android studio打開一個工程,而後新建一個Module,新建Module時候選擇Android Library,後面按新建普通工程操做maven
2.2新建Module 類型爲android Library 後以下圖所示gradle
2.3在新建的Module中編寫完代碼後,接下來編譯整個工程後就會自動生成aar包,選中本身建立好的Module(個人就是paysdk)ui
點擊菜單欄 Build裏面的Make Module ‘xxx’ 以下圖:spa
2.4編譯完成以後會在Module的build-->outputs-->aar-->xxxxx.aar 如圖:.net
3.其餘androidstudio工程引用aar包debug
3.1將aar包複製到libs目錄下 以下圖:
3d
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