Android完整项目打包

时间:2021-03-08 09:00:33

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文件解压文件如下:
Android完整项目打包

     很明显,arr把Android中的源代码和资源文件都打包了进去,那么使用起来自然简单方便了,这里说明一点,arr包在eclipse下引用十分困难.

完整的项目生成arr文件以及使用

1.我们新建一个项目,然后在项目下创建一个Module:

Android完整项目打包

Android完整项目打包

2.目录结构如下:
Android完整项目打包

3.此时app与mylibrary这两个东西只是在一个项目里,但是他两还是单纯存在的,需要建立者两者之间的关联

Android完整项目打包

然后有一个弹框出来,点击OK就行了,这样mylibrary就成为了app的依赖库,app中可以直接调用mylibrary.

4.在mylibrary中编码

Android完整项目打包
这里是简单的写了一个Activity,里面提供了一个按钮,然后点击按钮,弹出一段Toast,这里只是起一个演示作用.

5.打包
打包就更简单了,确定mylibrary中的代码没有问题之后
Android完整项目打包

这样arr包就生成了,位置如下:
Android完整项目打包

到了这一步我们以及成功的打出了arr包,已经算是成功了一半了,接下来就讲一下arr的使用

1.新建一个项目,将arr文件拷贝到libs下
Android完整项目打包

2.在app/build.gradle下进行配置

在android节点下添加:

repositories {
flatDir {
dirs 'libs'
}
}

在dependencies下添加

compile(name: 'mylibrary-debug', ext: 'aar')

截图如下:
Android完整项目打包

Android完整项目打包

然后点击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);
}

源代码下载:http://download.csdn.net/detail/ln840434235/9613579