zoukankan      html  css  js  c++  java
  • Gradle DSL Walle渠道包后安装启动APP

    DSL(Domain-Specific Language)

    Gradle 是一个编译打包工具,但实际上它也是一个编程框架。

    Task 是 Gradle 中的一种数据类型,它代表了一些要执行或者要干的工作。不同的插件可以添加不同的 Task。每一个 Task 都需要和一个 Project 关联。

    Task 的 API 文档位于:https://docs.gradle.org/current/dsl/org.gradle.api.Task.html

    • 任务创建
    task hello {
        doLast {//doLast 可用 << 代替,不推荐此写法
            println "hello"//gradle运行阶段打印出来
        }
    }
    
    task hello {
        println "hello"//gradle配置阶段打印出来
    }
    • 任务依赖
    A 依赖 B,A 又同时依赖 C。但执行的结果可能是 B -> C -> A,我们想 C 在 B 之前执行,可以使用 mustRunAfter
    
    task A << {println 'Hello from A'}
    task B << {println 'Hello from B'}
    task C << {println 'Hello from C'}
    A.dependsOn B  //执行 A 之前会先执行 B
    A.dependsOn C //执行 A 之前会先执行 C
    B.mustRunAfter C    //B 必须在 C 之后执行

    task autoSign { 
      //依赖于其他Task执行完,在执行本Task
      dependsOn ''

      //先执行
      doFirst{ }

      // 后执行
      doLast{ }
    }

    dependsOn出现如下异常时
    A problem occurred evaluating script.
    > Could not get unknown property 'installApk' for project ':app' of type org.gradle.api.Project.

    解决方案:
      // 对project的生命周期进行监听
        this.afterEvaluate {
            setDependsOn([assembleDebugChannels])
        }

    实例操作渠道包后自动安装并启动

    • 创建安装启动APP GRADLE
    app中build.gradle中添加
    apply from: rootProject.file('gradle/launchApp.gradle')
    launchApp.gradle内容如下
    // 一键安装渠道包 assembleDebugChannels --> installApk --> launchApp
    task installApk() {
        // 对project的生命周期进行监听
        this.afterEvaluate {
            setDependsOn([assembleDebugChannels])
        }
    
        doLast {
    
            walle{
                // apk path
                def path = "${project.buildDir}/outputs/channels/xxx.apk"
                def command = "adb install -r ${path}"
                executeCommand(command)
                println "installApk success"
            }
    
        }
    }
    
    // 启动APP
    task launchApp(dependsOn: installApk) {
        doLast {
            //指定要启动的Activity啦
            def command = "adb shell am  start com.example.xxx/.MainActivity"
            executeCommand(command)
            println "launchApk success"
        }
    }
    
    
    /**
     * 执行shell指令
     * @param command 命令
     * @return
     */
    def executeCommand(String command) {
        try {
            exec {
                ExecSpec execSpec ->
                    executable 'sh' args '-c', command
            }
        } catch (Exception e) {
            e.printStackTrace()
        }
    }
  • 相关阅读:
    (参考)爬虫5-爬取中国大学排名情况
    005_软件安装之_常用办公软件
    004_软件安装之_Altium Designer
    001_基础硬件电路_二极管
    添加QQ群
    024_STM32程序移植之_ESP8266_TCP
    020_C语言常用函数
    004——转载C#禁止改变窗体大小
    003转载----C#打开网页
    002_Python基础学习网站
  • 原文地址:https://www.cnblogs.com/zgz345/p/11062490.html
Copyright © 2011-2022 走看看