Android Studio Gradle命令和配置

轉(zhuǎn)載(未找到原始鏈接)
Gradle是一種構(gòu)建工具蔗衡,它拋棄了基于XML的構(gòu)建腳本,取而代之的是采用一種基于Groovy的內(nèi)部領(lǐng)域特定語言,建議可以先熟悉一下Groovy腳本。
在線文檔

Gradle命令:

常用命令:

gradle明明一般是./gradlew +參數(shù)尘颓, gradlew 代表gradle wrapper,意思是gradle的一層包裝晦譬,大家可以理解為在這個(gè)項(xiàng)目本地就封裝了gradle疤苹,即gradle wrapper, 在gradle/wrapper/gralde-wrapper.properties 文件中聲明了它指向的目錄和版本敛腌。只要下載成功即可用grdlew wrapper的命令代替全局的gradle命令卧土。

  • ./gradlew -v 版本號
  • ./gradlew clean 清除app目錄下的build文件夾
  • ./gradlew build 檢查依賴并編譯打包

這里注意的是 ./gradlew build 命令把debugrelease環(huán)境的包都打出來像樊,如果正式發(fā)布只需要打Release的包尤莺,該怎么辦呢,下面介紹一個(gè)很有用的命令 assemble生棍, 如:

  • ./gradlew assembleDebug 編譯并打Debug包
  • ./gradlew assembleRelease 編譯并打Release的包

除此之外颤霎,assemble還可以和productFlavors結(jié)合使用:

  • ./gradlew installReleaseRelease模式打包并安裝
  • ./gradlew uninstallRelease 卸載Release模式包

加入自定義參數(shù):

比如我們想根據(jù)不同的參數(shù)來進(jìn)行不用的編譯配置,可以在./gradlew中加入自定義參數(shù)。
./gradlew assembleDebug -Pcustom=true

就可以在build.gradle中使用下面代碼來判斷:

if (project.hasProperty('custom')){

}

assemble結(jié)合Build Variants來創(chuàng)建task

assemble 還能和Product Flavor 結(jié)合創(chuàng)建新的任務(wù)友酱,其實(shí) assemble 是和 Build Variants 一起結(jié)合使用的晴音,而 Build Variants = Build Type + Product Flavor,舉個(gè)例子大家就明白了: 如果我們想打包 wandoujia 渠道的release版本缔杉,執(zhí)行如下命令就好了:

  • ./gradlew assembleWandoujiaRelease

如果我們只打wandoujia渠道版本锤躁,則:

  • ./gradlew assembleWandoujia

此命令會生成wandoujia渠道的ReleaseDebug版本 同理我想打全部Release版本:

  • ./gradlew assembleRelease

這條命令會把Product Flavor下的所有渠道的Release版本都打出來。 總之或详,assemble
命令創(chuàng)建task有如下用法:

  • assemble<Variant Name>: 允許直接構(gòu)建一個(gè)Variant版本系羞,例如assembleFlavor1Debug。
  • assemble<Build Type Name>: 允許構(gòu)建指定Build Type的所有APK霸琴,例如assembleDebug將會構(gòu)建Flavor1Debug和Flavor2Debug兩個(gè)Variant版本椒振。
  • assemble<Product Flavor Name>: 允許構(gòu)建指定flavor的所有APK,例如assembleFlavor1將會構(gòu)建Flavor1Debug和Flavor1Release兩個(gè)Variant版本梧乘。

Gradle配置:

  • Gradle構(gòu)建腳本 build.gradle
  • Gradle屬性文件 gradle.properties
  • Gradle設(shè)置文件 settings.gradle

build.gradle

先看整個(gè)項(xiàng)目的gradle配置文件:

