这个上个月老板提的需求, 如今想起来了,总结下将本身的工程转换成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" />
这里有些参考内容: