Android 開發中踩過的坑之九: 發佈一個aar的注意事項

如今Android支持aar格式發佈一個模塊, 提供給其餘人使用. 
android

aar實際上是jar和一些資源文件的zip包. 解決了過去jar包不能分享資源的侷限.編程


1 要儘可能避免定義內部接口,app

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

由於當你發佈aar時, 內部的接口在混淆後會獨立成一個外部的接口Outer$InnerInterface.
spa

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

想寫成XXX implement Outer.InnerInterface{}是不行的, 由於在Outer裏沒有這個InnerInterface的定義, 在混淆後, 全部的內部類都被改寫成了形如Outer$Inner的外部類了. 包括interface, enum, 等等.code

更糟糕的是, 你極可能只是發佈項目的一部分代碼做爲aar,  那你的項目內已經引用的Outer.Inner的類或接口都必須寫成Outer$Inner的形式, 不然編譯不過, 不然運行時找不到類. 因此, 爲了之後沒必要要的麻煩, 儘可能避免使用內部類, 內部接口, 接口

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


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資源名同樣. 爲了不這種尷尬, 最好在定義的資源程前加上一個前綴, 好比你的模塊簡寫,商標簡寫等等. 避免衝突, 還能打個廣告, 何樂而不爲.

相關文章
相關標籤/搜索