buildscript {
        buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.3.0'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

內(nèi)容主要包含了兩個(gè)方面:一個(gè)是聲明倉庫的源杠人,這里可以看到是指明的jcenter(), 之前版本則是mavenCentral(),jcenter可以理解成是一個(gè)新的中央遠(yuǎn)程倉庫,兼容maven中心倉庫宋下,而且性能更優(yōu)。
另一個(gè)是聲明了android gradle plugin的版本辑莫,android studio 1.0 正式版必須要求支持gradle plugin 1.0的版本某個(gè)Moudle的gradle配置文件:

buildscript

buildscript {
    repositories {
        maven { url 'http://*********' }
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:1.3.1'
    }
}
  • buildscript{}設(shè)置腳本的運(yùn)行環(huán)境学歧。
    *repositories{}支持java依賴庫管理,用于項(xiàng)目依賴各吨。
  • dependencies{}依賴包的定義枝笨。支持maven/ivy,遠(yuǎn)程揭蜒,本地庫横浑,也支持單文件。如果前面定義了repositories{}maven 庫屉更,則使用maven的依賴庫徙融,使用時(shí)只需要按照用類似于com.android.tools.build:gradle:0.4,gradle 就會自動的往遠(yuǎn)程庫下載相應(yīng)的依賴瑰谜。

apply

//聲明是Android程序
apply plugin: 'com.android.application'

*apply plugin:聲明構(gòu)建的項(xiàng)目類型欺冀。如果是庫的話就加

apply plugin: 'com.android.library'

android

android {
    // 編譯SDK的版本
    compileSdkVersion 22
    // build tools的版本
    buildToolsVersion "23.0.1"

    //aapt配置
    aaptOptions {
        //不用壓縮的文件
        noCompress 'pak', 'dat', 'bin', 'notice'
        //打包時(shí)候要忽略的文件
        ignoreAssetsPattern "!.svn:!.git"
        //分包
        multiDexEnabled true
        //--extra-packages是為資源文件設(shè)置別名:意思是通過該應(yīng)用包名+R,com.android.test1.R和com.android.test2.R都可以訪問到資源
        additionalParameters '--extra-packages', 'com.android.test1','--extra-packages','com.android.test2'
    }

    //默認(rèn)配置
    defaultConfig {
        //應(yīng)用的包名
        applicationId "com.example.heqiang.androiddemo"
        minSdkVersion 21
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
    }

    //編譯配置
    compileOptions {
        // java版本
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }

    //源文件目錄設(shè)置
    sourceSets {
        main {
             //jni lib的位置
             jniLibs.srcDirs = jniLibs.srcDirs << 'src/jniLibs'
             //定義多個(gè)資源文件夾,這種情況下萨脑,兩個(gè)資源文件夾具有相同優(yōu)先級隐轩,即如果一個(gè)資源在兩個(gè)文件夾都聲明了弯汰,合并會報(bào)錯(cuò)纽什。
             res.srcDirs = ['src/main/res', 'src/main/res2']
        }
    }

    //簽名配置
    signingConfigs {
        debug {
            keyAlias 'androiddebugkey'
            keyPassword 'android'
            storeFile file('keystore/debug.keystore')
            storePassword 'android'
        }
    }

    buildTypes {
        //release版本配置
        release {
            debuggable false
            // 是否進(jìn)行混淆
            minifyEnabled true
            //去除沒有用到的資源文件富腊,要求minifyEnabled為true才生效
            shrinkResources true
            // 混淆文件的位置
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
            signingConfig signingConfigs.debug
            //ndk的一些相關(guān)配置常摧,也可以放到defaultConfig里面橡娄。
            //指定要ndk需要兼容的架構(gòu)(這樣其他依賴包里mips,x86,arm-v8之類的so會被過濾掉)
            ndk {
                abiFilter "armeabi"
            }
        }
        //debug版本配置
        debug {
            debuggable true
            // 是否進(jìn)行混淆
            minifyEnabled false
            //去除沒有用到的資源文件,要求minifyEnabled為true才生效
            shrinkResources true
            // 混淆文件的位置
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
            signingConfig signingConfigs.debug
            //ndk的一些相關(guān)配置术吗,也可以放到defaultConfig里面擒滑。
            //指定要ndk需要兼容的架構(gòu)(這樣其他依賴包里mips,x86,arm-v8之類的so會被過濾掉)
            ndk {
                abiFilter "armeabi"
            }
        }
    }
    // lint配置 
    lintOptions {
      //移除lint檢查的error
      abortOnError false
      //禁止掉某些lint檢查
      disable 'NewApi'
    }
}

android{}設(shè)置編譯android項(xiàng)目的參數(shù),構(gòu)建android項(xiàng)目的所有配置都寫在這里称勋。 除了上面寫的胸哥,在android{}塊中可以包含以下直接配置項(xiàng):
*productFlavors{ }產(chǎn)品風(fēng)格配置,ProductFlavor類型

  • testOptions{ }測試配置赡鲜,TestOptions類型
  • dexOptions{ }dex配置空厌,DexOptions類型
  • packagingOptions{ }PackagingOptions類型
    *jacoco{ }JacocoExtension類型。 用于設(shè)定 jacoco版本
  • splits{ }Splits類型银酬。
幾點(diǎn)說明:
  • 文件開頭apply plugin是最新gradle版本的寫法嘲更,以前的寫法是apply plugin: 'android', 如果還是以前的寫法,請改正過來揩瞪。
    *minifyEnabled也是最新的語法赋朦,很早之前是runProguard,這個(gè)也需要更新下。
  • proguardFiles這部分有兩段李破,前一部分代表系統(tǒng)默認(rèn)的android程序的混淆文件宠哄,該文件已經(jīng)包含了基本的混淆聲明,免去了我們很多事嗤攻,這個(gè)文件的目錄在 sdk目錄/tools/proguard/proguard-android.txt , 后一部分是我們項(xiàng)目里的自定義的混淆文件毛嫉,目錄就在 app/proguard-rules.txt
    , 如果你用Studio 1.0創(chuàng)建的新項(xiàng)目默認(rèn)生成的文件名是proguard-rules.pro , 這個(gè)名字沒關(guān)系,在這個(gè)文件里你可以聲明一些第三方依賴的一些混淆規(guī)則妇菱。最終混淆的結(jié)果是這兩部分文件共同作用的承粤。
  • aaptOptions更多介紹 http://blog.csdn.net/heqiangflytosky/article/details/51009123

repositories

repositories {
    flatDir {
        //本地jar依賴包路徑
        dirs '../../../../main/libs'
    }
}

dependencies

dependencies {
        compile files('libs/android-support-v4.jar')
        //在flatDir.dirs下面找依賴的aar
        compile (name:'ui', ext:'aar')
        // 編譯extras目錄下的ShimmerAndroid模塊
        compile project(':extras:ShimmerAndroid')
        // 編譯CommonSDK模塊,但是去掉此模塊中對com.android.support的依賴闯团,防止重復(fù)依賴報(bào)錯(cuò)
        compile (project(':CommonSDK')) { exclude group: "com.android.support" }
        provided fileTree(dir: 'src/android5/libs', include: ['*.jar'])
        provided 'com.android.support:support-v4:21.0.3'
        provided project(':main-host')
}

  • compile和provided
    compile表示編譯時(shí)提供并打包進(jìn)apk辛臊。
    provided表示只在編譯時(shí)提供,不打包進(jìn)apk房交。
  • exclude防止重復(fù)依賴
  • include

CommonSDK模塊的定義可以參考settings.gradle其他的介紹可以參考 依賴庫管理彻舰。

幾點(diǎn)說明

  • 看到上面的兩個(gè)一模一樣的repositories和dependencies了嗎?他們的作用是不一樣的候味,在buildscript里面的那個(gè)是插件初始化環(huán)境用的淹遵,用于設(shè)定插件的下載倉庫,而外面的這個(gè)是設(shè)定工程依賴的一些模塊和遠(yuǎn)程library的下載倉庫的负溪。

settings.gradle

這個(gè)文件是全局的項(xiàng)目配置文件透揣,里面主要聲明一些需要加入gradle的module。 一般在setting.gradle中主要是調(diào)用include方法川抡,導(dǎo)入工程下的各個(gè)子模塊辐真。 那我們在setting.gradle
里面還能寫什么呢须尚?因?yàn)閟etting.gradle對應(yīng)的是gradle中的Settings
對象,那查下Settings的文檔(https://docs.gradle.org/current/dsl/org.gradle.api.initialization.Settings.html)侍咱,看下它都有哪些方法耐床,哪些屬性,就知道在setting.gradle能寫什么了楔脯;

include ':AndroidDemo'

include ':CommonSDK'
project(':CommonSDK').projectDir = new File(settingsDir, '../../CommonSDK/')

include調(diào)用后撩轰,生成了一個(gè)名為:CommonSDK的Project對象,project(':CommonSDK')
取出這個(gè)對象昧廷,設(shè)置Project的 projectDir屬性堪嫂。projectDir哪里來的?請看Project
類的文檔木柬。

依賴庫管理

本地依賴

dependencies {
    //單文件依賴
        compile files('libs/android-support-v4.jar')
    //某個(gè)文件夾下面全部依賴
        compile fileTree(dir: 'src/android6/libs', include: ['*.jar'])
        compile (name:'ui', ext:'aar')
    compile (project(':CommonSDK')) { exclude group: "com.android.support" }
        provided fileTree(dir: 'src/android5/libs', include: ['*.jar'])
        provided 'com.android.support:support-v4:21.0.3'
        provided project(':main-host')
}

遠(yuǎn)程依賴

gradle同時(shí)支持maven皆串,ivy,以maven作為例子:

repositories { 
 //從中央庫里面獲取依賴
 mavenCentral() 
 //或者使用指定的本地maven 庫
 maven{ 
  url "file://F:/githubrepo/releases" 
 }
 //或者使用指定的遠(yuǎn)程maven庫
 maven{ 
  url "https://github.com/youxiachai/youxiachai-mvn-repo/raw/master/releases" 
 } 
} 

dependencies { 
 //應(yīng)用格式: packageName:artifactId:version 
 compile 'com.google.android:support-v4:r13' 
}

項(xiàng)目依賴

對于項(xiàng)目依賴android library的話眉枕,在這里需要使用gradle mulit project機(jī)制恶复。Mulit project設(shè)置是gradle約定的一種格式,如果需要編譯某個(gè)項(xiàng)目之前速挑,要先編譯另外一個(gè)項(xiàng)目的時(shí)候谤牡,就需要用到。結(jié)構(gòu)如下(來自于官方文檔):

MyProject/ 
| settings.gradle 
 + app/ 
| build.gradle 
 + libraries/ 
  + lib1/ 
   | build.gradle 
  + lib2/ 
   | build.gradle

需要在workplace目錄下面創(chuàng)建settings.gradle 的文件姥宝,然后在里面寫上:
include ':app', ':libraries:lib1', ':libraries:lib2'

例如:

include ':AndroidDemo'

include ':CommonSDK'
project(':CommonSDK').projectDir = new File(settingsDir, '../../CommonSDK/')

如此拓哟,gradle mutil project就設(shè)置完畢。
對于app project如果需要應(yīng)用libraries目錄下的lib1伶授,只需要在app project的build.gradle文件里的依賴中這么寫:
compile project(':libraries:lib1')

類似前面的
provided project(':main-host')

即可完成,寫完以后可以用gradle AndroidDependencies
可以檢查依賴狀況

多渠道打包:

主要借助

android {
    productFlavors{
    ……
    }
}

來實(shí)現(xiàn)流纹。
網(wǎng)上多是類似友盟的配置糜烹,copy過來:
http://blog.csdn.net/maosidiaoxian/article/details/42000913
https://segmentfault.com/a/1190000004050697
在AndroidManifest.xml里面寫上:

<meta-data
    android:name="UMENG_CHANNEL"
    android:value="Channel_ID" />

里面的Channel_ID就是渠道標(biāo)示。我們的目標(biāo)就是在編譯的時(shí)候這個(gè)值能夠自動變化漱凝。

android {  
    productFlavors {
        xiaomi {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
        }
        _360 {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "_360"]
        }
        baidu {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"]
        }
        wandoujia {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
        }
    }  
}

或者批量修改

android {  
    productFlavors {
        xiaomi {}
        _360 {}
        baidu {}
        wandoujia {}
    }  

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

然后用 ./gradlew assembleRelease 這條命令會把Product Flavor下的所有渠道的Release版本都打出來疮蹦。 assemble<Product Flavor Name>: 允許構(gòu)建指定flavor的所有APK,例如assembleFlavor1將會構(gòu)建Flavor1Debug和Flavor1Release兩個(gè)Variant版本茸炒。
在上面當(dāng)中愕乎,我們也可以指定一個(gè)默認(rèn)的渠道名,如果需要的話壁公。指定默認(rèn)的值是在defaultConfig
節(jié)點(diǎn)當(dāng)中添加如下內(nèi)容:
manifestPlaceholders = [ CHANNEL_NAME:"Unspecified"]

這里的 Unspecified換成你實(shí)際上的默認(rèn)的渠道名感论。 使用manifestPlaceholders的這種配置,同樣適用于manifest的其他配置紊册。比如你需要在不同渠道發(fā)布的apk里面比肄,指定不同的啟動Activity
。比如在豌豆莢里面發(fā)布的,啟動的Activity顯示的是豌豆莢首發(fā)的界面芳绩,應(yīng)用寶里面啟動的是應(yīng)用寶首發(fā)的界面(哈哈掀亥,有點(diǎn)壞),你就可以對你的activity的值使用 {activity_name}的方式妥色,然后在productFlavors里面配置這個(gè){activity_name}的值搪花。

Gradle依賴的統(tǒng)一管理

我們可以在項(xiàng)目的根目錄創(chuàng)建一個(gè)gradle配置文件config.gradle,內(nèi)容如下:

ext{
    android=[
            compileSdkVersion: 22,
            buildToolsVersion: "23.0.1",
            minSdkVersion: 21,
            targetSdkVersion: 22,
            versionCode: 1,
            versionName: "1.0"
    ]
    dependencies=[
            compile:'com.android.support:support-v4:21.0.3',
            compile: (project(':CommonSDK')) { exclude group: "com.android.support" },
            provided: fileTree(dir: 'src/android5/libs', include: ['*.jar']),
            provided: project(':main-host')
    ]
}

targetSdkVersion的版本還有依賴庫的版本升級都在這里進(jìn)行統(tǒng)一管理嘹害,所有的 module 以及主項(xiàng)目都從這里同意讀取就可以了撮竿。 在build.gradle文件中加入:
apply from:"config.gradle"
意思是所有的子項(xiàng)目或者所有的modules都可以從這個(gè)配置文件中讀取內(nèi)容。 android節(jié)點(diǎn)讀取ext中android對應(yīng)項(xiàng)吼拥,dependencies讀取dependencies對應(yīng)項(xiàng)倚聚,如果配置有變化就可以只在config.gradle中修改,是不是很方便進(jìn)行配置的管理的凿可。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末惑折,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子枯跑,更是在濱河造成了極大的恐慌惨驶,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件敛助,死亡現(xiàn)場離奇詭異粗卜,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)纳击,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進(jìn)店門续扔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人焕数,你說我怎么就攤上這事纱昧。” “怎么了堡赔?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵识脆,是天一觀的道長。 經(jīng)常有香客問我善已,道長灼捂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任换团,我火速辦了婚禮悉稠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘艘包。我一直安慰自己偎球,他們只是感情好洒扎,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著衰絮,像睡著了一般袍冷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上猫牡,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天胡诗,我揣著相機(jī)與錄音,去河邊找鬼淌友。 笑死煌恢,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的震庭。 我是一名探鬼主播瑰抵,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼器联!你這毒婦竟也來了二汛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤拨拓,失蹤者是張志新(化名)和其女友劉穎肴颊,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體渣磷,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡婿着,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了醋界。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片竟宋。...
    茶點(diǎn)故事閱讀 40,090評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖形纺,靈堂內(nèi)的尸體忽然破棺而出丘侠,到底是詐尸還是另有隱情,我是刑警寧澤挡篓,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站帚称,受9級特大地震影響官研,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜闯睹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一戏羽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧楼吃,春花似錦始花、人聲如沸妄讯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽亥贸。三九已至,卻和暖如春浇垦,著一層夾襖步出監(jiān)牢的瞬間炕置,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工男韧, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留朴摊,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓此虑,卻偏偏與公主長得像甚纲,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子朦前,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,163評論 25 707
  • 轉(zhuǎn)至:http://blog.csdn.net/heqiangflytosky/article/details/5...
    kkgo閱讀 2,880評論 0 1
  • 1.介紹 如果你正在查閱build.gradle文件的所有可選項(xiàng)介杆,請點(diǎn)擊這里進(jìn)行查閱:DSL參考 1.1新構(gòu)建系統(tǒng)...
    Chuckiefan閱讀 12,135評論 8 72
  • 轉(zhuǎn)載注明出處:http://www.reibang.com/p/5255b100930e 0. 前言 完全由個(gè)人翻...
    王三的貓阿德閱讀 2,520評論 0 4
  • 伴隨著他的成長,越來越感覺到身上有一種神圣的責(zé)任感况既。從男孩到男人这溅,一步步蛻變的過程不就是越來越有責(zé)任和擔(dān)當(dāng)嗎。我的...
    孤山老人閱讀 235評論 0 3