Ò»¡¢Ç°ÑÔ
Gradle ÊÇÒÔ Groovy ÓïÑÔΪ»ù´¡£¬ÃæÏòJavaÓ¦ÓÃΪÖ÷¡£»ùÓÚDSL£¨ÁìÓòÌØ¶¨ÓïÑÔ£©Óï·¨µÄ×Ô¶¯»¯¹¹½¨¹¤¾ß¡£
ÉÏÃæÕâ¾ä»°ÎÒ¾õµÃдµÃºÜ¹Ù·½£¬´ó¼ÒÖ»ÐèÖªµÀGradle¿ÉÒÔÓÃÀ´android¿ª·¢ÖнøÐжà¸öÏîÄ¿ÒÀÀµµÄ×Ô¶¯»¯±àÒë½Å±¾£¬ÖªµÀÕâµãÒ²¾ÍÖªµÀÎÒÃÇʹÓÃËüµÄÄ¿µÄ£»
Ϊʲô²»Ê¹ÓÃAnt×ö×Ô¶¯»¯±àÒë½Å±¾£¬ÒòΪantÉÏÊֿ죬µ«ÊÇά»¤ÆðÀ´Ì«²»·½±ãÁË£¬ÓÐÁËGradleÄã¿ÉÒÔ¸úÏîÄ¿×éµÄͬÊÂ˵£¬ÓÃAntµÄº¢×ÓÃDZð¿à±ÆµÄά»¤ÁË£¬¸Ï½ô»»³Égradle°É¡£
±¾ÎÄÃæÏògradleÐÂÊÖ»òÕßÒÔǰʹÓùýgradleµÍ°æ±¾µÄÅóÓÑ£¬ÒòΪÎҸоõÿ´ÎgradleÉý¼¶ÄǸö½Å±¾Ò²ÓÐЩ¿Óµù£¬ÓÐЩapi¾Í·ÏÆúµôÁË£¬²»¹ý×ÜÌå¸Ð¾õÿ´ÎÉý¼¶¶¼ÈÃÕâ¸ö¹¤¾ß¸ü¼ÓÑϽ÷»°£¬Ò×Óû°ÁË¡£
¶þ¡¢DemoÃèÊö
ÏÂÃæÎҾͼòµ¥Ð´Ò»¸ödemo£¬Í¨¹ýÕâ¸ödemo³ÌÐòÈôó¼ÒÈçºÎ¿ìËÙÉÏÊÖ£¬±È½ÏʵÓõÄÒ»¸öʵÀý£º
demo³ÌÐò·ÖΪ2¸ö¹¤³Ì£¬Äã¿ÉÒÔÖ±½ÓʵÓÃeclipseн¨Ò»¸öandroid¹¤³Ì£¬ÆäʵÎÒÒ²ÊÇÕâô¸ÉµÄ£¬ÕâÑùÒ»À´´ó¼Ò×Ðϸ¿´ÏÂͼ

