Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android開發之Jenkins+Gradle實現持續集成、apk多渠道打包

Android開發之Jenkins+Gradle實現持續集成、apk多渠道打包

編輯:關於Android編程

前言:

  首先很高興大家來閱讀王某人這篇文章,我干肯定大部分公司的發版流程是這樣的,android程序員小李打出各渠道包,發給運維小胡,小胡將個渠道包上傳各大應用市場,就這樣送審了。。。

我們反過來想一想,程序員小李的工作有意義嗎,首先肯定耽誤它手頭的工作吧,對於公司來說程序員的時間就是金錢,還有如果哪一天程序員小李腦子發熱了,忘記改debug參數了,忘記改versioncode值了,這些後果誰來承擔呢?

不要怕,下面我們就來認識下今天得主人公,Jenkins+Gradle;

 

Jenkins簡介

Jenkins是一個開源項目,提供了一種易於使用的持續集成系統,使開發者從繁雜的集成中解脫出來,專注於更為重要的業務邏輯實現上。同時Jenkins能實現監控集成中存在的錯誤,提供詳細的日志文件和提醒功能,還能用圖表的形式形象地展示項目構建的趨勢和穩定性。Jenkins的前身是Hudson,是一個可擴展的持續集成引擎。

 

Jenkins安裝與配置

下載地址

http://mirrors.jenkins-ci.org/war/latest/jenkins.war

安裝

將下載的jenkins.war包直接放到tomcat下的webapps目錄下,然後啟動tomcat即可安裝完成,接下來登錄:http://localhost:8080/jenkins就能進入jenkins系統頁面,在此不說tomcat如何配置環境變量。

編碼問題

當你進入jenkins系統管理頁面,會出現如圖提示,可修改tomcat的server.xml配置,在Connector 標簽添加上URIEncoding=”UTF-8”。

這裡寫圖片描述這裡寫圖片描述

 

配置

 

點擊“系統管理” –> “Configure Global Security”這裡寫圖片描述

 

這裡寫圖片描述

 

首先先添加一個administer用戶作為超級管理員,全部權限都打勾,如圖admin用戶。保存,重啟。用剛剛添加的超級管理員作為賬號名注冊一個賬號,即可擁有超級管理員權限。

這裡寫圖片描述

JDK、Gradle如果系統環境變量配置好的話就不用再配置,用默認的就行。

郵件通知

點擊“系統管理”–> “系統設置”

這裡寫圖片描述

Jenkins Gradle插件安裝

 

點擊“系統管理”–> “管理插件” –> “可選插件” 選中Gradle plugin插件安裝重啟即可。

 

這裡寫圖片描述

 

這裡寫圖片描述

這裡寫圖片描述

 

Jenkins新建任務

 

點擊“新建”

這裡寫圖片描述

 

選擇“源碼系統”

 

這裡寫圖片描述

RepositZ喎?/kf/ware/vc/" target="_blank" class="keylink">vcnkgVVJMo7ogc3ZuILXEILXEtdjWt6OsyOe5+8rkyOu1xLXY1rfQ6NKqyuTI69PDu6fD+7rNw9zC66OsvavX1LavzPiz9rrsyau1xMzhyr7Qxc+iLLXju/cmcmRxdW87ZW50ZXIgY3JlZGVudGlhbCZyZHF1bzsgvfjI68no1sNzdm4g08O7p8P7oaM8L3A+DQo8ZGl2Pteio7og1eLA77XEc3ZutdjWt7K7xNzKudPD0/LD+6Os0qrTw8q1vMpJUKOs0qqyu8i7u+HSu9axytrIqLK7zai5/aO7PC9kaXY+DQo8ZGl2PiZuYnNwOzwvZGl2Pg0KPGgyPtGh1PEmbGRxdW87ubm9qLSlt6LG9yZyZHF1bzs8L2gyPg0KPGRpdj4mbmJzcDs8L2Rpdj4NCjxkaXY+wLS1vcHL1eLSu7K9o6zKtcr0srvS16Os1eLA777NysfO0sPHtcTM7MzDo6y+zcTczeqzySZsZHF1bzvDv7Wxc3Zuyc/P7sS/sOaxvrj8uMS686OsztK+zdfUtq+5ub2oo6zIu7rzxdzSu7TOtaXUqrLiytSjrLWxyLvSsr/J0tS4xLPJw7/M7NK7tM678tXfw7/Qocqx0ru0zsC0vOC/2HN2bsnPz+7Ev7Dmsb64/LjEx+m/9qGjJnJkcXVvOzwvZGl2Pg0KPGRpdj4mbmJzcDs8L2Rpdj4NCjxwPjxpbWcgYWx0PQ=="這裡寫圖片描述" src="/uploadfile/Collfiles/20160525/20160525091706498.jpg" title="\" />

    Build periodically:周期進行項目構建(它不關心源碼是否發生變化) Poll SCM:定時檢查源碼變更(根據SCM軟件的版本號),如果有更新就checkout最新code下來,然後執行構建動作,這裡我選擇它。  

選擇“日程表”

 

這裡寫圖片描述

第一個參數代表的是分鐘 minute,取值 0~59;
第二個參數代表的是小時 hour,取值 0~23;
第三個參數代表的是天 day,取值 1~31;
第四個參數代表的是月 month,取值 1~12;
第五個參數代表的是星期 week,取值 0~7,0 和 7 都是表示星期天。
如H/5 * * * * 表示的就是每5分鐘檢查一次源碼變化。  

