Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
Gradle Android×îÐÂ×Ô¶¯»¯±àÒë½Å±¾½Ì³Ì
 
×÷ÕߣºÓãÓã²»¹Ô À´Ô´£ºCSDN ·¢²¼ÓÚ 2015-9-10
  4382  次浏览      31
 

Ò»¡¢Ç°ÑÔ

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ºóÐøÓÐʱ¼äÎÒÌùÉÏÀ´¡£

   
4382 ´Îä¯ÀÀ       31
Ïà¹ØÎÄÕÂ

ΪʲôҪ×ö³ÖÐø²¿Êð£¿
ÆÊÎö¡°³ÖÐø½»¸¶¡±£ºÎå¸öºËÐÄʵ¼ù
¼¯³ÉÓë¹¹½¨Ö¸ÄÏ
³ÖÐø¼¯³É¹¤¾ßµÄÑ¡Ôñ-×°ÔØ
Ïà¹ØÎĵµ

³ÖÐø¼¯³É½éÉÜ
ʹÓÃHudson³ÖÐø¼¯³É
³ÖÐø¼¯³ÉÖ®-ÒÀÀµ¹ÜÀí
IPD¼¯³É²úÆ·¿ª·¢¹ÜÀí
Ïà¹Ø¿Î³Ì

ÅäÖùÜÀí¡¢ÈÕ¹¹½¨Óë³ÖÐø¼¯³É
Èí¼þ¼Ü¹¹Éè¼Æ·½·¨¡¢°¸ÀýÓëʵ¼ù
µ¥Ôª²âÊÔ¡¢Öع¹¼°³ÖÐø¼¯³É
»ùÓÚAndroidµÄµ¥Ôª¡¢ÐÔÄܲâÊÔ
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

¼¯³ÉÓë¹¹½¨Ö¸ÄÏ
ÏîÄ¿¹ÜÀí:MavenÈÃÊÂÇé±äµÃ¼òµ¥
³ÖÐø¼¯³É¹¤¾ßhudson
³ÖÐø¼¯³É
MavenȨÍþÖ¸ÄÏ
³ÌÐò¼¯(UMLÖеİü)Ö®¼äÑ­»·


²úÆ··¢²¼¹ÜÀí
ÅäÖùÜÀí·½·¨¡¢Êµ¼ù¡¢¹¤¾ß
¶à²ã´Î¼¯³ÉÅäÖùÜÀí
ʹÓÃCCÓëCQ½øÐÐÏîĿʵ¼ù
CVSÓëÅäÖùÜÀí
Subversion¹ÜÀíÔ±


º£º½¹É·Ý ÖØ¹¹¼°³ÖÐø¼¯³É
µçÑлªÔ´ Éè¼ÆÔ­Àí¡¢½¨Ä£ÓëÖØ¹¹
Èí¼þÅäÖùÜÀíÈÕ¹¹½¨¼°³ÖÐø¼¯³É
µ¥Ôª²âÊÔ¡¢Öع¹¼°³ÖÐø¼¯³É
ÖйúÈí¼þÑз¢ÖÐÐÄ µ¥Ôª²âÊÔÓëÖØ¹¹
µ¥Ôª²âÊÔ¡¢Öع¹ºÍ³ÖÐø¼¯³Éʵ¼ù
ÂÞ¿ËΤ¶û C++µ¥Ôª²âÊÔ+ÖØ¹¹+Gtest