这个上个月老板提的需求, 现在想起来了,总结下将自己的工程转换成aar包时的过程,以及碰到的一些问题.
关于aar包,可以参考:http://blog.csdn.net/maosidiaoxian/article/details/41578499
在Android Studio 环境下
将原来的项目的 build.gradle 中的
apply plugin: 'com.android.application'
替换成
apply plugin: 'com.android.library'
那么同时,
defaultConfig {// applicationId "cn.feezu.app" //library不能有applicationId,会报错 }
最坑爹的是,原来工程中处理点击事件,一般都是用 switch... case... 语句,现在也不能用了,必须全部替换成if...else...语句,貌似是说在library中的资源id都不是final 的了, 所有不能用switch...case....了, 这个解释我不能接受.
[2016/8/11 update]
用if替代switch -case, 可以参考 http://blog.csdn.net/maosidiaoxian/article/details/41576721
以及:http://tools.android.com/tips/non-constant-fields
实验了下,如下图,可以直接替换
然后在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
然后将申请的百度key填写进来,需要增加tools:node属性
这里有些参考内容: