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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
ÓÃGradle ¹¹½¨ÄãµÄandroid³ÌÐò
 
×÷Õß youxiachai£¬»ðÁú¹ûÈí¼þ    ·¢²¼ÓÚ 2014-09-30
  4656  次浏览      28
 

ǰÑÔ

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Êֲᡣ

   
4656 ´Îä¯ÀÀ       28
Ïà¹ØÎÄÕÂ

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

³ÖÐø¼¯³É½éÉÜ
ʹÓÃ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