美文网首页
Assets apk打包脚本

Assets apk打包脚本

作者: Youremywoman | 来源:发表于2019-04-30 11:10 被阅读0次

    美小易打包脚本

    点击android studio Run按钮后发生了什么? 知乎答案

    1. 检查项目和读取基本配置(这一步主要在IDE的代码中JetBrains/android)
    2. Gradle Build(主要用的com.android.build.gradle中的逻辑)
    3. Apk Install & LaunchActivity(主要用的adb)

    主要理解一下build tool执行的过程 以下分析基于com.android.tools.build:gradle:3.3.0


    参考文章


    美小易打包流程

    1. 客户端,业务中心切换到相应分支
    2. 配置业务中心shell.properties文件中客户端项目地址
    3. 业务中心打包,将apk拷贝到客户端的assets目录。
    4. 打包客户端分支。

    以上流程修改完业务中心代码都要操作一遍感觉比较复杂。所以写一个脚本优化他。最好点击运行按钮直接就能看到最后的效果。这边主要是一个寻找何时打包业务中心的点。通过查看ApplicationTaskManager createAnchorTasks中task配置逻辑找到在打包assets之前会执行generate {flavor}{buidType}Assets的一个Anchor Task 所以让这个task依赖我们的task就好。这样就完成了完业务中心后客户端打包。

    修改build.gradle

    static def buildServer(){
        //是否重新打业务中心开关
        return false
    }
    //业务中心项目地址 配置在local.properties中 这样就不用每次修改小伙伴提交的。
    static def getServerDir(){
        if(!buildServer()){
            return null
        }
        Properties properties= new Properties()
        File file = new File('./airClient/local.properties')
        if(!file.exists()){
            return null
        }
        properties.load(file.newDataInputStream())
        return properties.getProperty('serverDir')
    }
    
    
    //去执行serverBuild.sh  
    task serverBuild(type: Exec){
        doFirst {
            println "start server build"
        }
        def gitBranchName = ['sh', '-c', 'git symbolic-ref --short -q HEAD'].execute().text.trim()
        workingDir "$projectDir"
        //serverDir 找到业务中心目录   gitBranchName 将业务中心代码分至与当前一致  projectDir区分美易点美小易
        commandLine 'sh', '-c', "./serverBuild.sh  $serverDir $gitBranchName $projectDir"
    }
    
    
    
     applicationVariants.all { variant ->
            variant.outputs.all {
                //用于本地直接运行debug业务中心代码 在generateProDebugAssets前添加 业务中心打包添加到asset目录
                //serverDir!=null 确保jenkins 不会执行到这
                if (serverDir!=null&&variant.buildType.name == ("debug")) {
                    tasks.findByPath(":airClient:generateXiaosanDebugAssets").dependsOn tasks.findByPath(":airClient:serverBuild")
                }
            }
        }
    
    
    
    #进入业务中心目录
    cd "$1"
    #业务中心切换到客户端相同目录
    git checkout "$2"
    #业务中心子module切换
    git submodule foreach git checkout "$2"
    #把客户端目录写到业务中心shell.properties下
    echo path="$3" > ./serverShell/shell.properties
    #业务中心打包 打完包后老流程 会将apk拷贝到我么写入/serverShell/shell.properties中的路径。
    ./gradlew  :serverShell:assembleDebug
    

    相关文章

      网友评论

          本文标题:Assets apk打包脚本

          本文链接:https://www.haomeiwen.com/subject/kzumnqtx.html