這個上個月老闆提的需求, 如今想起來了,總結下將本身的工程轉換成aar包時的過程,以及碰到的一些問題.java
關於aar包,能夠參考:http://blog.csdn.net/maosidiaoxian/article/details/41578499node
在Android Studio 環境下android
將原來的項目的 build.gradle 中的api
apply plugin: 'com.android.application'
替換成app
apply plugin: 'com.android.library'
那麼同時, 框架
defaultConfig { // applicationId "cn.feezu.app" //library不能有applicationId,會報錯 }
最坑爹的是,原來工程中處理點擊事件,通常都是用 switch... case... 語句,如今也不能用了,必須所有替換成if...else...語句,貌似是說在library中的資源id都不是final 的了, 全部不能用switch...case....了, 這個解釋我不能接受.ide
[2016/8/11 update]佈局
用if替代switch -case, 能夠參考 http://blog.csdn.net/maosidiaoxian/article/details/41576721gradle
以及:http://tools.android.com/tips/non-constant-fieldsui
實驗了下,以下圖,能夠直接替換
而後在project下新建一個module, 做爲 application,
在這個module的build.gradle中增長依賴
dependencies { compile project(':app') }
而後用這個module 運行下, 成功以後, 在做爲library的module 的build\outputs\aar目錄下會生成2個aar包
可能名字會是 app-debug.aar app-release.aar,
這個就是須要的東西了. 用這個release的包,
====================可恥的分割線===================================
新建一個project, 將須要的aar包放入到libs下,
1. 在build.gradle中增長依賴
dependencies { compile(name: 'app-release', ext: 'aar')//導入app2.aar並執行 }
同時必須指定aar包的爲本地倉庫:
repositories { flatDir { dirs 'libs' //this way we can find the .aar file in libs folder } }
2. 而後一個問題就是在aar包中須要的依賴庫,可能須要也加入到目標工程的依賴中,
好比我在原工程中使用了百分比佈局的庫依賴, 若是在目標工程中不添加這個百分比佈局庫的依賴,會爆出一個
Error:(38) No resource identifier found for attribute 'layout_marginTopPercent' in package 'cn.wxn.hainanapp4'
的錯,在目標工程中加上原工程的添加的依賴就不會報錯了
3. 再一個問題就是 樣式導入,
在原工程中使用到的樣式,都須要複製到目標工程的樣式文件中,以及樣式應用到的資源文件或者字段,若是原工程由大量的樣式文件以及配套的資源文件,這個也是一個很大的工做量了.固然從另外一個方面將, 資源文件徹底暴露, 也方便目標工程和原工程的樣式統一處理.
[2016/08/19更新]
在android studio 2.0裏,發現不用導入aar包中的樣式文件了
而後另一個問題,就是若是工程中用到了butterknife這樣的用註解來控制界面元素的框架,也是不能使用的。只能去掉這個框架,由於註解也是須要依賴元素id是final的才能夠用。
4. 另外:
對應像個人aar工程中使用到了百度,而且在aar包的清單文件中註冊了百度key,
那麼,aar包中的清單文件中註冊的百度key是無效的,須要目標工程中從新申請對應包名的百度key,並是同tool:replace進行清單整合式替換aar包中的清單配置
在目標的清單文件中,須要增減xmlns:tools
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.example.wangxn.sdkdemo">
而後將申請的百度key填寫進來,須要增長tools:node屬性
<meta-data tools:node="replace" android:name="com.baidu.lbsapi.API_KEY" android:value="baidukey*****************baidukey" />
這裏有些參考內容: