经验分享:批量打包和安装Android APK

访客 181 0

一、多模块一起打包

在实际项目开发中,一个项目会有多个模块,那么如何用一个命令来依次生成多个APK呢?

答案是通过gradlew命令进行批量打包

如果项目名称为AProject,且包含模块B、C和D,那么根据实际需求,你可以使用以下命令单独打包不同渠道:assembleRelease、assembleDebug和assembleAndroidTest。你可以根据需要自行编写这些命令。

使用以下命令分别打包,将在各个模块的build目录生成apk文件:

```
./gradlew :B:assembleRelease
./gradlew :C:assembleDebug
./gradlew :D:assembleAndroidTest
``` 

那么,要想进行批量打包,可以使用gradlew命令来整合以下步骤即可:

合并后的指令如下:

执行以下命令后,各个模块的build目录将生成相应的apk文件:“./gradlew clean :B:assembleRelease :C:assembleRelease :D:assembleAndroidTest

二、将多个APK包拷贝到新生成的outputs目录下

在工程的./build.gradle文件中增加如下配置:

subprojects() {
    def releaseTasks = project.getTasksByName(assembleRelease, false)
    def debugTasks = project.getTasksByName(assembleDebug, false)
    def androidTestTasks = project.getTasksByName(assembleAndroidTest, false)

    copyApkFile(releaseTasks, project)
    copyApkFile(debugTasks, project)
    copyApkFile(androidTestTasks, project)
}

def copyApkFile(Set tasks, Project project) {
    for (task in tasks) {
        def dir = project.getProjectDir().getAbsolutePath()
        println Assemble release directory: $dir
        
        def file = new File(dir + /build/outputs/apk/
        
        // Rest of the code...
 

会自动创建outputs目录,并将所有生成的APK拷贝到outputs目录中

三、shell脚本批量安装

请创建一个名为install_app.sh的文件,文件内容如下:

#!/bin/bash
# install_app.sh

echo ========== Start install apk ==========

apkDir=$WORKSPACE/outputs
apkDir=/Users/xxx/outputs # 设置读取outupts目录
path=
subDir=

cd $apkDir

function readDir() {
    cd $apkDir
    filelist=$(ls $1)
    
    for file in $filelist; do
        # 这里写具体的操作逻辑
        #
        #
    done
    
}

readDir 

com.aa.aaa

com.bb.bbb

请注意:脚本中会使用到all_list文件名。

2、编写 uninstall_pre.sh 脚本文件

编写脚本的思路如下:

1. 首先,将需要卸载的应用的包名(Package_Name)记录在一个名为all_list的文件中;

使用 adb shell pm list packages -3 命令,您可以提取测试设备中已安装的所有第三方应用的包名,并将其输出到一个名为list的文件中。

 3.通过 for line in list 语句遍历 list 文件,取出每行字符串并截取出包名;

4. 对比截取的包名和 all_list 文件中的内容,如果存在相同或包含关系,则使用 adb uninstall 命令进行卸载。

 5.被卸载的应用包名将输出在终端。

以下是已经完成的脚本编写:

#!/bin/bash# 第三方应用包名输出到list文件adb shell pm list packages -3 >list.txt# 等待3秒sleep 3s# 遍历手机里的第三方app的包名for line in $(cat list.txt); do    # 将packagename截取出来    name=${line:8}    # 遍历要卸载的包名    for line2 in $(cat all_list.txt); do        # 判断是否包含        if [[ $name =~ $line2 ]]; then            # 删除包名结尾的\r            package_name=$(echo $name | tr '\r' ' ')            # 执行adb卸载命令            adb uninstall $package_name            # 打印已卸载的包名            echo $package_name"已卸载"        fi    donedone

四个步骤一气呵成,可以实现批量打包并将生成的多个APK通过gradle文件配置拷贝到outputs目录下,然后通过编写好的shell脚本来批量安装和批量卸载,完美!感谢朋友们支持~
 

 

标签: 文件 批量 命令 脚本

发表评论 (已有0条评论)

还木有评论哦,快来抢沙发吧~