ÕâÀï˳±ãÇ¿µ÷Ò»ÏÂdemo¹¤³ÌµÄ»·¾³ÅäÖ㺣¨ºÜÖØÒª£¬·ñÔòÏÂÃæ±»ÎÒ¿ÓÁ˱ð¹ÖÎÒÌáÆðû¸úÄã˵£©
jdk£ºC:\Program Files\Java\jdk1.8.0_20£¨×¢Ò⣺²»ÒªÊ¹ÓÃjre£¬gradle»áÌáʾÄãʹÓÃjdkµÄ£©
·ñÔò½Å±¾»áÌáʾÒÔÏ´íÎó£º
* What went wrong: Execution failed for task ':appcompat_v7:compileReleaseJava'. > Cannot find System Java Compiler. Ensure that you have installed a JDK (not just a JRE) and configured your JAVA_HOME system variable to point to the according directory. |
* What went wrong: Execution failed for task ':appcompat_v7:compileReleaseJava'. > Cannot find System Java Compiler. Ensure that you have installed a JDK (not just a JRE) and configured your JAVA_HOME system variable to point to the according directory. |
android-sdk£ºD:\dev\adt-bundle-windows-x86-20140702
android-api: 20, android4.4W£¨×¢Ò⣺×öandroid¿ª·¢Äãÿ´Î¶¼ÊÇÓÃ×îеÄapi±àÒëÊÇÒ»¸öºÃϰ¹ß£©
gradle£º2.1£¬£¨Ê¹ÓÃ×îеİ汾2.2£¬no zuo no die£¬±»¿Ó²»¶Ï£¬»¶ÀÖ²»¶Ï£©
gradleµÄÏÂÔØµØÖ·£ºhttp://www.gradle.org/documentation
£¬´ó¼Ò¿ÉÒÔ¿´¿´Îĵµ£¬µ±È»ÄãµÄEÎĺõϰ£¬»áÈÝÒ×ÉÏÊÖ£¬²»¹ýû¹ØÏµ£¬¿´ÁËÎÒдµÄÎÄÕÂÄãgradleµÄÎĵµÄã¿ÉÒÔ²»¿´ÁË£¬ÒòΪºÜ¶à¶«Î÷ÄãÓò»ÉÏ£¬³ý·ÇÄãÏîÄ¿ÖÐʹÓÃÁËÌØ±ð¸´ÔӵŦÄÜ
gradle2.1µÄapiÎĵµ£ºhttp://www.gradle.org/docs/current/javadoc/org/gradle/api/Project.html
£¬Õâ¸öÐèÒªÄãż¶û··£¬ÒòΪ¼òµ¥¹¦ÄÜ»áÓÃÉϵÄ
»·¾³±äÁ¿ÅäÖãº
JAVA_HOME£¬GRADLE_HOME¶¼ÒªÌí¼Óµ½»·¾³±äÁ¿Àï
µ±È»ÁËpath±äÁ¿ÀïÄãÒ²Òª¼ÓÉÏ JAVA_HOME/bin,ºÍGRADLE_HOME/bin£¬ÕâÑùÏÂÃæÄ㿪һ¸öCMDÃüÁîÐУ¬²Å¿ÉÒÔ·½ÃæÊ¹ÓÃgradle
buildÃüÁî
ºÃÁË×¼±¸¹¤×÷Íê³Éºó£¬ÎÒÃǾͿªÊ¼Õýʽ½²½²Õâ¸ödemo¹¤³ÌÁË
TestDemo¹¤³Ì¾ÍдÁËÒ»¸öactivity£¬ÏÔʾhello world£¡
Appcompatv7¹¤³Ì´ó¼Ò¶®µÃÒ»¸ölibrary£¬ºÜÓдú±íÐÔ£¬ÎÒÃÇʵ¼ÊÏîÄ¿ÖлáÓõ½¶à¸ölibrary£¬Äã¿ÉÒÔ¾ÙÒ»·´ÈýÁË¡£
ÏÂÃæ¿´¿´Ä¿Â¼Îļþ£º

