ǰÑÔ
android gradle µÄ²å¼þÖÕÓÚ°Ñ»ìÏý´úÂëµÄtask¼¯³É½øÈ¥ÁË£¬¼ÓÉÏ×î½ü£¬android studio
ÓõÄÊÇgradle À´¹¹½¨ÏîÄ¿£¬ ϶¨¾öÐİÑandroid gralde ¹¹½¨ÏîÄ¿µÄÓû§Ö¸ÄÏÈ«²¿¿´Í꣬
Èò»»áÓÃgradle µÄÈËÒ²ÓÃgradle¹¹½¨androidÏîÄ¿£¬Èôò°ü£¨×¢Ò⣬´ò°üºÍ¹¹½¨ÊÇÁ½ÂëÊ£©¶à°æ±¾android²»ÔÙÍ´¿à¡£×îºó£¬ÌâÍâ»°£ºÕäϧÉúÃü£¬Ô¶Àëant....
Gradle build android ÀúÊ·
Android Tools Ö÷Ò³ £¬´ó¸ÅÊǽñÄê2Ô·ݷ¢²¼ adt21.1 µÄʱºò£¬ºöÈ»ÔÚÖ÷Ò³·¢ÏÖÁËNew
Build System ÔÀ´ÊÇ¿ÉÒÔÓÃgradle À´¹¹½¨androidÏîÄ¿£¬ÖÁÓÚgradleÊÇʲô£¨¼ÈÈ»µã»÷½øÀ´¿´ÁËÓ¦¸Ã¶¼ÖªµÀÁ˰ɡ££©
¡£È»ºó£¬ÓÖ¿´ÁËÒ»ÏÂRoadMap ÄÇʱºò£¬»¹²¢²»Ö§³ÖProguard ´ò°ü£¬ÓÚÊǾÍû¿´ÁË¡£¡£¡£
×î½ü£¬android studio ·¢²¼£¬ÖÕÓÚgradle 0.4 Ò²¸ú×ųöÀ´ÁË£¬ÓÚÊÇ£¬ÏȰÑgradle
ѧÁËÒ»±é£¬È»ºó°ÑGradle Plugin User GuideÒ²ÈÏÕæÔĶÁÁËһϣ¬¸ù¾ÝÎҵĸöÈËÌåÑ飬Èç¹ûÄã¶Ôgradle
ºÁÎÞÁ˽â¾ÍÈ¥¿´Gradle Plugin User Guide ¿ÉÄÜºÜ¶àµØ·½¶¼Ò»Í·ÎíË®£¬µ«ÊDz¢²»·Á°ÄãÓÃgradle
´ò°üandroid Ó¦Óã¬Ö»ÊÇ£¬³öÏÖÎÊÌ⣬Äã¾Í¿ÉÄܺÜÍ·ÌÛ¡£²»¹ý£¬±¾Æª²©ÎľÍÊÇÈò»»ágradle Ò²ÄÜÓÃÉÏ
gradle ´ò°üandroid ³ÌÐò£¬ÒòΪ£¬ÎÒÒ²²»¶®gradle£¬ËùÒÔ£¬ÎÒ°ÑÎÒÅöµ½µÄÎÊÌâµÄ½â¾ö·½°¸¶¼Ò»Ò»Áгö¡£
˳±ãÌùÉϹٷ½ÎªÊ²Ã´Ê¹ÓÃgradle µÄÀíÓÉ:
1.Domain Specific Language (DSL) to
describe and manipulate the build logic
2.Build files are Groovy based and allow
mixing of declarative elements through the DSL and using
code to manipulate the DSL elements to provide custom
logic.
3.Built-in dependency management through
Maven and/or Ivy.
4.Very flexible. Allows using best practices
but doesn¡¯t force its own way of doing things.
5.Plugins can expose their own DSL and
their own API for build files to use.
6.Good Tooling API allowing IDE integration
Gradle »ù±¾¸ÅÄî
Ê×ÏÈÎÒÃÇѧϰ¼¸¸ögradle µÄ½Å²½Óï·¨£¬ÕÆÎÕÁËÕ⼸¸öÓï·¨£¬Äã¾ÍÄܷdz£¼òµ¥µÄÓÃgradle¹¹½¨´ò°üandroidÏîÄ¿ÁË¡£
Ê×ÏÈ£¬ÎÒÃÇÀ´¿´ÏÂÒ»¸ö×î¼òµ¥android build.gradle¡£
build.gradle
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.4'
}
}
apply plugin: 'android'
android {
compileSdkVersion 17
}
|
Ó¢ÓïµÄ½éÉܶ¼À´×ÔÓë gradle¹Ù·½Îĵµ£¬ Ö÷Òªºó±ßµÄÖÐÎIJ»ÊÇ·Ò룬ÊDz¹³ä½éÉÜ¡£¡£
1.buildscript{}
Configures the build script classpath
for this project. ˵°×Á˾ÍÊÇÉèÖýű¾µÄÔËÐл·¾³
2.repositories{}
Returns a handler to create repositories
which are used for retrieving dependencies and uploading
artifacts produced by the project. ´óÒâ¾ÍÊÇÖ§³Öjava ÒÀÀµ¿â¹ÜÀí£¨maven/ivy£©,ÓÃÓÚÏîÄ¿µÄÒÀÀµ¡£ÕâÒ²ÊÇgradle
Ç¿Á¦µÄµØ·½¡£¡£¡£
3.dependencies{}
The dependency handler of this project.
The returned dependency handler instance can be used
for adding new dependencies. For accessing already declared
dependencies, the configurations can be used. ÒÀÀµ°üµÄ¶¨Òå¡£Ö§³Ömaven/ivy£¬Ô¶³Ì£¬±¾µØ¿â£¬Ò²Ö§³Öµ¥Îļþ£¬Èç¹ûÇ°Ãæ¶¨ÒåÁËrepositories{}maven
¿â£¬Ê¹ÓÃmavenµÄÒÀÀµ£¨ÎÒû½Ó´¥¹ýivy¡£¡££©µÄʱºòÖ»ÐèÒª°´ÕÕÓÃÀàËÆÓÚcom.android.tools.build:gradle:0.4£¬gradle
¾Í»á×Ô¶¯µÄÍùÔ¶³Ì¿âÏÂÔØÏàÓ¦µÄÒÀÀµ¡£
4.apply plugin:
ÉùÃ÷¹¹½¨µÄÏîÄ¿ÀàÐÍ£¬ÕâÀﵱȻÊÇandroidÁË¡£¡£¡£
5.android{}
ÉèÖñàÒëandroidÏîÄ¿µÄ²ÎÊý£¬½ÓÏÂÀ´£¬ÎÒÃǵĹ¹½¨androidÏîÄ¿µÄËùÓÐÅäÖö¼ÔÚÕâÀïÍê³É¡£
¹¹½¨Ò»¸öGradle androidÏîÄ¿
Ê×ÏÈ£¬ÄãÒª°²×°Gradle 1.6 ²¢ÇÒ£¬Ð´½øÏµÍ³µÄ»·¾³±äÁ¿ÀïÃæ£¬ËùÓеÄÃüÁî¶¼ÊÇĬÈÏÄãÒѾÅäºÃÁËgradle
µÄ»·¾³¡£¶øÇÒ£¬ÒѾÒѾÉý¼¶ÁËandroid sdk 22
ÒªÓÃgradle¹¹½¨ÄãµÄÓÐÁ½ÖÖ·½Ê½£º£¨build.gradle ·Åµ½ÏîĿĿ¼Ï£©
1.ÀûÓÃadt 22µ¼³ö build.gradle.
2.¸´ÖƱðÈËдºÃµÄbuild.gradle Îļþ.
3.¸ù¾Ýgradle ¹æÔò£¬ÊÖдandroid µÄbuild.gradle
Îļþ¡£
¸öÈËÍÆ¼ö1,2 ·½·¨¡£¡£¡£¡£
Ò»¸öandroid build.gradle ×î»ù±¾»ù±¾Îļþ
build.gradle
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.4'
}
}
apply plugin: 'android'
dependencies {
}
android {
compileSdkVersion 17
buildToolsVersion "17"
defaultConfig {
minSdkVersion 8
targetSdkVersion 17
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
instrumentTest.setRoot('tests')
}
}
|
½Ó×ÅÔÚÃüÁîÐÐcd µ½ÏîĿĿ¼ÏÂ
ÀýÈç: cd e:\workplace\andoridGradle
Èç¹ûÄãÊǵÚÒ»´ÎʹÓÃgradle ¹¹½¨androidÏîÄ¿½¨ÒéÄãÏÈʹÓÃgradle clean °Ñandroid
gradle ²å¼þ£¬»¹ÓÐÏà¹ØÒÀÀµ°üÏÂÔØÏÂÀ´²¢ÇÒ¶Ô»·¾³½øÐгõʼ»¯£¬Èç¹û³ö´íÁË£¬Ò»°ã¿ÉÄÜÊÇÏÂÔØ³¬Ê±£¬ÊԶ༸´Î¼´¿É£¬×îºóÄã»á¿´µ½ÈçÏÂÌáʾ£ºBUILD
SUCCESSFUL
The TaskContainer.add() method has been deprecated
and is scheduled to be remove d in Gradle 2.0. Please
use the create() method instead.
:clean UP-TO-DATE
BUILD SUCCESSFUL
Total time: 7.847 secs
Íê³ÉÒÔÉϵIJ½Ö裬¾Í¿ÉÒÔÕýʽʹÓÃgralde ¹¹½¨ÄãµÄandroidÏîÄ¿ÁË¡£
È»ºóʹÓÃgradle build ¾ÍÍê³ÉÁËandroid ÏîÄ¿µÄ¹¹½¨ÁË¡£Èç¹û£¬ÄãÊÇÕÕ×ÅÒÔÉϲ½Öè×ߵϰ£¬Ä㽫»áÏëÏîĿĿ¼ÀïÃæ¿´µ½Ò»¸öbuild
µÄĿ¼£¬ÀïÃæ¾ÍÊÇÓÃgradle ¹¹½¨androidÏîÄ¿µÄÈ«²¿ÀýÈçÁË£¬½á¹¹Ä¿Â¼¿´¸½Â¼¡£
×îÖÕ´ò°üµÄapk ¾ÍÔÚbuild/apk Ŀ¼ÏÂÁË¡£È»ºó£¬Äã»á·¢ÏÖ£¬Á½¸öapk Ò»¸öÊÇ [ÏîÄ¿Ãû]-debug-unaligned
[ÏîÄ¿Ãû]-release-unsigned
Èç¹ûÒÔÉÏÄÚÈÝÄã¶¼ÕÆÎյϰ£¬½ÓÏÂÀ´¾Í½«Ïêϸ˵˵ÈçºÎÀûÓÃgralde ´ò°üandroid apk¡£
Gralde ´ò°ü²ÎÊýÏê½â
ÉÏÃæËµÁËÒ»´ó¶Ñ¶«Î÷£¬Æäʵ²¢²»ÎüÒýÈËȥʹÓÃgradle£¬Èç¹ûÖ»Êǹ¹½¨ÏîÄ¿µÄ»°£¬adt²»ÊǸüºÏÊÊÂð£¿Èç¹û£¬Äã¿´ÍêÒÔÏÂÄÚÈÝ»¹ÊÇÕâô¾õµÃµÄ»°£¬Äã¾Íû±ØÒªÕÛÌÚgradleÁË¡£¡£¡£¡£¡£¡£
´òÇ©Ãû°ü
¿´¸½Â¼ ĬÈÏÊä³ö release apk ÊÇûÓÐÇ©ÃûµÄ£¬ÄÇôÎÒÃÇÐèҪǩÃûµÄºÜ¼òµ¥£¬Ö»ÐèÒªÔÚandroid{}ÀïÃæ²¹³ä¼ÓÉϼÓÉϼ´¿É¡£ÍêÕûbuild.gradle
Çëµã»÷ÎÒµÄgist
build.gradle
signingConfigs {
myConfig{
storeFile file("gradle.keystore")
storePassword "gradle"
keyAlias "gradle"
keyPassword "gradle"
}
}
buildTypes{
release {
signingConfig signingConfigs.myConfig
}
}
|
È»ºó£¬ÔËÐÐgradle clean gradle build ,Õâ´ÎÔÚbuild/apk Äã¿´µ½Á˶àÁËÒ»¸ö[ÏîÄ¿Ãû]-release-unaligned£¬
´Ó×ÖÃæÉÏÃæÎҾͿÉÒÔÖªµÀ£¬Õâ¸öÖ»ÊÇûÓнøÐÐzipAlign ÓÅ»¯µÄ°æ±¾¶øÒÑ¡£¶ø[ÏîÄ¿Ãû]-release
¾ÍÊÇÎÒÃÇÇ©Ãû£¬²¢ÇÒzipAlign µÄapk°üÁË. ###´ò»ìÏý°ü### Ö»ÐèÒªÔÚÔÀ´µÄ»ù´¡ÉϼÓÉÏ£¬ÍêÕûµÄproguad.gradle
´úÂë build.gradle
buildTypes{
release {
signingConfig signingConfigs.myConfig
runProguard true
proguardFile 'proguard-android.txt'
}
}
|
gradle clean
gradle build
´ò¶àÇþµÀ°ü(Product Flavor)
ÏÖÔÚÀ´½âÊÍÒ»ÏÂÉÏÒ»½ÚµÄÎÊÌ⣬apkĿ¼ÏµÄÁ½¸öapk µÄº¬Òå
Ϊʲô²úÉúÁËÁ½¸öapk£¿
ĬÈϵÄandroid gralde ²å¼þ¶¨ÒåÁËÁ½ÖÖapk µÄÀàÐÍdebug, release£¬ÕâÁ½ÖÖÀàÐ͵ÄÏêϸ¶Ô±È¿´¸½Â¼¡£
Õâ¸öÊÇandroid gralde ²å¼þ buildTypes{} ·½·¨²úÉúµÄ£¬Ä¬ÈÏÅäÖúÃÁËÁ½¸öĬÈÏÄ£°å£¬µ±È»ÄãÒ²¿ÉÒÔÐ޸ģ¬Ç°ÃæÎÒÃǾÍÊÇÔÚÐÞ¸ÄĬÈϵÄrelease
µÄÅäÖã¬ÈÃÊä³öreleaseÀàÐ͵ĵÄapk£¬¾ßÓÐÇ©ÃûºÍ»ìÏý¡£
¶ÔÓÚ¶àÇþµÀ°ü£¬android ²å¼þÌṩÁËÒ»¸öÃûΪProduct Flavor{} µÄÅäÖã¬ÓÃÓÚ½øÐжàÇþµÀ´ò°ü¡£
ÀýÈ磬ÎÒµÄandroidÓ¦ÓÃÓк£Íâ°æ£¬ºÍ¹úÄÚ°æ±¾£¬¶øÇÒÕâÁ½¸ö°æ±¾µÄ°üÃûÊDz»Ò»ÑùµÄ£¡£¡£¨ÎҾ;ÙÁ½¸öÊг¡µÄÀý×Ó°²×°Õâ¸ö˼·£¬ÄãÒª´ò°ü100¸ö²»Í¬µÄÊг¡Ö»ÊǼ¸ÐдúÂëµÄÊÂÇé¡££©¡£
ÄãÖ»ÐèÒªÔÚandroid{} ²¹³äÉÏ
build.gradle
productFlavors {
playstore {
packageName='com.youxiachai.androidgradle.playstore'
}
hiapk {
packageName='com.youxiachai.androidgradle.amazonappstore'
}
}
|
È»ºógradle clean,gradle build,ÔÚbuild/apk ÏÂÃæÄã»á¿´µ½Ò»¶ÑµÄ°ü£¬ÃüÃû¸ñʽ[ÏîÄ¿Ãû]-[ÇþµÀÃû]-release
½ö´Ë¶øÒÑ?
Product Flavor{} ²»Ö»ÊÇÄܸİüÃûÄÇô¼òµ¥£¬»¹Äܹ»¶Ô±àÒëµÄÔ´ÂëĿ¼½øÐÐÇл»¡£
ʲôÒâ˼? ²»ÖªµÀ¸÷λÓÐûÓÐÓùýÓÑÃË×öÓû§Í³¼Æ£¬Èç¹û£¬ÄãÓõÄÊÇ·Ö·¢ÇþµÀ·ÖÎö£¬ÄãÐèÒªÐÞ¸ÄAndroidManifest.xml
Ìí¼ÓÉÏ <meta-data android:value="hiapk" android:name="UMENG_CHANNEL"/>
Èç¹û£¬ÄãºÜ¶àÇþµÀ£¬£¬È»ºóÄã¾Í»áºÜÍ´¿à£¬ÏÖÔÚÓÃgradle ¾Í·Ç³£Êæ·þ£¬ÄãÖ»ÐèÒªÔÚandroid.sourceSetsÖ¸¶¨ÎÒÃǵÄÇþµÀÃû¾ÍÐУ¬android
gradle ²å¼þ£¬»á×Ô¶¯´ò°ü£¡£¡£¡ÀýÈç
build.gradle
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
hiapk {
manifest.srcFile 'hiapk/AndroidManifest.xml'
}
playstore {
manifest.srcFile 'hiapk/AndroidManifest.xml'
}
instrumentTest.setRoot('tests')
}
|
È»ºóÔËÐÐgradle clean,gradle build,ʡϵÄʱ¼äÈ¥ºÈ±¿§·È£¬Ë¯¸ö¾õʲôµÄ¶¼ºÃ¡£¡£¡£
###ÍⲿÒÀÀµ### android gradle ¶ÔÓÚÍⲿjar °üµÄÓ¦ÓÃÖ§³Ömaven/ivy ¹ÜÀíµÄ°ü£¬Ò²Ö§³ÖÖ¸¶¨¾ßÌåÎļþ£¬Ç°ÃæÒѾÔÚÉÏÎÄ˵¹ý¡£ÉÏÃæÑÝʾµÄÍêÕû
build.gradle gist ÀïÃæÒ²ÓÐд¡£ÄãÐèÒª¼ÓÉÏÈçÏ´úÂë¼´¿É£º build.gradle
dependencies { compile files('libs/android-support-v4.jar') }
|
½áÓï
ÖÁ´Ë£¬¶ÔÓÚÓÃandroid gradle ¹¹½¨androidÓ¦ÓóÌÐò£¬´ò°üandroid
³ÌÐò£¬ËùÐèÒªµÄËùÓÐ֪ʶ£¬ÔÚÒÔÉÏÒѾ˵Ã÷£¬Ö»ÒªÄãÊÇÈÏÕæ¿´ÉÏÃæÎÄյ쬶ÔÓÚ£¬ÈçºÎ´òÒÀÀµÓÚandroid library
project µÄ°ü£¬¿ÉÒÔ¿´¸½Â¼ÌṩµÄÄǸöµÂ¹úÈËдµÄÀý×Ó£¬¶ø¶ÔÓÚbuild.gradle ÀïÃæµÄ´úÂëÄãÐèÒª°Ñ0.2,
¸ÄΪ0.4¼´¿É¡£ÖÁÓÚÓÃgradle ÔËÐÐandroid test case²¿·ÖµÄ½Ì³Ì£¬¸öÈ˸оõдÁËÒ²°×д£¨ÎÒд¹ý¹ØÓÚandorid
²âÊÔÏà¹ØµÄÎÄÕ£¬Ò²Â¼ÖƹýÊÓÆµ£¬ËùÒÔÓÐÕâ¸ö¸Ð¾õ¡££©£¬¹À¼Æ²»»áÓÐÈ˹Ø×¢£¬ËùÒÔ£¬Èç¹ûÄã¶ÔÓÃgradle ½øÐÐandroid
testµÄ»°£¬¿ÉÒÔ¿´¸½Â¼ÀïÃæÌṩµÄ¹Ù·½gradleÊֲᡣ
|