Centos上使用Jenkins配合Gradle进行Android APK构建和分发

Centos上使用Jenkins配合Gradle进行Android APK构建和分发

很多时候,测试人员和后台人员需要我们将各个环境APK包发给他们进行测试和调试,但是呢,我们不是时时都能响应他们的需求。此篇博客的目的就是为了解决这种情况,将复杂麻烦的打包简单化,让每个人都能轻松的打出各个环境,各个版本的包。

一 工具安装

JDK安装

Jdk的安装非常重要,Jenkins的安装和Android打包都需要用到。检查是否安装Jdk:java -version,如果已经安装,跳过此步骤。

  1. 在官网下载Jdk文件:jdk-8u131-linux-x64.tar.gz,使用Xftp上传至 /usr/local 目录
  2. 使用XShell 打开 /usr/local 目录,执行解压命令 tar -zxvf jdk-8u131-linux-x64.tar.gz
  3. 使用Xftp打开 /etc/profile 文件,在profile文件最下方追加代码:
    JAVA_HOME=/usr/local/jdk1.8.0_131
    JRE_HOME=/usr/local/jdk1.8.0_131/jre
    PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME
    export JAVA_HOME
    export JRE_HOME
    export PATH
    然后保存。
  4. java -version 检查是否安装成功

Jenkins 安装

  1. 下载源
    wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
    rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key

  2. yum安装
    yum install jenkins

  3. 配置Jenkins的Java运行环境
    使用 Xftp打开 /etc/init.d/jenkins 找到/usr/bin/java那一行,在底下加入如下代码:/usr/local/jdk1.8.0_131/bin/java

  4. 修改端口
    Jenkins的默认端口为8080,而Tomcat的默认端口也是8080,所以我们需要修改Jenkins的端口,使用 Xftp打开 /etc/sysconfig/jenkins 文件,找到 JENKINS_PORT=“8080” 修改为 JENKINS_PORT=“9000”。

  5. 启动Jenkisn
    service jenkins start

  6. 测试Jenkins
    在浏览器中输入:服务器地址+:9000/,会出现Jenkins的初始页面。

  7. 修改Jenkins工作空间参考
    https://blog.csdn.net/u014221090/article/details/80566434

Android SDK 安装

  1. 下载sdk-tools-linux-4333796.zip
    用Xshell打开你想存放sdk的目录,执行代码:wget https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip
  2. 解压sdk-tools-linux-4333796.zip
    在上个步骤的目录,执行代码:unzip sdk-tools-linux-4333796.zip
  3. 配置android环境变量
    使用 Xftp打开 /etc/profile 文件,在最后添加代码:export ANDROID_HOME="/opt/frank/android/android-sdk-linux" export PATH="$ANDROID_HOME/tools:$ANDROID_HOME/tools/bin:$ANDROID_HOME/platform-tools:$PATH" 然后保存。
  4. 查看已安装工具和可安装工具
    执行代码:sdkmanager --list
  5. 使用sdkmanager相关命令安装build-tools, platforms, build-tools
    执行代码:sdkmanager "platforms;android-25" "build-tools;25.0.2" 其他版本类似。

Git安装

  1. 查看是否安装git,执行代码:git --version
  2. 出现git版本信息,执行代码:whereis git,查看安装目录
  3. 未出现git版本信息,执行命令: yum install git
  4. 执行命令:git --version 查看是否安装成功
  5. 执行命令: whereis git 查看安装目录

Gradle安装

  1. 下载你想要的Gradle版本代替4.1
    用Xshell打开你想存放Gradle的目录,执行命令:wget https://downloads.gradle.org/distributions/gradle-4.1-all.zip
  2. 解压Gradle
    在上述存放目录,执行命令:unzip gradle-4.1-all.zip
  3. 配置Gradle环境变量
    使用 Xftp打开 /etc/profile 文件,在最后添加如下代码,然后保存。
    export GRADLE_HOME=/usr/local/gradle-4.1
    export PATH=$GRADLE_HOME/bin:$PATH
  4. 检验是否配置成功
    执行命令:gradle -version

二 全局配置

Jenkins配置

初始化

  1. 在浏览器输入你的服务器地址和加端口号,会出现下图Jenkins的初始页面:
    Centos上使用Jenkins配合Gradle进行Android APK构建和分发_第1张图片
  2. 按照提示使用 Xftp 打开相应文件(路径地址可能不一样,和Jenkins安装位置有关)复制密码,输入密码,出现如下页面:
    Centos上使用Jenkins配合Gradle进行Android APK构建和分发_第2张图片
  3. 选择左侧建议安装的插件,出现如下页面:
    Centos上使用Jenkins配合Gradle进行Android APK构建和分发_第3张图片
  4. 下一步,进入如下创建Admin用户界面:
    Centos上使用Jenkins配合Gradle进行Android APK构建和分发_第4张图片
  5. 保存后,进入如下页面,点击 Start using Jenkins,Jenkins初始化完成。
    Centos上使用Jenkins配合Gradle进行Android APK构建和分发_第5张图片

Android打包配置

  1. 插件配置
    点击系统管理,点击插件管理,点击Available,如下图:
    在这里插入图片描述
    搜索插件:Git,Git Parameter,Gradle,Branch API,SSH,build-name-setter,description setter,user build vars,OWASP Markup Formatter ,Email Extension。点击 install without restart 依次安装。
    点击系统管理,点击全局安全配置,如下图配置:
    在这里插入图片描述
  2. 全局环境配置
    点击系统管理,点击全局工具配置(Global Tool Configuration),如下图:
    Centos上使用Jenkins配合Gradle进行Android APK构建和分发_第6张图片
    点击ADD JDK(不要勾选自动安装),Name自定义,JAVA_HOME配置服务器的Jdk路径。按此步骤依次配置Git,Gradle,我的配置如下:
    Centos上使用Jenkins配合Gradle进行Android APK构建和分发_第7张图片
  3. Android环境配置
    点击系统管理,点击系统设置,点击 Global properties,如下图:
    Centos上使用Jenkins配合Gradle进行Android APK构建和分发_第8张图片
    勾选环境变量,Name填入 ANDROID_HOME,Value填入 服务器AndroidSDK位置。

三 项目配置

构建项目

新建项目

点击系统管理,点击 New 任务,进入如下页面:
Centos上使用Jenkins配合Gradle进行Android APK构建和分发_第9张图片
选择 构建一个自由风格的软件项目 ,然后点击OK。

参数化构建配置

  1. 构建参数配置
    Centos上使用Jenkins配合Gradle进行Android APK构建和分发_第10张图片
    Centos上使用Jenkins配合Gradle进行Android APK构建和分发_第11张图片
    Centos上使用Jenkins配合Gradle进行Android APK构建和分发_第12张图片
    Centos上使用Jenkins配合Gradle进行Android APK构建和分发_第13张图片
    Centos上使用Jenkins配合Gradle进行Android APK构建和分发_第14张图片

  2. 源码地址配置
    Centos上使用Jenkins配合Gradle进行Android APK构建和分发_第15张图片
    这里需要注意的是 最好采用 https的URL方式 ,点击Add如下图添加验证,username 和 password 就是代码保管网站的账号和密码,例如我用的是 coding。
    Centos上使用Jenkins配合Gradle进行Android APK构建和分发_第16张图片

  3. Gradle配置
    Centos上使用Jenkins配合Gradle进行Android APK构建和分发_第17张图片

  4. Android项目配置:
    gradle.properties 配置如下:
    Centos上使用Jenkins配合Gradle进行Android APK构建和分发_第18张图片
    build.gradle文件配置如下

apply plugin: 'com.android.application'
apply plugin: 'com.jakewharton.butterknife'


static def getDate() {
    def date = new Date()
    def formattedDate = date.format('yyyy-MM-dd-HH-mm')
    return formattedDate
}


