java build.gradle是什么,讓我們一起了解一下?
Gradle是用了一種基于Groovy的領域的特定語言來聲明項目設置,摒棄了XML(如ANT和Maven)的各種繁瑣配置。另外在項目中一般會出現2個或者多個build.gradle文件,一個在根目錄下,一個在app目錄下。
我們來逐個分析:
1、根目錄下的build.gradle。
buildscript?{ ???? ????repositories?{??//repositories閉包 ????????google() ????????jcenter()?//代碼托管庫:設置之后可以在項目中輕松引用jcenter上的開源項目 ????} ????dependencies?{??//dependencies閉包 ????????classpath?'com.android.tools.build:gradle:3.0.0'?聲明gradle插件,插件版本號為3.0.0 ????????//gradle是一個強大的項目構建工具,不僅可以構建Android,還可以構建java,C++等 ????????//此處引用android的插件 ????????//?NOTE:?Do?not?place?your?application?dependencies?here;?they?belong ????????//?in?the?individual?module?build.gradle?files ????} } ? allprojects?{ ????repositories?{ ????????google() ????????jcenter()?//代碼托管庫:設置之后可以在項目中輕松引用jcenter上的開源項目 ????} } ? task?clean(type:?Delete)?{ ????delete?rootProject.buildDir }
2、app目錄下的build.gradle。
//?聲明是Android程序, //com.android.application?表示這是一個應用程序模塊,可直接運行 //com.android.library?標識這是一個庫模塊,是依附別的應用程序運行 apply?plugin:?'com.android.application' ? android?{ ????//程序在編譯的時候會檢查lint,有任何錯誤提示會停止build,我們可以關閉這個開關 ????lintOptions?{ ????????//即使報錯也不會停止打包 ????????abortOnError?false ????????//打包release版本的時候是否進行檢測 ????????checkReleaseBuilds?false ????} ? ????//編譯sdk的版本,也就是API?Level,例如API-19、API-20、API-21等等。 ????compileSdkVersion?26 ????//build?tools的版本,其中包括了打包工具aapt、dx等等。 ????//這個工具的目錄位于你的sdk目錄/build-tools/下 ????buildToolsVersion?'26.0.2' ? ????//關閉Android?Studio的PNG合法性檢查 ????aaptOptions.cruncherEnabled?=?false ????aaptOptions.useNewCruncher?=?false ? ????defaultConfig?{??//默認配置 ????????applicationId?"com.hebbe.espressotest"?//應用程序的包名 ????????minSdkVersion?22??//最小sdk版本,如果設備小于這個版本或者大于maxSdkVersion將無法安裝這個應用 ????????targetSdkVersion?26?//目標sdk版本,充分測試過的版本(建議版本) ????????versionCode?1??//版本號,第一版是1,之后每更新一次加1 ????????versionName?"1.0"?//版本名,顯示給用戶看到的版本號 ? ????????archivesBaseName?=?"weshare-$versionName"?//指定打包成Jar文件時候的文件名稱 ????????ndk?{ ????????????moduleName?"hebbewifisafe"???????????????????//設置庫(so)文件名稱 ????????????ldLibs?"log",?"z",?"m",?"jnigraphics",?"android" ????????????//引入庫,比如要用到的__android_log_print ????????????abiFilters?"armeabi",?"x86",?"armeabi-v7a"??????//,?"x86"??顯示指定支持的ABIs ????????????cFlags?"-std=c++11?-fexceptions"????????????????//?C++11 ????????????stl?"gnustl_static" ????????} ? ????????//當方法數超過65535(方法的索引使用的是一個short值, ????????//而short最大值是65535)的時候允許打包成多個dex文件,動態加載dex。這里面坑很深啊 ????????multiDexEnabled?true ? ????????//Instrumentation單元測試 ????????testInstrumentationRunner?"android.support.test.runner.AndroidJUnitRunner" ????} ? ????//默認的一些文件路徑的配置 ????sourceSets?{ ????????main?{ ????????????manifest.srcFile?'AndroidManifest.xml'//指定清單文件 ????????????res.srcDirs?=?['res']//指定res資源目錄 ????????????assets.srcDirs?=?['assets']????//asset資源目錄 ????????????jni.srcDirs?'src/main/jni'?????//jni代碼目錄 ????????????jniLibs.srcDir?'src/main/jniLibs'?//jni庫目錄 ????????????java.srcDirs?=?['src']//指定java源代碼目錄 ????????????resources.srcDirs?=?['src']//指定resource目錄 ????????????aidl.srcDirs?=?['src']//指定aidl目錄 ????????????renderscript.srcDirs?=?['src']//指定source目錄 ????????} ????????debug.setRoot('build-types/debug')//指定debug模式的路徑 ????????release.setRoot('build-types/release')//指定release模式的路徑 ????} ? ????//multiDex的一些相關配置,這樣配置可以讓你的編譯速度更快 ????dexOptions?{ ????????//讓它不要對Lib做preDexing ????????preDexLibraries?=?false ????????//開啟incremental?dexing,優化編譯效率,這個功能android?studio默認是關閉的。 ????????incremental?true ????????javaMaxHeapSize?"4g"?????//增加java堆內存大小 ????} ? ????signingConfigs?{//簽名配置 ????????release?{//發布版簽名配置 ????????????storeFile?file("fk.keystore")//密鑰文件路徑 ????????????storePassword?"123456"http://密鑰文件密碼 ????????????keyAlias?"fk"http://key別名 ????????????keyPassword?"123456"http://key密碼 ????????} ????????debug?{//debug版簽名配置 ????????????storeFile?file("fk.keystore") ????????????storePassword?"123456" ????????????keyAlias?"fk" ????????????keyPassword?"123456" ????????} ????} ? ????//指定生成安裝文件的配置,常有兩個子包:release,debug,注:直接運行的都是debug安裝文件 ????buildTypes?{ ????????//release版本的配置,即生成正式版安裝文件的配置 ????????release?{ ????????????zipAlignEnabled?true??//是否支持zip ????????????shrinkResources?true??//?移除無用的resource文件 ????????????minifyEnabled?false?//是否對代碼進行混淆,true表示混淆 ????????????//指定混淆時使用的規則文件; ????????????//?proguard-android.txt指所有項目通用的混淆規則,proguard-rules.pro當前項目特有的混淆規則 ????????????//release的Proguard默認為Module下的proguard-rules.pro文件 ????????????proguardFiles?getDefaultProguardFile('proguard-android.txt'),?'proguard-rules.pro' ????????????debuggable?false??//是否支持調試 ????????????//ndk的一些配置 ????????????ndk?{ ????????????????//?cFlags?"-std=c++11?-fexceptions?-O3?-D__RELEASE__"?//?C++11 ????????????????//?platformVersion??=?"19" ????????????????moduleName?"hebbewifisafe"?//設置庫(so)文件名稱 ????????????????ldLibs?"log",?"z",?"m",?"jnigraphics",?"android" ????????????????//引入庫,比如要用到的__android_log_print ????????????????abiFilters?"armeabi",?"x86",?"armeabi-v7a"http://,?"x86" ????????????????cFlags?"-std=c++11?-fexceptions"?//?C++11 ????????????????stl?"gnustl_static" ????????????} ????????????//采用動態替換字符串的方式生成不同的release.apk ????????????applicationVariants.all?{?variant?-> ????????????????variant.outputs.each?{?output?-> ????????????????????def?outputFile?=?output.outputFile ????????????????????if?(outputFile?!=?null?&&?outputFile.name.endsWith('release.apk'))?{ ????????????????????????def?timeStamp?=?new?Date().format('yyyyMMddHH'); ????????????????????????def?fileName?=?"WeShare-${defaultConfig.versionName}"?+?"-"?+?timeStamp?+?"-lj-"?+?".apk"; ????????????????????????output.outputFile?=?file("${outputFile.parent}/${fileName}") ????????????????????} ????????????????} ????????????} ????????????jniDebuggable?false??//關閉jni調試 ????????} ????????debug?{//debug版本的配置 ????????????minifyEnabled?false ????????????zipAlignEnabled?true ????????????shrinkResources?true?//?移除無用的resource文件 ????????????proguardFiles?getDefaultProguardFile('proguard-android.txt'),?'proguard-rules.pro' ????????????debuggable?true //??????????jniDebuggable?true ????????????ndk?{ ????????????????cFlags?"-std=c++11?-fexceptions?-g?-D?__DEBUG__"?//?C++11 ????????????} ????????????jniDebuggable?true ????????} ????} ? ????packagingOptions ????????{ ????????????exclude?'META-INF/ASL2.0' ????????????exclude?'META-INF/LICENSE' ????????????exclude?'META-INF/NOTICE' ????????????exclude?'META-INF/MANIFEST.MF' ????????} ???? ????compileOptions?{ ????????//在這里你可以進行?Java?的版本配置, ????????//以便使用對應版本的一些新特性 ????} ????productFlavors?{ ????????//在這里你可以設置你的產品發布的一些東西, ????????//比如你現在一共軟件需要發布到不同渠道, ????????//且不同渠道中的包名不同,那么可以在此進行配置; ????????//甚至可以設置不同的?AndroidManifest.xml?文件。 ????????hebbe?{ ????????} ????????googlePlay?{ ????????} ????????solo?{ ????????} ????} ????productFlavors.all?{ ????????flavor?->?flavor.manifestPlaceholders?=?[UMENG_CHANNEL_VALUE:?name] ????} ????//所謂ProductFlavors其實就是可定義的產品特性, ????//配合?manifest?merger?使用的時候就可以達成在一次編譯 ????//過程中產生多個具有自己特性配置的版本。 ? ????//上面這個配置的作用就是,為每個渠道包產生不同的?UMENG_CHANNEL_VALUE?的值。 } ? //指定當前項目的所有依賴關系:本地依賴、庫依賴、遠程依賴 //本地依賴:可以對本地Jar包或目錄添加依賴關系 //庫依賴:可以對項目中的庫模塊添加依賴關系 //遠程依賴:可以對jcenter庫上的開源項目添加依賴 //標準的遠程依賴格式是?域名:組織名:版本號 dependencies?{ ????implementation?fileTree(dir:?'libs',?include:?['*.jar'])?//本地依賴 ????//遠程依賴,com.android.support是域名部分,appcompat-v7是組名稱,26.1.0是版本號 ????implementation?'com.android.support:appcompat-v7:26.1.0' ????implementation?'com.android.support.constraint:constraint-layout:1.0.2' ????implementation?project(':hello')//庫依賴 ????testImplementation?'junit:junit:4.12'?//聲明測試用列庫 ????androidTestImplementation?'com.android.support.test:runner:1.0.1' ????androidTestImplementation?'com.android.support.test.espresso:espresso-core:3.0.1' } ? //聲明是要使用谷歌服務框架 apply?plugin:?'com.google.gms.google-services' ? //第三方依賴庫的本地緩存路徑 task?showMeCache?<{ ????configurations.compile.each?{?println?it?} } //使用maven倉庫。android有兩個標準的library文件服務器,一個jcenter一個maven。兩者毫無關系。 //jcenter有的maven可能沒有,反之亦然。 //如果要使用jcenter的話就把mavenCentral()替換成jcenter() repositories?{ ????mavenCentral() }
以上就是小編今天的分享了,希望可以幫助到大家。