网站搭建报价,制作网页网站项目介绍,网站页面策划,wordpress页面父级在使用Android studio创建项目会出现两个build.gradle#xff1a;
一. Project项目级别的build.gradle
#xff08;1#xff09;、buildscript{}闭包里是gradle脚本执行所需依赖#xff0c;分别是对应的maven库和插件。 闭包下包含#xff1a; 1、repositories闭包 2、d…在使用Android studio创建项目会出现两个build.gradle
一. Project项目级别的build.gradle
1、buildscript{}闭包里是gradle脚本执行所需依赖分别是对应的maven库和插件。 闭包下包含 1、repositories闭包 2、dependencies闭包 maven库 repositories 示列 repositories {maven { url http://maven.aliyun.com/nexus/content/repositories/releases/ }google()jcenter() //代码托管仓库mavenCentral()}插件dependencies示列
dependencies {classpath com.android.tools.build:gradle:4.0.0}2、allprojects{}闭包里是项目本身需要的依赖比如项目所需的maven库。 闭包下包含maven库repositories maven库示列 repositories {maven { url http://maven.aliyun.com/nexus/content/repositories/releases/ }google()jcenter() //代码托管仓库mavenCentral()}3、task clean(type: Delete){}
1、是gradle 运行clean时执行此处定义的task任务该任务继承自Delete删除根目录中的build目录。其中buildscript包含repositories闭包和dependencies闭包。2、repositories{}闭包配置远程仓库该闭包中声明了jcenter()和google()的配置其中jcenter是一个代码托管仓库上面托管了很多Android开源项目在这里配置了jcenter后我们可以在项目中方便引用jcenter上的开源项目从Android Studio3.0后新增了google()配置可以引用google上的开源项目。3、dependencies{}闭包配置构建工具该闭包使用classpath声明了一个Gradle插件由于Gradle并不只是用来构建Android项目因此此处引入相关插件来构建Android项目其中’4.0.0’为该插件的版本号可以根据最新的版本号来调整。
二. app模块下的build.gradle
1、apply 声明是Android程序 ,apply plugin表示应用了一个插件,一般分为两种类型application程序木块和library模块
1、apply plugin: ‘com.android.application’ 表示这是一个应用程序模块2、apply plugin: ‘com.android.library’ 标识这是一个库模块3、apply from: ‘config.gradle’ 标识这是一个自定义的配置gradle
2、android{}闭包下的配置 compileSdkVersion是用来指定编译应用程序时所使用的Android SDK版本。它对应于在项目的build.gradle文件中的android块中设置的值。一般情况下我们将其设置为最新的Android SDK版本以便能够使用最新的Android平台提供的功能和特性 compileSdkVersion和minSdkVersion比较compileSdkVersion表示当前项目的编译版本即你想让AndroidStudio以什么SDK版本去编译你的项目minSdkVersion表示当前项目支持的最低安卓系统版本 buildToolsVersion则是指构建工具的SDK版本也就是AndroidStudio中设置的AndroidSDK版本buildToolsVersion要高于compileSdkVersion版本这个很好理解如果编译版本高于AndroidStudio的SDK版本那AndroidStudio怎么给项目编译呢 targetSdkVersion app的目标sdk版本可以理解为当前app在这个版本是比较稳定的针对这个版本所开发的是安卓提供的前向兼容的主要手段它的作用就是当targetSdkVersion为20的app运行在系统版本号高于20的手机系统中app所执行的旧版本api在高版本可能不一样了但是安卓为了兼容在系统层会读取当前应用的targetSdkVersion当targetSdkVersion版本号低于当前版本就会执行旧版本的api不会导致由于系统的原因而让app运行失常。 defaultConfig{} 是 Android Gradle 插件中使用的默认配置块。它用于指定应用程序的默认配置参数。 defaultConfig {applicationId com.yxj.xxxxminSdkVersion rootProject.ext.android.minSdkVersiontargetSdkVersion rootProject.ext.android.targetSdkVersionversionCode 0000versionName 1.1.0000ndk {
// 1、armeabi-v7a:第七代及以上的ARM处理器2011年以后生产的大部分Android设备都使用。
// 2、arm64-v8a:第8代、64位ARM处理器很少设备三星GalaxyS6是其中之一。
// 3、armeabi:第5代、第6代的ARM处理器早期的手机用的比较多。
// 4、X86平板、模拟器用得比较多。
// 5、X86_64:64位得平板。
// abiFilters armeabi, x86,armeabi-v7a, arm64-v8ax86_64}//Android应用程序默认具有SingleDex支持,这限制了您的应用程序只有65536个方法(引用).所以multidexEnabled true只是意味着你现在可以在你的应用程序中编写超过65536个方法(引用).multiDexEnabled true}
自动化打包配置signingConfigs{}
signingConfigs {debug {storeFile file(F:\\Android_work\\work\\xxx.keystore)storePassword 000000keyAlias keyAlias //key的别名keyPassword 000000v1SigningEnabled truev2SigningEnabled true}release {storeFile file(F:\\Android_work\\work\\xxx.keystore)storePassword 000000keyAlias keyAlias //key的别名keyPassword 000000v1SigningEnabled truev2SigningEnabled true}}lintOptions{} 用于配置静态代码分析工具Lint的参数和行为
lintOptions {// true--关闭lint报告的分析进度quiet true// true--错误发生后停止gradle构建abortOnError false// true--只报告errorignoreWarnings true// true--忽略有错误的文件的全/绝对路径(默认是true)//absolutePaths true// true--检查所有问题点包含其他默认关闭项checkAllWarnings true// true--所有warning当做errorwarningsAsErrors true// 关闭指定问题检查disable TypographyFractions,TypographyQuotes// 打开指定问题检查enable RtlHardcoded,RtlCompat, RtlEnabled// 仅检查指定问题check NewApi, InlinedApi// true--error输出文件不包含源码行号noLines true// true--显示错误的所有发生位置不截取showAll true// 回退lint设置(默认规则)lintConfig file(default-lint.xml)// true--生成txt格式报告(默认false)textReport true// 重定向输出可以是文件或stdouttextOutput stdout// true--生成XML格式报告xmlReport false// 指定xml报告文档(默认lint-results.xml)xmlOutput file(lint-report.xml)// true--生成HTML报告(带问题解释源码位置等)htmlReport true// html报告可选路径(构建器默认是lint-results.html )htmlOutput file(lint-report.html)// true--所有正式版构建执行规则生成崩溃的lint检查如果有崩溃问题将停止构建checkReleaseBuilds true// 在发布版本编译时检查(即使不包含lint目标)指定问题的规则生成崩溃fatal NewApi, InlineApi// 指定问题的规则生成错误error Wakelock, TextViewEdits// 指定问题的规则生成警告warning ResourceAsColor// 忽略指定问题的规则(同关闭检查)ignore TypographyQuotes}compileOptions{}是一个用于配置 Gradle 编译选项的对象。它可以在 Gradle 构建文件中使用 compileOptions {//配置 Java 编译参数sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8// Java 编译器标志参数compilerArgs.addAll([-Xlint:unchecked, -Xlint:deprecation])//配置 Kotlin 编译参数kotlinOptions {jvmTarget 1.8freeCompilerArgs [-Xopt-inkotlin.RequiresOptIn]//配置 C 语言编译参数apply plugin: cppcppCompilerArgs.add(-stdc99)cppCompilerArgs.add(-Wall)//配置 C 编译参数apply plugin: cppcppCompilerArgs.add(-stdc11)cppCompilerArgs.add(-Wall)}buildTypes{}可以配置我们需要的构建类型例如我们常用到的 “测试类型” 和 “本地类型”则可以使用如下配置
minifyEnabled表明是否对代码进行混淆true表示对代码进行混淆false表示对代码不进行混淆默认的是false。proguardFiles 指定混淆的规则文件这里指定了proguard-android.txt文件和proguard-rules.pro文件两个文件proguard-android.txt文件为默认的混淆文件里面定义了一些通用的混淆规则。proguard-rules.pro文件位于当前项目的根目录下可以在该文件中定义一些项目特有的混淆规则。buildConfigField用于解决Beta版本服务和Release版本服务地址不同或者一些Log打印需求控制的。例如配置buildConfigField(“boolean”, “LOG_DEBUG”, “true”)这个方法接收三个非空的参数第一个确定值的类型第二个指定key的名字第三个传值调用的时候BuildConfig.LOG_DEBUG即可调用。debuggable表示是否支持断点调试release默认为falsedebug默认为true。jniDebuggable表示是否可以调试NDK代码使用lldb进行c和c代码调试release默认为falsesigningConfig设置签名信息通过signingConfigs.release或者signingConfigs.debug配置相应的签名但是添加此配置前必须先添加signingConfigs闭包添加相应的签名信息。renderscriptDebuggable表示是否开启渲染脚本就是一些c写的渲染方法默认为false。renderscriptOptimLevel表示渲染等级默认是3。pseudoLocalesEnabled是否在APK中生成伪语言环境帮助国际化的东西一般使用的不多。applicationIdSuffix和defaultConfig中配置是一的这里是在applicationId 中添加了一个后缀一般使用的不多。versionNameSuffix表示添加版本名称的后缀一般使用的不多。zipAlignEnabled表示是否对APK包执行ZIP对齐优化减小zip体积增加运行效率release和debug默认都为true。 buildTypes {//发布版本类型release {minifyEnabled falseproguardFiles getDefaultProguardFile(proguard-android.txt), proguard-rules.pro}// 测试类型给测试人员debug{minifyEnabled falseproguardFiles getDefaultProguardFile(proguard-android.txt), proguard-rules.pro}// 本地类型和后端联调使用local{minifyEnabled falseproguardFiles getDefaultProguardFile(proguard-android.txt), proguard-rules.pro}}packagingOptions{}是一个用于配置Android项目的属性用于控制应用程序打包过程中的资源和依赖项的处理方式。这个属性通常用于解决资源冲突和冗余问题。 在Android中一个应用程序可能会依赖多个库或模块每个库或模块都可能包含一些相同的资源文件或类文件。当编译和打包应用程序时如果存在冲突的资源文件或类文件编译器将会抛出错误。packagingOptions提供了一种配置方式让开发者能够控制冲突的处理方式。 // 配置packagingOptionspackagingOptions {//exclude用于排除特定的资源文件或类文件使其不被打包到最终的APK文件中。可以使用通配符来匹配文件名或文件路径exclude META-INF/LICENSE.txt // 排除名为LICENSE.txt的文件exclude META-INF/*.txt // 排除所有以.txt结尾的文件//merge用于控制冲突资源文件的合并策略。可以使用0表示不合并使用1表示合并使用2表示强制合并。merge resources.arsc 0 // 不合并resources.arsc文件merge assets/strings.txt 1 // 合并assets目录下的strings.txt文件merge assets/*.txt 2 // 强制合并assets目录下所有以.txt结尾的文件//pickFirst用于控制冲突资源文件的优先选择策略。可以使用0表示选择第一个出现的文件使用1表示选择最后一个出现的文件使用2表示选择全部文件。pickFirst res/values/strings.xml 0 // 选择第一个出现的strings.xml文件pickFirst assets/logo.png 1 // 选择最后一个出现的logo.png文件pickFirst assets/*.png 2 // 选择全部以.png结尾的文件//doNotStrip Gradle 在构建 APK 时将会保留这些被标记的文件和文件夹并不会进行剥离操作。doNotStrip */armeabi/libYTCommon.sodoNotStrip */armeabi-v7a/libYTCommon.sodoNotStrip */x86/libYTCommon.sodoNotStrip */arm64-v8a/libYTCommon.so}sourceSets{}可以指定需要被编译的源文件不在指定路径下的源文件将会被排除即不会被编译。Gradle通过SourceSets实现了Java项目的目录布局定义
sourceSets {main {manifest.srcFile AndroidManifest.xmljava.srcDirs [src]resources.srcDirs [src]aidl.srcDirs [src]renderscript.srcDirs [src]res.srcDirs [res]assets.srcDirs [assets]jniLibs.srcDirs [libs]//如果我们不想用默认的可以重新指定按如下方式就可以修改目录布局结构java {srcDir src/java // 指定源码目录}resources {srcDir src/resources //资源目录}}aaptOptions{} aapt 全称为 Android Asset Packaging Tool即为Android资源打包工具。可以通过其来进行配置打包的细节。
aaptOptions {//给 aapt 执行时添加额外参数添加的参数可通过 aapt --help 进行查看additionalParameters --auto-add-overlayadditionalParameters --rename-manifest-package,com.zinc.test // 会将包名更改为 com.zinc.test//设置线程数cruncherProcesses 4//设置是否无法找到配置条目则强制aapt返回错误。failOnMissingConfigEntry true//设置忽略的资源// 忽略掉 png 后缀的图像只会排除 assets 下的资源res下的资源不会排除ignoreAssets *.png//设置忽略的资源 noCompress foo, barignoreAssetsPattern !.svn:!.git:.*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~// 忽略掉 png 后缀的图像只会排除 res 下的资源assets下的资源不会排除ignoreAssetsPattern *.png//是否对资源进行压缩默认不对jpg、png压缩。如果传入’’则表明全部资源不会进行压缩。压缩后的资源可以通过 aapt l -v apk路径 进行查看压缩的细节。// 不对 bat 进行压缩noCompress .bat}productFlavors{}闭包多个渠道配置 productFlavors是android{}中的一个扩展属性主要用来让同一套代码可以打包成不同的apk包又可以成为变体Variants。其实该productFlavors属性是与buildTypes配合使用的 buildFeatures
3、dependencies{}闭包是指在开发 Android 应用程序时所需的各种库和模块。这些依赖项可以帮助开发者实现不同的功能和特性例如网络请求、图形绘制、数据库操作等
dependencies {//引入文件树这里会把libs目录下所有的jar包自动引入implementation fileTree(dir: libs, include: [*.jar])implementation com.android.support:appcompat-v7:26.1.0implementation com.android.support.constraint:constraint-layout:1.1.2testImplementation junit:junit:4.12androidTestImplementation com.android.support.test:runner:1.0.2androidTestImplementation com.android.support.test.espresso:espresso-core:3.0.2//引入指定jar包文件这里传递是相对路径即相当于module下的build.gradle文件的路径如以下写法则是引入与module下的build.gradle同路径下的jar包implementation files(crazymo.jar)//引入依赖库Module方式1implementation project(:libcrazymo) implementation project(path::libcrazymo)
}
gradle3.0中compile依赖关系已被弃用被implementation和api替代provided被compile only替代apk被runtime only替代。
runtime only——只打包不参与编译用于指定Gradle 不与应用的apk一起打包的依赖库如果运行时无需依赖此依赖库这将有助于apk大小的优化。compile only——只编译不打包到apkapi——跟2.x版本的 compile完全相同implementation——只能在内部使用此模块比如我在一个library中使用implementation依赖了gson库且我的主项目依赖了library那么主项目就无法访问gson库中的方法这样的好处是编译速度会加快推荐使用implementation的方式去依赖如果你需要提供给外部访问那么就使用api依赖即可。除了使用静态依赖的方式还可以使用动态的形式进行依赖实际项目中不太推荐以下就是使用另一种形式进行依赖虽然使用三句话都配置了相同的group和module的依赖不过编译不会出错因为Groovy会自动为你选择最新版本的并排除重复的。