时隔多年,公司又提出了新的需求,之前的打包jar已经满足不了合作方的需求了。合作方:你们的jar,没有页面,需要时间去开发,给我一个直接能用的。程序员:你有钱,你说什么都对。这个需求首先让我想到的就是换壳,直接把这整个项目打包aar。在合作方公司App里面直接引入,启动APP时直接加载aar里面的页面,达到零开发成本。进入正题:
- 简单的module打包aar
- 完整项目打包aar
简单的module打包aar
1.新建一个工程,然后在工程里新建一个module。
2.到工程App的build中要加入aarlibrary 这个依赖model,方便编写完module后执行app调试。
3、把编写好的module打包aar。
点击最右边的gradle面板,选择刚才创建的module进行编译,CommandLine 指令为assemble,具体操作步骤看图:
4、编译完成后会在module下的build/output文件夹,里面生成两个aar文件,我们一般选用release版本的aar文件。
这时候简单的module打包aar就完成了,aar里面是包含布局文件资源的。我们需要把aar复制到我们新的项目中去使用。
5、新项目引用打包好的aar。
1)将打包好的aar文件复制到项目中lib中。
2)修改app下的build.gradle文件,添加如下代码:
repositories {
flatDir{ dirs 'libs' }
}
compile(name:'aarlibrary', ext:'aar')
3)在新的项目里面启动aar里面的Activity
Intent intent = new Intent(android.content.Intent.ACTION_VIEW);
/**
* 1、这里的packetname 是新项目的包名
* 2、classname 填写aar里面的Activity的:包名+Activity名称
*/
intent.setComponent(new ComponentName("com.aarapplication",
"aardemo.com.aarlibrary.AARActivity"));
startActivity(intent);
完整项目打包aar
把一个完整的项目打包aar,也就是换壳,常用于把老APP换个壳,变成一个新的APP上线。把app打包aar其实跟module打包aar思路是一样的,我们要先把app改成module,再打包aar即可。
1、修改app的build.gradle,把它改成module。
将app中的apply plugin: 'com.android.application' 替换成apply plugin: 'com.android.library'.如图:
2、修改app的AndroidManifest文件
将application里面的一些里的name,icon,label,theme等删掉,activity的intent-filter删掉,
3、修改switch case,使用if else来的代替。
library中的不可以使用switch case,必须要用if else来的代替,否则空指针等其他错误。
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (v.getId() == R.id.linear_left) {
((Activity) mContext).finish();
} else if (v.getId() == R.id.btn_submit) {
Intent intent = new Intent(mContext, MainActivity.class);
mContext.startActivity(intent);
}
}
4、操作上面,把一个简单module打包aar的3、4、5步,即可把这个项目引用到一个新的项目中去。
注意:aar里面的Activity的名称和布局文件的名称不要跟新项目的的Activity的名称和布局文件的名称一致,这样会出现冲突,导致程序异常闪退。
未完。。。
要打包jar的点击这里:android studio 将引用第三方jar和.so的项目打包jar并混淆
aar打包参考文章:https://www.jianshu.com/p/29803da4d117