ÄãÏëÔËÐбàÒë½Å±¾£¬ÐèÒª2¸öÅäÖÃÎļþ£¬local.propertiesºÍsettings.gradle
settings.gradleÀïµÄ´úÂëÄÚÈÝ:
include ':appcompat_v7', ':TestDemo' |
include ':appcompat_v7', ':TestDemo' |
ÕâÀïÃæ¿ÉÒÔ¿´µ½ÊÇprojectµÄÃèÊö£¬Èç¹ûÄãÓжà¸ö¹¤³ÌÈçÂÛÖ÷¹¤³Ì»¹ÊÇÒýÓõĿ⹤³Ì£¬¶¼ÐèÒªÔÚÕâÀïÃæÉùÃ÷£¬·ñÔògradleÕÒ²»µ½
local.propertiesÀïµÄ´úÂëÄÚÈÝ£º
sdk.dir=D:\\dev\\adt-bundle-windows-x86-20140702\\sdk |
sdk.dir=D:\\dev\\adt-bundle-windows-x86-20140702\\sdk |
ÕâÀïÃæ¿ÉÒÔ¿´µ½ÊÇandroid sdkµÄĿ¼£¬×Ô¼ºÌîºÃ£¬·ñÔòÒ²»á±¨´í¡£
ºÃÁËÏÂÃæ½²½²Ã¿¸ö¹¤³ÌÀïÃæ¶¼ÐèÒªÅäÖÃÒ»¸öbuild.gradle Îļþ
appcompat_v7¹¤³ÌµÄbuild.gradle£º
</pre><p style="text-indent: 28px;"><span style="color: rgb(51, 51, 51); font-family: arial, ËÎÌå, sans-serif;">
<span style="line-height: 24px; font-size: 14px;"></span></span></p>
<p style="text-indent: 28px;"><span style="color: rgb(51, 51, 51); font-family: arial, ËÎÌå, sans-serif;">
<span style="line-height: 24px; font-size: 14px;"></span></span></p>
<div class="dp-highlighter bg_html"><div class="bar"><div class="tools"><strong>[html]</strong>
<a target=_blank title="view plain" class="ViewSource" href="http://blog.csdn.net/changemyself/article/details/39927381#">
view plain</a><a target=_blank title="copy"
class="CopyToClipboard" href="http://blog.csdn.net/changemyself/article/details/39927381#">copy</a>
<a target=_blank title="print" class="PrintSource" href="http://blog.csdn.net/changemyself/article/details/39927381#">
print</a><a target=_blank title="?" class="About" href="http://blog.csdn.net/changemyself/article/details/39927381#">?</a>
<a target=_blank title="ÔÚCODEÉϲ鿴´úÂëÆ¬" style="text-indent: 0px;"
href="https://code.csdn.net/snippets/481062" target="_blank">
<img width="12" height="12" style="left: 2px; top: 1px; position: relative;" alt="ÔÚCODEÉϲ鿴´úÂëÆ¬"
src="https://code.csdn.net/assets/CODE_ico.png" /></a><a target=_blank title="ÅÉÉúµ½ÎҵĴúÂëÆ¬"
style="text-indent: 0px;" href="https://code.csdn.net/snippets/481062/fork" target="_blank">
<img width="12" height="12" style="left: 2px; top: 2px; position: relative;" alt="ÅÉÉúµ½ÎҵĴúÂëÆ¬"
src="https://code.csdn.net/assets/ico_fork.svg" /></a></div></div><ol class="dp-xml"><li class="alt">
<span><span>buildscript{ </span></span></li><li><span> repositories{ </span></li><li class="alt"><span>
mavenCentral(); </span></li><li><span> } </span></li><li class="alt"><span> </span></li>
<li><span> dependencies{ </span></li><li class="alt"><span>
classpath 'com.android.tools.build:gradle:0.13.+' //Èç¹ûʹÓÃgradle2.2°æ±¾£¬Çë¸ÄΪgradle:0.14.+ </span></li>
<li><span> } </span></li><li class="alt"><span> </span></li><li><span>tasks.withType(JavaCompile)
{ <span class="attribute">options.encoding</span><span> = </span><span class="attribute-value">
"UTF-8"</span><span> } </span></span></li><li class="alt"><span>} </span></li><li><span></span></li>
<li class="alt"><span> </span></li><li><span>apply plugin:'android-library' </span></li>
<li class="alt"><span></span></li><li><span> </span></li><li class="alt"><span>dependencies{ </span></li>
<li><span> compile fileTree(dir:'libs',include:"*.jar") </span></li><li class="alt"><span>} </span></li>
<li><span> </span></li><li class="alt"><span> </span></li><li><span>android{ </span></li>
<li class="alt"><span> compileSdkVersion 20 </span></li><li><span> buildToolsVersion "20"</span></li>
<li class="alt"><span> <span class="attribute">enforceUniquePackageName</span>
<span>=</span><span class="attribute-value">false</span><span> </span></span></li>
<li><span></span></li><li class="alt"><span> lintOptions{ </span></li>
<li><span> abortOnError false </span></li><li class="alt"><span> } </span></li>
<li><span></span></li><li class="alt"><span> sourceSets{ </span></li>
<li><span>main{ </span></li><li class="alt"><span> manifest.srcFile 'AndroidManifest.xml' </span></li>
<li><span> <span class="attribute">java.srcDirs</span><span> = ['src'] </span></span></li>
<li class="alt"><span><span class="attribute">resources.srcDirs</span><span> = ['src'] </span></span></li>
<li><span> <span class="attribute">aidl.srcDirs</span><span> = ['src'] </span></span></li>
<li class="alt"><span><span class="attribute">renderscript.srcDirs</span><span> = ['src'] </span></span></li>
<li><span><span class="attribute">res.srcDirs</span><span> = ['res'] </span></span></li>
<li class="alt"><span><span class="attribute">assets.srcDirs</span><span> = ['assets'] </span></span></li>
<li><span> } </span></li><li class="alt"><span> } </span></li><li><span></span></li>
<li class="alt"><span> lintOptions{ </span></li><li><span>abortOnError false </span></li>
<li class="alt"><span> } </span></li><li><span>} </span></li></ol></div>
<pre class="html" style="display: none;" name="code" code_snippet_id="481062"
snippet_file_name="blog_20141009_4_910552">buildscript{ repositories{ mavenCentral(); } dependencies{ classpath 'com.android.tools.build:gradle:0.13.+' //Èç¹ûʹÓÃgradle2.2°æ±¾£¬Çë¸ÄΪgradle:0.14.+ } tasks.withType(JavaCompile) { options.encoding = "UTF-8" } } apply plugin:'android-library' dependencies{ compile fileTree(dir:'libs',include:"*.jar") } android{ compileSdkVersion 20 buildToolsVersion "20" 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 } } |
¶ÔÓÚÕâ¸öÎļþÎÒÐèҪǿµ÷¼¸µã£º
1¡¢classpath 'com.android.tools.build:gradle:0.13.+'
£¬ºÜ¶àÈËÓÃÁ˵Ͱ汾³öÁËÎÊÌâдʲô0.11+£¬ÎÒ²»¹Ü£¬ÄãҪʹÓÃgradle2.1°æ±¾£¬ÕâÀï¾Íд³É0.13.+°üÄãû´í¡£Èç¹ûʹÓÃgradle2.2°æ±¾£¬ÕâÀï¾ÍҪд³É0.14.+
2¡¢apply plugin:'android-library'£¬ËµÃ÷Õâ¸öÒ»¸ö¿â¹¤³Ì£¬Ïêϸ×Ô¼ºÕÒ×ÊÁÏÄÔ²¹
3¡¢tasks.withType(JavaCompile) { options.encoding =
"UTF-8" } £¬taskÊǸöɶ×Ô¼º²éÈ¥£¬ÕâÀï±àÒëencodingÅä³ÉUTF-8£¬»¹ÓÐÒ»µãÔڵͰ汾½Å±¾ÓеÄÈËд³Étasks.withType(Compile)
£¬ÕâÑù×Ó±¨´íÁË£¬¸Ä³ÉJavaCompile°É£¬ÎÒÊÇÒ»µãÒ»µãÅÅ´íµÄ
4¡¢
android{ compileSdkVersion 20 buildToolsVersion "20" |
ÕâÀïÃæversionд20£¬ÎªÉ¶£¿ÉÏÃæÄã¿´¿´ÎÒµÄandroid-sdk
apiµÄ°æ±¾¾ÍÖªµÀÁË£¬Ð´³É±ðµÄÒ²¿ÉÒÔ£¬ÄãÒª±£Ö¤Äã±¾µØandroidsdk¶¼ÓС£
TestDemo¹¤³ÌÀïµÄ¼¸¸öÎļþ£º

buildĿ¼£ºÊÇgradleÖ´ÐбàÒëʱºòÉú³ÉµÄ£¬ÀïÃæºÃ¶àÄÚÈÝ£¬ÓÐÐËȤ×Ô¼º··¿´
outputĿ¼£ºÎÒдµÃ½Å±¾£¬×îºó°ÑbuildÀïµÄapk×Ô¶¯copyµ½Õâ¸öĿ¼£¬Õâ¸ö¿ÉÒÔ¾ßÌå¿´½Å±¾
blue_key£ºapkÇ©ÃûÎļþ
build.gradle£ºÄã¶®µÃ
TestDemo¹¤³ÌÀïÃæµÄbuild.gradle
import java.util.regex.Pattern //import com.android.builder.DefaultManifestParser import com.android.builder.core.DefaultManifestParser buildscript{ repositories{ mavenCentral() } dependencies{ classpath 'com.android.tools.build:gradle:0.13.+' } /*** tasks.withType(Compile){ options.encoding = "UTF-8" } **/ tasks.withType(JavaCompile) { options.encoding = "UTF-8" } } apply plugin:'android' dependencies{ compile fileTree(dir:"libs",include:'*.jar') compile project(':appcompat_v7') } android{ compileSdkVersion 20 buildToolsVersion "20" enforceUniquePackageName=false defaultConfig{ targetSdkVersion 17; } lintOptions{ abortOnError false } dexOptions { preDexLibraries = false } packagingOptions { exclude 'META-INF/DEPENDENCIES.txt' exclude 'META-INF/LICENSE.txt' exclude 'META-INF/NOTICE.txt' exclude 'META-INF/NOTICE' exclude 'META-INF/LICENSE' exclude 'META-INF/DEPENDENCIES' exclude 'META-INF/notice.txt' exclude 'META-INF/license.txt' exclude 'META-INF/dependencies.txt' exclude 'META-INF/LGPL2.1' exclude 'META-INF/ASL2.0' } signingConfigs{ myConfig{ storeFile file("bluekey") storePassword "blue" keyAlias "blue" keyPassword "blue" } } buildTypes{ release{ //runProguard true //´ò¿ª»ìÏý¿ª¹Ø ÕâÖÖд·¨²»¿ÉÒÔÁË //proguardFile 'proguard.txt.txt' //ÅäÖõ¥¸öÎļþÕâÑù£¬ÕâÖÖд·¨²»¿ÉÒÔÁË [html] view plaincopyÔÚCODEÉϲ鿴´úÂëÆ¬ÅÉÉúµ½ÎҵĴúÂëÆ¬ import java.util.regex.Pattern //import com.android.builder.DefaultManifestParser import com.android.builder.core.DefaultManifestParser buildscript{ repositories{ mavenCentral() } dependencies{ classpath 'com.android.tools.build:gradle:0.13.+' } /*** tasks.withType(Compile){ options.encoding = "UTF-8" } **/ tasks.withType(JavaCompile) { options.encoding = "UTF-8" } } apply plugin:'android' dependencies{ compile fileTree(dir:"libs",include:'*.jar') compile project(':appcompat_v7') } android{ compileSdkVersion 20 buildToolsVersion "20" enforceUniquePackageName=false defaultConfig{ targetSdkVersion 17; } lintOptions{ abortOnError false } dexOptions { preDexLibraries = false } packagingOptions { exclude 'META-INF/DEPENDENCIES.txt' exclude 'META-INF/LICENSE.txt' exclude 'META-INF/NOTICE.txt' exclude 'META-INF/NOTICE' exclude 'META-INF/LICENSE' exclude 'META-INF/DEPENDENCIES' exclude 'META-INF/notice.txt' exclude 'META-INF/license.txt' exclude 'META-INF/dependencies.txt' exclude 'META-INF/LGPL2.1' exclude 'META-INF/ASL2.0' } signingConfigs{ myConfig{ storeFile file("bluekey") storePassword "blue" keyAlias "blue" keyPassword "blue" } } buildTypes{ release{ //runProguard true //´ò¿ª»ìÏý¿ª¹Ø ÕâÖÖд·¨²»¿ÉÒÔÁË //proguardFile 'proguard.txt.txt' //ÅäÖõ¥¸öÎļþÕâÑù£¬ÕâÖÖд·¨²»¿ÉÒÔÁË |
<span style="white-space: pre;"> </span>minifyEnabled true proguardFile getDefaultProguardFile('proguard-android.txt')//Ö¸¶¨»ìÏýÎļþ signingConfigs.myConfig } } sourceSets{ main{ manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] resources.srcDirs = ['src'] aidl.srcDirs = ['src'] //rendersrcDirs = ['src'] res.srcDirs = ['res'] assets.srcDirs = ['assets'] } } task copyNativeLibs(type: Copy) { from(new File(project(':appcompat_v7').getProjectDir(), 'libs')) { include '**/*.so' } into new File(buildDir, 'native-libs') } tasks.withType(JavaCompile){ compileTask -> compileTask.dependsOn copyNativeLibs } clean.dependsOn 'cleanCopyNativeLibs' tasks.withType( com.android.build.gradle.tasks.PackageApplication){ pkgTask -> pkgTask.jniFolders = new HashSet<File>() pkgTask.jniFolders.add(new File(buildDir,'native-libs')) } } build.doLast { def today = new Date().format('yyMMdd'); copy{ //from('build/apk') from('build/outputs/apk') into('output') include('TestDemo-debug.apk') rename('TestDemo-debug.apk','blue-'+today+'-'+readVersion()+'-demo.apk') } } /** *´ÓManifest.xmlÖжÁÈ¡°æ±¾ºÅ **/ def readVersion(){ def manifestParser = new DefaultManifestParser() return manifestParser.getVersionName(android.sourceSets.main.manifest.srcFile); } |
<span style="white-space: pre;"> </span>minifyEnabled true proguardFile getDefaultProguardFile('proguard-android.txt')//Ö¸¶¨»ìÏýÎļþ signingConfigs.myConfig } } sourceSets{ main{ manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] resources.srcDirs = ['src'] aidl.srcDirs = ['src'] //rendersrcDirs = ['src'] res.srcDirs = ['res'] assets.srcDirs = ['assets'] } } task copyNativeLibs(type: Copy) { from(new File(project(':appcompat_v7').getProjectDir(), 'libs')) { include '**/*.so' } into new File(buildDir, 'native-libs') } tasks.withType(JavaCompile){ compileTask -> compileTask.dependsOn copyNativeLibs } clean.dependsOn 'cleanCopyNativeLibs' tasks.withType( com.android.build.gradle.tasks.PackageApplication){ pkgTask -> pkgTask.jniFolders = new HashSet<File>() pkgTask.jniFolders.add(new File(buildDir,'native-libs')) } } build.doLast { def today = new Date().format('yyMMdd'); copy{ //from('build/apk') from('build/outputs/apk') into('output') include('TestDemo-debug.apk') rename('TestDemo-debug.apk','blue-'+today+'-'+readVersion()+'-demo.apk') } } /** *´ÓManifest.xmlÖжÁÈ¡°æ±¾ºÅ **/ def readVersion(){ def manifestParser = new DefaultManifestParser() return manifestParser.getVersionName(android.sourceSets.main.manifest.srcFile); } |
¶ÔÓÚÕâ¸öÎļþÎÒÐèҪǿµ÷¼¸µã(ºÜÖØÒª)£º
1¡¢//import com.android.builder.DefaultManifestParser import com.android.builder.core.DefaultManifestParser
//×¢Ê͵ôµÄ´úÂëÊǵͰ汾µÄд·¨£¬Ä¿Ç°Ê¹ÓÃ×îÐÂapi
2¡¢
/***
tasks.withType(Compile){
options.encoding = "UTF-8"
}
**/
tasks.withType(JavaCompile) { options.encoding
= "UTF-8" }
//×¢Ê͵ôµÄ´úÂëÊǵͰ汾µÄд·¨£¬Ä¿Ç°Ê¹ÓÃ×îÐÂapi
3¡¢
dependencies{
compile fileTree(dir:"libs",include:'*.jar')
compile project(':appcompat_v7')
} |
±àÒëÒÀÀµ£¬ÎÒÃÇ¿ÉÒÔ¿´µ½ÒÀÀµµÄ¿â appcompat_v7ҪдÔÚÕâÀעÒâ":"(ðºÅÒ»¶¨ÒªÐ´)
signingConfigs{ myConfig{ storeFile file("bluekey") storePassword "blue" keyAlias "blue" keyPassword "blue" } }
buildTypes{ release{ signingConfigs.myConfig } }
|
±àÒëʱºòÇ©ÃûÎļþÅäÖ㬵±È»ÄãÒ²¿ÉÒÔ±àÒë³ödebugºÍûÓÐÇ©ÃûµÄapk£¬×ÔÐвé×ÊÁÏÈ¥
task copyNativeLibs(type: Copy) { from(new File(project(':appcompat_v7').getProjectDir(), 'libs')) { include '**/*.so' } into new File(buildDir, 'native-libs') }
tasks.withType(JavaCompile){ compileTask -> compileTask.dependsOn copyNativeLibs }
|
¹ØÓÚÒÀÀµµÄsoÎļþºÍjarÎļþ£¬ÔÚ±àÒë֮ǰcopyÒÀÀµµ½Ö÷¹¤³ÌµÄnative-libsĿ¼
build.doLast { def today = new Date().format('yyMMdd'); copy{ //from('build/apk') from('build/outputs/apk') into('output') include('TestDemo-debug.apk') rename('TestDemo-debug.apk','blue-'+today+'-'+readVersion()+'-demo.apk') } }
/** *´ÓManifest.xmlÖжÁÈ¡°æ±¾ºÅ **/ def readVersion(){ def manifestParser = new DefaultManifestParser() return manifestParser.getVersionName(android.sourceSets.main.manifest.srcFile); } |
build.doLast£¬¾ÍÊÇ×îºóÖ´ÐеÄÒâ˼£¬¹ØÓÚgradle task´ó¼ÒÐèÒª¼òµ¥²é×ÊÁÏÕÆÎÕ¼´¿É¡£
ÕâÀïÃæÐèҪעÒâµÄ£º
def today = new Date().format('yyMMdd');def manifestParser = new DefaultManifestParser()
|
¶¼ÐèÒªdefÉùÃ÷±äÁ¿£¬µÍ°æ±¾²»ÓÃдµÄ£¬µ«ÊÇĿǰ²»Ð´¾ÍÒª±¨´íÁË¡£
Õâ¸ö´úÂëµÄ¹¦ÄÜ£º¾ÍÊÇ´ÓManifestÎļþÀï¶Á³översioncodeÈ»ºó½áºÏµ±Ç°ÈÕÆÚÖØÐÂÃüÃûoutputÀïµÄapkÎļþ¡£

·½±ã°É£¬ºÜʵÓõÄÒ»µã¡£
apply plugin:'android'
Õâ˵Ã÷Õâ¸ö½Å±¾ÐèÒª±àÒëµÄÊÇÒ»¸ö android¹¤³Ì£¬¸úÉÏÃæµÄlibraryÊDz»ÊÇÓÐËù²»Í¬ÄØ£¿
gradle»¹Ö§³Öjava projectµÄ±àÒ룬´ó¼Ò×ÔÐвé×ÊÁÏ¡£
Èý¡¢±àÒëÖ´ÐУº
ÏÂÃæÎÒÃÇ´ò¿ªcmdÃüÁî´°¿Ú½øÐбàÒë²Ù×÷

ÔÚTestDemoĿ¼ִÐÐgradle build£¬ÒòΪÕâÀïÊÇlocal.propertiesºÍsettings.gradle
ËùÔڵĸùĿ¼¡£
µÚÒ»´ÎÖ´ÐÐʱºò£¬gradle¸ù¾ÝÒÀÀµÈ¥ÏÂÔØËùÐèÒªµÄjar°ü£¬»áÔÚÄãÿ¸ö¹¤³ÌÀï´´½¨Ò»¸ö.gradleĿ¼
dependencies{ classpath 'com.android.tools.build:gradle:0.13.+' } |
ÏÂÔØ³É¹¦ºó

ok£¬ÄÇÎÒÃÇ¿ªÊ¼Ö´ÐбàÒë²Ù×÷ÁË£¬gradle build

±àÒëÕý³£µÄ»°»áÌáʾ BUILD SUCCESSFUL£¬È»ºó×Ô¼ºÈ¥outputĿ¼ÕÒapkÈ¥¡£
ÕâÀïÌáÐÑ´ó¼ÒÒ»¸öjar³åÍ»»áÒýÆð±àÒëÖжϵÄÎÊÌ⣺

ÒòΪºÜ¶àÅóÓѵÄprojectµÄlibsĿ¼Óжà¸öandroid-support-v4.jarµ¼Öµġ£
×îºó†ªàÂ
½ñÌìÏÈдµ½Õ⣬ÎÒÃÇʵ¼ÊÔËÓÃÖÐÓкܶàÐèÇó£¬ÀýÈ磺×Ô¶¯¸ù¾Ý¶àÇþµÀ´ò°ü£¬¸ù¾Ý²»Í¬µÄ×ÊÔ´ºÍ²»Í¬µÄpkg½øÐÐapk´ò°ü£¬gradle¶¼ÄܰïÄã¸ã¶¨£¬Õâ¿édemoºóÐøÓÐʱ¼äÎÒÌùÉÏÀ´¡£
|