Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android 之Gradle1教程

Android 之Gradle1教程

編輯:關於Android編程

一、什麼是Gradle

Gradle是一個工具,同時它也是一個編程框架.。可以調用Gradle自帶的api編譯我們的android工程,打包成apk或aar,也可以在.gradle文件中使用Groovy語言進行邏輯編程。我們在android工程中使用的每個.gradle文件 和task執行時都會轉換成一個個的java對象,運行在java虛擬機上。其中主要的有Gradle對象、Project對象和Settings對象。

二、實踐

後面我們通過配置和創建屬性文件實現以下幾個任務:

1、實現多渠道打包

2、通過文件方式配置版本號 及版本名等信息

3、通過文件方式配置簽名文件

4、根據不同渠道動態修改程序名稱和包名

5、根據不同渠道生成apk文件名稱及自定義文件輸出路徑

6、根據不同渠道定制專屬頁面

在實現任務之前 先要說幾個基礎知識:

1、聲明變量

Gradle中聲明變量有三種方式 一種是 通過def關鍵字 如 def a =1 ,這種聲明只能在聲明所在的方法中使用相當於臨時變量,原因後面會詳細說下,另一種是 ext關鍵字 如ext.a = 1,這種方式是可以在外部聲明在其中方法中使用的, 類似於我們成員變量,另外還有就是 直接聲明 a =1,這種方式也可以在外部聲明在其中方法中使用,但不能在文件外部調用,其實還有一種方式 和ext 效果一樣,

  1. import groovy.transform.Field;   //必須要先import
  2. @Field x = 1
   這種方式 在我們android開發中基本不會使用   。

 2、定義方法

          定義方法 使用def 關鍵字              如  def printName(name){                          println "hello"+name  //結束沒有 ;                      }             或 def  sayHello(){                     println "hello"                 }  
3、調用方法
調用方法可以用兩種方式    比如  printName("gqs")   也可以  printName "gqs"        下面直接貼   .gradle文件,所有的說明都穿插在代碼中:      
apply plugin: 'com.android.application'

// 默認版本號
ext.appVersionCode = 1
// 默認版本名z
ext.appVersionName = "1.0"
// 默認apk輸出路徑
 ext.appReleaseDir = "../apks"
// 默認正式包後綴名
ext.appSuffixName = "_release.apk"

// 也可以向下面這種方式聲明變量
ext{
    a =1
    b = 2
}
//定義一個方法   獲取當前日期
def getPackageTime() {
//gradle中創建對象 也像java中一樣 通過new 關鍵字實現
    def date = new Date()
    def formattedDate = date.format('yyyy_MM_dd_HHmm')
    return formattedDate
}

// 加載版本信息配置文件方法
def loadProperties() {
//將我們的版本號等信息配置在了local.properties 文件中,這裡的file() 是一個方法,返回一個File對象

//Properties 是一種數據類型,其實是就是繼承自hashtable , 可以解析.properties文件,並以鍵值對方式存儲起來
//public class Properties extends Hashtable


    def proFile = file("../local.properties")
    Properties pro = new Properties()
    proFile.withInputStream { stream->
        pro.load(stream)
    }
//為上面定義的變量賦值
    appReleaseDir = pro.appReleaseDir
    appVersionCode = Integer.valueOf(pro.appVersionCode)
    appVersionName = pro.appVersionName
    appSuffixName = pro.appSuffixName
}



// 調用方法 加載版本信息
loadProperties()

android {
    compileSdkVersion 24
    buildToolsVersion "24.0.0"
    defaultConfig {
        applicationId "com.gqs.demo"
        minSdkVersion 14
        targetSdkVersion 24
        versionCode appVersionCode
        versionName appVersionName
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
// 到這裡就完成了 任務 2 
//signingConfigs 是對簽名文件的配置

    signingConfigs {
        debug {

        }
        release {
            def Properties localProps = new Properties()
//signature.properties 是配置簽名信息的配置文件 後面會貼出來

            localProps.load(new FileInputStream(file('../signature.properties')))
            storeFile file(localProps["STORE_FILE"])
            keyAlias localProps["KEY_ALIAS"]
            storePassword localProps["STORE_PASSWORD"]
            keyPassword localProps["KEY_PASSWORD"]
        }
    }
// 到這裡就完成了 任務 3 通過文件方式配置簽名文件
//buildTypes 對不同的打包類型 進行配置
buildTypes {     release { minifyEnabled true //實現代碼混淆 signingConfig signingConfigs.release //使用的簽名信息 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

           //定義apk的輸出路徑
            applicationVariants.all { variant ->
                variant.outputs.each { output ->
                    //開始輸出,自定義輸出路徑
                    output.outputFile =
                            new File(appReleaseDir + getPackageTime() +//獲取當前日期
                                    "_v" + appVersionName +
                                    variant.productFlavors[0].name +//每一個渠道的名稱
                                    appSuffixName)  //appSuffixName 是我們聲明的文件後綴

                }
            }
// 到這裡 就實現了 任務 5 根據不同渠道生成apk文件名稱及自定義文件輸出路徑
} }

//productFlavors  就是實現不同渠道打包了

    productFlavors {

//對每個渠道 設定特定的包名  也就是applicationId

        rainbow{
           // 都使用默認設置
        }
        xiaomi {
            //設置特定渠道的包名
            applicationId "com.rainbow.xiaomi"
        }

        m360 {
            applicationId "com.rainbow.qihu"

        }



        productFlavors.all { flavor ->
            //動態設置不同渠道的app name
            // AndroidManifest文件中  android:label="${APP_NAME}"
            //使用渠道名稱替換 APP_NAME,使每個渠道都有自己的 app名稱
flavor.manifestPlaceholders = [APP_NAME: name]
} }//這樣 我們就完成了任務 1 和4 ;多渠道打包及根據不同渠道動態修改程序名稱和包名}    


下面是 signature.properties

STORE_FILE=../your key
STORE_PASSWORD=***
KEY_ALIAS=***
KEY_PASSWORD=****
=========================== local.properties
sdk.dir=/Applications/android_tools/android-sdk-macosx

#=====以下是自己定義的內容=====
# 打包的輸出路徑
appReleaseDir=./apks/
# APP版本號,用來升級使用
appVersionCode=2
# APP版本名稱,最終打包使用
appVersionName=1.0.0.2
# app正式版包名後綴
appSuffixName=_release.apk
  最後 實現 任務 6根據不同渠道定制專屬頁面   只要 在我們的 src文件夾下 創建和渠道相同的文件夾 可以了 ,裡面放入我們要修改的布局文件或 values中的文件。   其實默認 我們用的都是 src下 main中的文件 ,如果我們創建了和渠道名稱相同的文件夾 ,gradle 打包的時候 就會從對應到文件夾中取數據了。 \ 不如 我替換了 首頁的布局 ,最後就生成了三個不同的頁面 \\     以上就是所有了,總之 Gradle 是非常強大的,只要你想 ,可以實現你各種需求,當然對於android 開發終歸只是輔助工具,不必理解的過於深入,但是熟練掌握基本的使用是必須的,這可以大大的提高我們到開發效率。
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved