標籤:
一、環境
1. ubuntu14.04(64位)2. jdk 1.73. ant 1.94. jenkins 1.6065. tomcat 7.0.56. android sdk7. gradle8. nexus9. sonarqube
二、安裝
1. JDK環境變數 vim ~/.bashrc export JAVA_HOME=/usr/local/lib/jvm/jdk1.7.0_60 export JRE_HOME=$JAVA_HOME/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH2. gradle環境變數 http://gradle.org/下載最新的包 vim ~/.bashrc export GRADLE_HOME=/usr/local/lib/gradle2.2 export PATH=$GRADLE_HOME/bin:$PATH3. Jenkins環境變數 http://jenkins-ci.org/下載穩定版本 vim ~/.bashrc export JENKINS_HOME=/home/roy/jenkins_home export PATH=$JENKINS_HOME:$PATH4. android sdk 環境變數 vim ~/.bashrc export ANDROID_HOME=/home/roy/soft/android-sdk export PATH=$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$PATH5. Jenkins外掛程式安裝 gradle plugin sonar plugin6. 因為android sdk的檔案都是在32位的庫裡編譯在,所以在64為的作業系統上無法找打對應的庫,需要安裝 sudo apt-get install lib32stdc++6 sudo apt-get install lib32z1 lib32z1-dev7. nexus安裝配置 http://www.sonatype.org 下載最新的包 1. 解壓 2. 進入bin目錄執行./nexus start命令 3. http://localhost:8081/nexus 介面訪問使用者名稱和密碼是admin/admin1238. sonarqube安裝 http://www.sonarqube.org 下載最新的包 1. 解壓 2. 安裝mysql資料庫 sudo apt-get install mysql-server 建立sonar資料庫和使用者 CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci; CREATE USER ‘sonar‘ IDENTIFIED BY ‘sonar‘; GRANT ALL ON sonar.* TO ‘sonar‘@‘%‘ IDENTIFIED BY ‘sonar‘; GRANT ALL ON sonar.* TO ‘sonar‘@‘localhost‘ IDENTIFIED BY ‘sonar‘; 2. 編輯設定檔conf/sonar.properties 修改mysql資料庫的配置和web連接埠及url的配置 sonar.jdbc.username=sonar sonar.jdbc.password=sonar sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance sonar.web.host=192.168.33.7 sonar.web.context= sonar.web.port=9000 3. sonar-runner配置conf/sonar-runner.properties sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8 sonar.jdbc.username=sonar sonar.jdbc.password=sonar sonar.login=admin sonar.password=jstinno
三、 Jenkins配置
四、工程配置
buildscript{
repositories{
mavenCentral();
}
dependencies{
classpath ‘com.android.tools.build:gradle:0.14+‘
}
tasks.withType(JavaCompile){
options.encoding = ‘UTF-8‘
}
}
apply plugin:‘android‘
dependencies{
compile fileTree(dir: ‘libs‘, include:“*.jar”)
}
android{
applicationVariants.all { variant ->
variant.outputs.each { output -> if(output.outputFile.name.indexOf(‘-debug.apk‘) > -1){ output.outputFile = new File( output.outputFile.parent, output.outputFile.name.replace(".apk", "mirror.apk")) } }
}
signingConfigs{
myConfig{ storeFile file("/home/roy/jenkins_home/jobs/ApkKeyStore") storePassword "android" keyAlias "brilliance" keyPassword "android"}
}
buildTypes{
release{ signingConfig signingConfigs.myConfig}
}
compileSdkVersion 22
buildToolsVersion “22.0.1”
enforceUniquePackageName=false
lintOptions{
abortOnError false
}
sourceSets{
main{ manifest.srcFile ‘AndroidManifest.xml‘ java.srcDirs = [‘src‘] resources.srcDirs = [‘src‘] aidl.srcDirs = [‘src‘] renderscript.srcDirs = [‘src‘] res.srcDirs = [‘res‘] assets.srcDirs = [‘assets‘]}
}
lintOptions{
abortOnError false
}
}
五、build.xml樣本
六、apk自動安裝到手機中
1. 開啟手機開發人員模式(通過單擊設定->關於手機->版本號碼, 連續單擊四次)2. 在開發人員選項中,開啟USB調試和USB調試授權問題處理: 1. adb devices命令, 返回的結果是:
List of devices attached
???????????? no permissions
因為adb server需要以root的許可權啟動
在android-sdk/platform-tools目錄下,執行
$ ./adb kill-server $ sudo ./adb start-server 在手機上選擇Always allow from this computer? adb devices可以看到了
安裝命令 gradle installRelease (gradle iR)
git clone [email protected]:jstinno/apps/CloudFile
git clone [email protected]:jstinno/apps/cloudclient
git clone [email protected]:jstinno/apps/CommonUpgrade
gradle AndroidDependencies 檢查項目依賴關係
gradle clean uploadArchives 打包並上傳到maven倉庫
buildscript{
repositories{
mavenCentral();
}
dependencies{
classpath ‘com.android.tools.build:gradle:0.14+‘
}
tasks.withType(JavaCompile){
options.encoding = ‘UTF-8‘
}
}
apply plugin: ‘android-library‘
apply plugin: ‘maven‘
android{
signingConfigs{
myConfig{ storeFile file("/home/roy/jenkins_home/jobs/ApkKeyStore") storePassword "android" keyAlias "brilliance" keyPassword "android"}
}
buildTypes{
release{ signingConfig signingConfigs.myConfig}
}
compileSdkVersion 22
buildToolsVersion “22.0.1”
sourceSets{
main{ manifest.srcFile ‘AndroidManifest.xml‘ java.srcDirs = [‘src‘] resources.srcDirs = [‘src‘] aidl.srcDirs = [‘src‘] renderscript.srcDirs = [‘src‘] res.srcDirs = [‘res‘] assets.srcDirs = [‘assets‘]}
}
lintOptions{
abortOnError false
}
}
dependencies{
compile fileTree(dir: ‘libs‘, include:“*.jar”)
}
uploadArchives{
repositories.mavenDeployer{
name = ‘mavenCentralReleaseDeployer‘repository(url: "http://192.168.33.25:8081/nexus/content/repositories/releases"){ authentication(userName: ‘admin‘, password: ‘admin123‘)}snapshotRepository(url: "http://192.168.33.25:8081/nexus/content/repositories/snapshots/"){ authentication(userName: ‘admin‘, password: ‘admin123‘)}pom.version = "1.0.0"pom.artifactId = "cloudclient"pom.groupId = "com.cloud"pom.name = "cloudclient"pom.packaging = "aar"
}
}
編譯jar包上傳本地maven倉庫
buildscript{
repositories{
mavenCentral();
}
dependencies{
classpath ‘com.android.tools.build:gradle:0.14+‘
}
tasks.withType(JavaCompile){
options.encoding = ‘UTF-8‘
}
}
apply plugin: ‘android-library‘
apply plugin: ‘maven‘
dependencies{
compile fileTree(dir: ‘libs‘, include:“*.jar”)
}
android{
signingConfigs{
myConfig{ storeFile file("/home/roy/jenkins_home/jobs/ApkKeyStore") storePassword "android" keyAlias "brilliance" keyPassword "android"}
}
buildTypes{
release{ signingConfig signingConfigs.myConfig}
}
compileSdkVersion 22
buildToolsVersion “22.0.1”
sourceSets{
main{ manifest.srcFile ‘AndroidManifest.xml‘ java.srcDirs = [‘src‘] resources.srcDirs = [‘src‘] aidl.srcDirs = [‘src‘] renderscript.srcDirs = [‘src‘] res.srcDirs = [‘res‘] assets.srcDirs = [‘assets‘]}
}
lintOptions{
abortOnError false
}
android.libraryVariants.all { variant ->
def name = variant.buildType.nameif (name.equals(com.android.builder.core.BuilderConstants.DEBUG)) { return; // Skip debug builds.}def task = project.tasks.create "jar${name.capitalize()}", Jartask.dependsOn variant.javaCompiletask.from variant.javaCompile.destinationDirartifacts.add(‘archives‘, task);
}
uploadArchives{
repositories.mavenDeployer{ name = ‘mavenCentralReleaseDeployer‘ repository(url: "http://192.168.33.25:8081/nexus/content/repositories/releases"){ authentication(userName: ‘admin‘, password: ‘admin123‘) } snapshotRepository(url: "http://192.168.33.25:8081/nexus/content/repositories/snapshots/"){ authentication(userName: ‘admin‘, password: ‘admin123‘) } pom.version = "1.0.0" pom.artifactId = "cloudclient" pom.groupId = "com.cloud" pom.name = "cloudclient" pom.packaging = "jar"}
}
}
依賴其他apk的編譯並安裝
buildscript{
repositories{
mavenCentral()
}
dependencies{
classpath ‘com.android.tools.build:gradle:0.14+‘
}
tasks.withType(JavaCompile){
options.encoding = ‘UTF-8‘
}
}
apply plugin:‘android‘
repositories{
maven{
url "http://192.168.33.25:8081/nexus/content/repositories/releases"
}
}
dependencies{
compile fileTree(dir: ‘libs‘, include:“*.jar”)
compile “com.common:upgrade:1.0.0”
compile “com.cloud:cloudclient:1.0.0”
}
android{
applicationVariants.all { variant ->
variant.outputs.each { output -> String apk_name = output.outputFile.name; if(output.outputFile.name.indexOf(‘-debug.apk‘) > -1){ output.outputFile = new File( output.outputFile.parent, output.outputFile.name.replace(".apk", "mirror.apk")) }else if(output.outputFile.name.indexOf(‘-release.apk‘) > -1){ output.outputFile = new File( output.outputFile.parent, output.outputFile.name.replace(apk_name, "CloudFile-release.apk")) }}
}
signingConfigs{
myConfig{ storeFile file("/home/roy/jenkins_home/jobs/ApkKeyStore") storePassword "android" keyAlias "brilliance" keyPassword "android"}
}
buildTypes{
release{ signingConfig signingConfigs.myConfig}
}
compileSdkVersion 22
buildToolsVersion “22.0.1”
enforceUniquePackageName=false
lintOptions{
abortOnError false
}
sourceSets{
main{ manifest.srcFile ‘AndroidManifest.xml‘ java.srcDirs = [‘src‘] resources.srcDirs = [‘src‘] aidl.srcDirs = [‘src‘] renderscript.srcDirs = [‘src‘] res.srcDirs = [‘res‘] assets.srcDirs = [‘assets‘]}
}
lintOptions{
abortOnError false
}
}
Jenkins+Gradle+android+SonarQube