zoukankan      html  css  js  c++  java
  • 安卓持续集成docker+jenkins+gradle+android

    一、安装android-sdk
    在linux服务器安装sdk


    wget http://dl.google.com/android/android-sdk_r24.4.1-linux.tgz

    
tar -zxvf android-sdk_r24.4.1-linux.tgz
    安装需要的sdk版本

    
cd android-sdk-linux/tools
./android list sdk -a     查看可见的sdk版本

    
./android update sdk -a -u -t [序号]         (-a 列出所有sdk版本       -u 无ui模式     -t 指定安装版本)下载指定版本
    二、生效环境变量
    vim /etc/profile        #结尾加上 export ANDROID_HOME=“你的sdk路径"
    source /etc/profile
    三、gradle编译
    cd /XXX/XXX  #切换到项目路径
    gradle clean assemblePRODebug —no-daemon  #编译指定渠道的debug包

    ===============================================================

    遇到的问题:

    • jenkins是在docker容器里的,需要把sdk gradle fireline 也装到容器里才能读到;安装到映射在实体机的目录,以免docker重启后丢失。
    • 安装sdk版本时注意,要和项目里build.gradle文件要求的版本一致。
例如 compileSdkVersion 24
          buildToolsVersion '25.0.0'
    • jenkins是在容器里,没有/etc/profile文件,无法通过修改文件生效环境变量。若是通过export命令生效环境变量,重启jenkins就丢失。最后,通过把设置环境变量命令放到具体jenkins项目的shell脚本里执行。(该环境变量也仅在该shell窗口内有效)


    例如:export ANDROID_HOME=/var/jenkins_home/android-sdk-linux
           

    export GRADLE_HOME=/var/jenkins_home/gradle-3.3
           

    export PATH=$PATH:/var/jenkins_home/gradle-3.3/bin

    • gradle编译执行提示jvm内存不够,百度又说是内存分配的问题,于是在gradle.properties里加上

    
org.gradle.daemon=true


    org.gradle.parallel=true

    
org.gradle.jvmargs=-Xmx4096m


    -XX:MaxPermSize=2048m


    开始是成功了,几次之后开始又失败。加大分配内存一样失败,拖的jenkins容器重启。


    看了gradle官网,说持续集成环境不要使用线程保护。

    尝试把以上配置改成:


    org.gradle.daemon=false

    
org.gradle.parallel=true


    #org.gradle.jvmargs=-Xmx4608m

    
#-XX:MaxPermSize=2048m

    
android.useDeprecatedNdk=true


    提示Gradle build daemon disappeared unexpectedly (it may have been killed or may have crashed)
怀疑配置文件没生效,

    把编译命令加上—no-daemon 编译成功。

    ================================================================

    四、提取构建的apk
    [Jenkins]—[构建后操作]—[Archive the artifacts]模块。 
指定路径文件即可
例如:XXX/build/outputs/apk/*.apk
    五、集成火线静态扫描
    把火线官网的jar包下载下来,放到jenkins可读到的目录
    [jenkins]— [构建]—[execute shell]里加上扫描命令即可。
-s指定扫描目录,-n指定报告名称, -r指定存放位置


    例如:java  -jar XXXX/fireline.jar   -s=${WORKSPACE}/XXX   -n=android_test_${BUILD_NUMBER}   -r=${WORKSPACE}/report
    六、发布扫描报告
    [Jenkins]—[构建后操作]—[Publish HTML reports]模块。
指定报告所在路径即可。
    ⚠️ 由于火线报告使用了JavaScript,这里需要设置jenkins允许脚本执行(allow-scripts)。
    解决办法如下:
【jenkins】->【系统管理】->【脚本命令行】,在文本框中输入:
System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")
然后点击运行,重新执行一下build任务即可。

  • 相关阅读:
    Scrapy的架构与原理的理解【转】
    Scrapy框架的命令行详解【转】
    WPF 程序中启动和关闭外部.exe程序
    C++ 二维数组(双重指针作为函数参数)
    C++ 遇见的一些函数
    C++ #pragma 预处理指令
    C++异常处理(Exception Handling)
    C++模板学习随笔
    C++ 数组的地址问题学习随笔
    关于C++几个容易混淆的概念总结
  • 原文地址:https://www.cnblogs.com/huangxiaoying/p/7048530.html
Copyright © 2011-2022 走看看