選擇 “構建”,添加“Invoke Gradle script”

 

這裡寫圖片描述這裡寫圖片描述

 

這裡寫圖片描述

Switches :即gradle 後面所接的命令。上面相當於執行gradle clean build命令。

 

構建後操作:構建失敗可以發送郵件通知

 


這裡寫圖片描述

 

這裡寫圖片描述

gradle 介紹

簡介

Gradle 是以 Groovy 語言為基礎,面向Java應用為主.基於DSL(領域特定語言)語法的自動化構建工具。現在已是android的默認構建工具了。

Gradle環境變量配置

從官網下載gradle-**.zip解壓到本地,設置環境變量GRADLE_HOME,將%GRADLE_HOME%\bin加入到Path中即可。

從官網下載gradle-1.0-all.zip解壓到本地,設置環境變量GRADLE_HOME,將%GRADLE_HOME%\bin加入到Path中即可。

進入cmd,輸入 gradle -version看到如下界面,說明配置成功

 

androidbuild.gradle配置

 
apply plugin: 'com.android.application'

def releaseTime() {
  return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("GMT+08:00"))
}

android {
  compileSdkVersion 23
  buildToolsVersion '23.0.3'

  dataBinding {
    enabled = true
  }

  defaultConfig {
    applicationId "com.walid.mizar"
    testInstrumentationRunner "com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner"
    /* Android 4.0 */
    minSdkVersion 14
    targetSdkVersion 23
    multiDexEnabled true
    versionCode 20
    versionName "1.3.0"
  }
  lintOptions {
    checkReleaseBuilds false
    abortOnError false
  }
  packagingOptions {
    exclude 'AndroidManifest.xml'
    exclude 'META-INF/LICENSE.txt'
    exclude 'META-INF/NOTICE.txt'
    exclude 'pom.properties'
  }
  signingConfigs {
    release {
      storeFile file('xiaobai.keystore')
      storePassword 'xiaobai0824'
      keyAlias 'xiaobai'
      keyPassword 'xiaobai0824'
    }
  }

  buildTypes {
    release {
      signingConfig signingConfigs.release
      jniDebuggable false
      debuggable false
      //代碼混淆開關,一定要注意現在已經使用minifyEnabled代替runProguard了
      minifyEnabled false
      shrinkResources true
      zipAlignEnabled true
      shrinkResources false
      proguardFile 'proguard-project.txt'
      applicationVariants.all { variant ->
        variant.outputs.each { output ->
          def apk = output.outputFile
          if (apk != null && apk.name.endsWith('.apk')) {
            def fileName = "kangxiaobai_v${defaultConfig.versionName}_${releaseTime()}_${variant.productFlavors[0].name}.apk"
            output.outputFile = new File(apk.parent + "/package", fileName)
          }
        }
      }
    }
  }

  // 友盟多渠道打包
  productFlavors {
    Official {}
    SanLiuLing {}
    HuaWei {}
    Baidu {}
    NineOneMarket {}
    AnzhuoShiChang {}
    YingYongBao {}
    WanDouJia {}
    Xiaomi {}
    MeiZu {}
    LeShangdian {}
    Anzhi {}
    TaoBao {}
    ZhongYiDong {}
    Others {}
  }

  productFlavors.all { flavor ->
    flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
  }

  dexOptions {
    incremental false
    preDexLibraries = false
    jumboMode = false
    javaMaxHeapSize "4g"
  }
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_7
    targetCompatibility JavaVersion.VERSION_1_7
  }
}

dependencies {
  compile fileTree(dir: 'libs', include: ['*.jar'])
}

問題介紹:

 

在Jenkins中利用Gradle編譯項目時,可能會出現以下錯誤

 

Could not load Logmanager "org.apache.juli.ClassLoaderLogManager"  
 
java.lang.ClassNotFoundException: org.apache.juli.ClassLoaderLogManager  
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217)  
    at java.security.AccessController.doPrivileged(Native Method)  
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)  

 

原因 :

Jenkins的Gradle Plugin拷貝所有Tomcat的環境變量到Gradle的JVM中,因此Gradle在使用JAVA_OPTS作為合法參數時可能機會有下面這些問題

解決辦法:

打開Tomcat bin目錄下catalina.bat,注銷下面代碼:

  1. set"JAVA_OPTS=%JAVA_OPTS%%LOGGING_MANAGER%"
  2. set"JAVA_OPTS=%JAVA_OPTS%%LOGGING_CONFIG%"  

    環境變量配置問題

     
    Failed to notify ProjectEvaluationListener.afterEvaluate(), but primary configuration failure takes precedence.
    java.lang.RuntimeException: SDK location not found. Define location with sdk.dir in the local.properties file or with an ANDROID_HOME environment variable.

    原因:


    沒有找到ANDROID_HOME的環境變量

     

    解決辦法:


    1.Go to Jenkins > Manage Jenkins > Configure System
    2.Check “Environment variables”
    3.add name: ANDROID_HOME, value -> your android sdk dir
    4.click “add”
    5.SCROLL DOWN CLICK SAVE

    如果你忘記了你admin的密碼

      jenkins admin用戶密碼存在文件:

    C:\Users\admin\.jenkins\secrets\initialAdminPassword

svn路徑帶域名授權問題

error : https://code.text.cn/sourcecode/android/mizar/branches/xiaobai-mizar-1.3.0.0 right : https://120.00.00.00/sourcecode/android/mizar/branches/xiaobai-mizar-1.3.0.0

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved