时隔多年,公司又提出了新的需求,之前的打包jar已经满足不了合作方的需求了。合作方:你们的jar,没有页面,需要时间去开发,给我一个直接能用的。程序员:你有钱,你说什么都对。这个需求首先让我想到的就是换壳,直接把这整个项目打包aar。在合作方公司App里面直接引入,启动APP时直接加载aar里面的页面,达到零开发成本。进入正题:

  • 简单的module打包aar
  • 完整项目打包aar

简单的module打包aar

1.新建一个工程,然后在工程里新建一个module。

aar android 重新打包 androidstudio打包aab_aar android 重新打包

aar android 重新打包 androidstudio打包aab_项目换壳_02

aar android 重新打包 androidstudio打包aab_aar android 重新打包_03

2.到工程App的build中要加入aarlibrary 这个依赖model,方便编写完module后执行app调试。

aar android 重新打包 androidstudio打包aab_换马甲发布_04

3、把编写好的module打包aar。

点击最右边的gradle面板,选择刚才创建的module进行编译,CommandLine 指令为assemble,具体操作步骤看图:

aar android 重新打包 androidstudio打包aab_aar android 重新打包_05

4、编译完成后会在module下的build/output文件夹,里面生成两个aar文件,我们一般选用release版本的aar文件。

aar android 重新打包 androidstudio打包aab_jar_06

这时候简单的module打包aar就完成了,aar里面是包含布局文件资源的。我们需要把aar复制到我们新的项目中去使用。

5、新项目引用打包好的aar。

1)将打包好的aar文件复制到项目中lib中。

aar android 重新打包 androidstudio打包aab_jar_07

2)修改app下的build.gradle文件,添加如下代码:

repositories  {
    flatDir{ dirs 'libs'  }
}
compile(name:'aarlibrary', ext:'aar')

aar android 重新打包 androidstudio打包aab_项目换壳_08

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'.如图:

aar android 重新打包 androidstudio打包aab_aar android 重新打包_09

2、修改app的AndroidManifest文件

将application里面的一些里的name,icon,label,theme等删掉,activity的intent-filter删掉,

aar android 重新打包 androidstudio打包aab_jar_10

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