Android完整项目项目打包
之前产品那边提出一个需求,需要我们这边提供一个带界面SDK,客户那边一段代码就能调起我们这边提供的界面,完成逻辑之后,返回数据给调用者.
这个时候我首先想到了jar,打包之后通过解压发现Activity已经打入了jar包,因为jar包都是纯class文件,所以我又把jar包中引用的资源拷贝到新项目的资源路径下,通过显示启动jar中的Activity,应用直接崩溃,原因是资源ID未找到的异常.
这是因为jar中Activity中资源文件的ID,跟新项目里面资源文件的ID不一致,解决方法也很简单,就是在需要打包的项目里通过反射的方式引用资源,这样打成jar包后,在新项目里,同样通过反射的方式才能找到拷贝到新项目里的资源文件.这不是今天的重点,所以不多讲解,这里给大家提供一个博客地址,我也是参考这篇博客解决的问题
地址:http://blog.csdn.net/hhhccckkk/article/details/9313999
最后我也没有选择这种方式,因为通过反射的方式找资源效率低下,而且打包之后,jar和资源还得分别拷贝进新项目,这样也不够方便.
那么有没有更好的解决方案呢?我的回答是必须的,这也是今天的重点所在,Android Studio给我们提供了一种新的打包的方式arr包,什么是arr包呢,下面我来给jar与arr做一个对比,大家就明白了.
jar包与aar包的区别
jar是java字节码文件(class文件)的归档文件,其不包含android中的资源文件等信息;
aar是android中特有的归档文件,既包含字节码文件也包含android的资源文件等;
arr文件解压文件如下:
很明显,arr把Android中的源代码和资源文件都打包了进去,那么使用起来自然简单方便了,这里说明一点,arr包在eclipse下引用十分困难.
完整的项目生成arr文件以及使用
1.我们新建一个项目,然后在项目下创建一个Module:
2.目录结构如下:
3.此时app与mylibrary这两个东西只是在一个项目里,但是他两还是单纯存在的,需要建立者两者之间的关联
然后有一个弹框出来,点击OK就行了,这样mylibrary就成为了app的依赖库,app中可以直接调用mylibrary.
4.在mylibrary中编码
这里是简单的写了一个Activity,里面提供了一个按钮,然后点击按钮,弹出一段Toast,这里只是起一个演示作用.
5.打包
打包就更简单了,确定mylibrary中的代码没有问题之后
这样arr包就生成了,位置如下:
到了这一步我们以及成功的打出了arr包,已经算是成功了一半了,接下来就讲一下arr的使用
1.新建一个项目,将arr文件拷贝到libs下
2.在app/build.gradle下进行配置
在android节点下添加:
repositories {
flatDir {
dirs 'libs'
}
}
在dependencies下添加
compile(name: 'mylibrary-debug', ext: 'aar')
截图如下:
然后点击Sync Project,这样arr就算是导入成功了
最后是在新项目中启动arr包中的Activity
public void testArr(View view) {
//通过显示启动启动Arr中的Activity
Intent intent = new Intent();
intent.setClassName(MainActivity.this, "com.sdkeji.pyfaceforsdlib.mylibrary.TestArrActivity");
startActivity(intent);
}