aar包 生成 以及相关处理

 

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

这里有些参考内容:

http://my.oschina.net/u/990728/blog/548453

相关文章
相关标签/搜索