android {

    defaultConfig {
        applicationId "com.doutu.tutuenglish"
        minSdkVersion rootProject.ext.android.minSdkVersion
        targetSdkVersion rootProject.ext.android.targetSdkVersion
        versionCode 2
        versionName APP_VERSION

        /**
         * 启用multiDex支持 解决方法数 超过 64k 的问题
         */
        multiDexEnabled true

        /**
         * 支持背景模糊
         */
        renderscriptTargetApi 25
        renderscriptSupportModeEnabled true

        ndk {
            //设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so)
            abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86", "arm64-v8a", "x86_64"
        }

    }

    signingConfigs {//签名的配置
        sign {
            storeFile file('../tutu.jks')
            storePassword STORE_PASSWORD
            keyAlias 'tutuenglish'
            keyPassword ALIAS_PASSWORD
        }
    }


    buildTypes {
        debug {

            /***
             * 自定义字段【true:测试地址 false:线上地址】
             */
            buildConfigField "boolean", "IS_TEST", "true"
            /***
             * 自定义字段【true: Jenkins 打包 false: AS 打包】
             */
            buildConfigField "boolean", "IS_JENKINS", "${IS_JENKINS}"

            minifyEnabled false
            signingConfig signingConfigs.sign

            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        release {
            
            /***
             * 自定义字段【true:测试地址 false:线上地址】
             */
            buildConfigField "boolean", "IS_TEST", "false"
            /***
             * 自定义字段【true: Jenkins 打包 false: AS 打包】
             */
            buildConfigField "boolean", "IS_JENKINS", "${IS_JENKINS}"

            /***
             * 代码混淆
             */
            minifyEnabled false
            /***
             * zipalign优化
             */
            zipAlignEnabled true
            /**
             * 移除无用的resource文件
             */
            shrinkResources false

            signingConfig signingConfigs.sign

            /*加载默认混淆配置文件*/
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    /*修改生成的apk名字*/
    android.applicationVariants.all { variant ->
        variant.outputs.all { output ->
            def newName
            def timeNow = getDate().substring(5) // 去掉年


            if ("true" == IS_JENKINS) {

                if (variant.buildType.name == 'debug') {
                    newName = "tutuenglish-v${APP_VERSION}-debug.apk"
                } else {
                    newName = "tutuenglish-v${APP_VERSION}-release.apk"
                }

            } else {

                newName = "tutuenglish-v${APP_VERSION}-${timeNow}-" + variant.buildType.name + ".apk"

            }

            // jenkins打包时修改输出路径保存所有打包记录

            if ("true" == IS_JENKINS) {
                // 修改输出路径
                if ('debug' == variant.buildType.name) {
                    variant.getPackageApplication().outputDirectory = new File(project.rootDir.absolutePath + "/apk/debug/")
                } else {
                    variant.getPackageApplication().outputDirectory = new File(project.rootDir.absolutePath + "/apk/release/")
                }
            }

            outputFileName = newName

        }
    }


    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    lintOptions {
        abortOnError false
        checkReleaseBuilds false
    }

    compileSdkVersion 27
}

四 项目构建

打包

完成上面的配置后,我们就可以使用基本的动态入参打包了。点击 Build with Parameters 选项,页面如下:
Centos上使用Jenkins配合Gradle进行Android APK构建和分发_第19张图片
这里的每个选项都对应了开始的构建参数配置,很简单,我就不解释了。点击 Build 开始构建。
构建历史会出现下图:

Centos上使用Jenkins配合Gradle进行Android APK构建和分发_第20张图片
点击进度条,进入下图页面:
Centos上使用Jenkins配合Gradle进行Android APK构建和分发_第21张图片
然后点击 Console Output 进入控制台:
Centos上使用Jenkins配合Gradle进行Android APK构建和分发_第22张图片
Centos上使用Jenkins配合Gradle进行Android APK构建和分发_第23张图片
到这里已经成功的构建了。

五 构建名称修改和项目分发

修改构建成功后的名称

项目配置中添加以下内容。
Centos上使用Jenkins配合Gradle进行Android APK构建和分发_第24张图片
效果展示:
在这里插入图片描述

构建历史中添加 apk 的下载地址

这个需要和蒲公英配合使用,将应用上传到蒲公英,然后返回应用下载二维码的地址。教程点我。
Jenkins配置如下:
Centos上使用Jenkins配合Gradle进行Android APK构建和分发_第25张图片
效果展示:
上传:
Centos上使用Jenkins配合Gradle进行Android APK构建和分发_第26张图片
构建记录:
Centos上使用Jenkins配合Gradle进行Android APK构建和分发_第27张图片

将构建结果通过邮件进行分发

如果你是土豪,可以不用看这一步,上一步中,上传的蒲公英,蒲公英有自己的应用更新通知方法。花钱就可以享受。因为我是个技术男,所以我拒绝花钱(因为我穷)。所以我使用Jenkins的邮件功能进行结果分发。Jenkins原本的邮件不支持内容的多样性。所以我们需要使用插件Email Extension。
点击系统管理,点击系统设置,找到下图位置:
在这里插入图片描述
在这里插入图片描述
Centos上使用Jenkins配合Gradle进行Android APK构建和分发_第28张图片
接上图:
Centos上使用Jenkins配合Gradle进行Android APK构建和分发_第29张图片
Default Content 模板:





${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志



    
(本邮件是程序自动下发的,请勿回复!)

构建结果 - ${BUILD_STATUS}


构建信息
  • 触发原因:${CAUSE}
  • 应用名称:${appName}
  • 应用包名:${appIdentifier}
  • 版 本  号:${appVersion}
  • 文件大小:${appFileSize}
  • 更新内容:${UPDATE_DESCRIBE}
  • 下载地址:${appPgyerURL}
  • 扫码下载:

Jenkins 自带邮件分发功能设置和测试:
Centos上使用Jenkins配合Gradle进行Android APK构建和分发_第30张图片
如果失败,请检查smtp是否打开和授权是否正确。
项目邮件分发配置:
Centos上使用Jenkins配合Gradle进行Android APK构建和分发_第31张图片
点击高级,接上图
Centos上使用Jenkins配合Gradle进行Android APK构建和分发_第32张图片

效果展示:

Centos上使用Jenkins配合Gradle进行Android APK构建和分发_第33张图片

六 结束

结束语

到这里Jenkins一系列的打包分发已经全部完毕,如果遇到问题,请加我qq 839539179 我为你解答。

你可能感兴趣的:(android进阶)