Android学习笔记0--配置1--gradle
来源:互联网 发布:杨幂假唱知乎 编辑:程序博客网 时间:2024/06/14 13:02
// https://developer.android.com/studio/build/index.htmlapply plugin: 'com.android.application'//apply plugin: 'com.android.library'// Android库插件def getDateTime() {// 获取时间的函数 def datetime = new Date().format("yyyy-MM-dd HH-mm-ss", TimeZone.getTimeZone("UTC")) return datetime}android { compileSdkVersion 25 buildToolsVersion "23.0.3" dataBinding {// 原生数据绑定框架 enabled false// 默认为false } externalNativeBuild {// native编译支持,注意manifest中android:supportsRtl属性 cmake { // path "CMakeLists.txt" } } aaptOptions { cruncherEnabled false// PNG图片是否可以大量快速的处理 cruncherProcesses 4// 快速处理,可能需要更多的内存和CPU。默认0,值越大处理越快 ignoreAssetsPattern "!.svn:!.git:!.ds_store:!*.scc:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~" } lintOptions {// Lint(静态代码扫描)工具可选项参数 abortOnError false// lint时候即使报错也不会停止打包,防止编译的时候莫名的失败 checkReleaseBuilds false// 打包release版本的时候是否进行检测(抄来的) } compileOptions {// 编译时的可选项参数 sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } dexOptions {// Dex可选项参数 // http://stackoverflow.com/questions/37522668/Android-dexoptions-incremental-property-is-deprecated preDexLibraries true maxProcessCount 8 javaMaxHeapSize "4g"// 设置java堆内存大小,4GB是DEX操作的最大堆大小 } packagingOptions {//去掉MEAT-INF里边指定的文件,解决有时候不同jar的MEAT-INF里边的文件会重复导致打包报错 exclude 'META-INF/MANIFEST.MF' exclude 'META-INF/LICENSE' exclude 'META-INF/NOTICE' exclude 'META-INF/ASL2.0' } signingConfigs {// 签名配置,为了安全,这里通过手动输入密钥的方式 release {//发布版签名配置 storeFile file("/Users/mine/.android/mine.keystore")// 密钥文件路径 storePassword "576756688"// 密钥文件密码 keyAlias "mine"// key别名 keyPassword "576756688"// key密码 } debug {//debug版签名配置 storeFile file("/Users/mine/.android/mine.keystore")// 密钥文件路径 storePassword "576756688"// 密钥文件密码 keyAlias "mine"// key别名 keyPassword "576756688"// key密码 } } buildTypes {// Gradle构建的变体数量等于Dimensions数量的乘积(>=1)type数量的乘积,优先级依次降低 debug { signingConfig signingConfigs.debug// 设置签名信息 ext.enableCrashlytics = false// 禁用错误统计 ext.alwaysUpdateBuildId = true// 进行每一次编译后就更新错误统计的ID applicationIdSuffix ".debug"// 给applicationId添加了一个后缀 versionNameSuffix "-debug"// 在versionName后边添加"-debug"的后缀 manifestPlaceholders = [UMENG_CHANNEL_VALUE: "debug"] //shrinkResources true// 压缩资源--移除无用的资源 //multiDexEnabled true// dex突破65535的限制 zipAlignEnabled true// 让资源按4字节对齐,可减少应用在运行时的内存消耗 minifyEnabled true// 压缩代码--进行混淆 useProguard false// 停用proguard debuggable true// 是否生成debug版APK jniDebuggable true// 生成的APK是否支持调试本地代码 } release { //initWith debug// 从debug中拷贝其已有的debug属性 signingConfig signingConfigs.release// 设置签名信息 ext.enableCrashlytics = true// 启用错误统计 ext.alwaysUpdateBuildId = true// 进行每一次编译后就更新错误统计的ID applicationIdSuffix ".release"// 给applicationId添加了一个后缀 versionNameSuffix "-relase"// 在versionName后边添加"-relase"的后缀 manifestPlaceholders = [UMENG_CHANNEL_VALUE: "release"] //shrinkResources true// 压缩资源--移除无用的资源 //multiDexEnabled true// dex突破65535的限制 zipAlignEnabled true// 让资源按4字节对齐,可减少应用在运行时的内存消耗 minifyEnabled true// 压缩代码--进行混淆 useProguard true// 启用proguard proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' debuggable false// 是否生成debug版APK jniDebuggable false// 生成的APK是否支持调试本地代码 } } defaultConfig {// // 默认APP配置(提供所有版本的app使用--如有些属性没手动设置的话,如果manifest有就从manifest中读取) ndk {// ndk配置 moduleName "default_so"// 生成的so名字,使用System.loadLibrary("XXX") stl "gnustl_static"// GNU标准STL ldLibs "log", "android"// 添加需要的依赖库文件,因为有log打印等 abiFilters "armeabi", "armeabi-v7a", "x86", "x86_64"// 输出指定abi体系结构下的so库 } minSdkVersion 14 targetSdkVersion 25 testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" applicationId "cn.hisuits.andr.test"// 变体的ID,不同ID代表不同APP(即使包名一样也是不同产品) versionName "1.0"// 版本号名称 versionCode 1// 版本号代码 applicationIdSuffix ".default"// 不同变体有不同包名称 versionNameSuffix "-default"// 不同变体有不同版本名称 manifestPlaceholders = [UMENG_CHANNEL_VALUE: "default"]// 不同变体有不同渠道号 buildConfigField "boolean", "AUTO_UPDATE_FLAG", "true"// 是否启用自动更新的公共字段 buildConfigField "String", "AUTO_UPDATE_URL", "\"http://www.android.com\""// 获取自动更新的公共URL } flavorDimensions "type", "mode"// 变体APP特点:app的信息不一致,abi或分辨率一致 productFlavors {// 渠道包配置,其属性与defaultConfig一致,defaultConfig属于ProductFlavor类 demo { dimension "type" versionNameSuffix "-demo" } full { dimension "type" versionNameSuffix "-full" } // 参考http://tech.meituan.com/mt-apk-adaptation.html baidu { dimension "mode" manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"]// 不同变体有不同渠道号 applicationIdSuffix ".baidu"// 不同产品有不同包名称 versionNameSuffix "-baidu"// 在versionName后边添加的后缀 buildConfigField "String", "AUTO_UPDATE_URL", "\"http://www.android.com\""// 获取自动更新的URL buildConfigField "boolean", "AUTO_UPDATE_FLAG", "false"// 不启用自动更新的字段 } qihoo360 { dimension "mode" manifestPlaceholders = [UMENG_CHANNEL_VALUE: "qihoo360"]// 不同变体有不同渠道号 applicationIdSuffix ".qihoo360"// 不同产品有不同包名称 versionNameSuffix "-qihoo360"// 在versionName后边添加的后缀 } special { dimension "mode" manifestPlaceholders = [UMENG_CHANNEL_VALUE: "special"]// 不同变体有不同渠道号 applicationIdSuffix ".special"// 不同产品有不同包名称 versionNameSuffix "-special"// 在versionName后边添加的后缀 } } productFlavors.all {// 统一设置manifestPlaceholders,上面采用单独设置 //flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name] } splits {// splits类型,对不同的平台或分辨率等单独编译出app(可减少app的大小,但是对应的兼容性差一些)。变体APP特点:app的abi或分辨率不一致,信息一致 abi {// 应用二进制接口ABI(Application Binary Interface) enable true exclude "mips" reset() include 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a' // 选择编译APK的ABIs universalApk true// universalApk(万能apk,即包含了所有的abi)只有abi有,默认为false。density默认会生成万能apk } density { enable true exclude "ldpi" reset() include "xxhdpi", "xxxhdpi" compatibleScreens 'small', 'normal', 'large', 'xlarge' } } ext.abiCodes = [mips: 1, x86: 2, 'x86_64': 3, 'armeabi-v7a': 4, 'arm64-v8a': 5] ext.densityCodes = ['mdpi': 1, 'hdpi': 2, 'xhdpi': 3, 'xxhdpi': 4, 'xxxhdpi': 5] // 过滤变体APP variantFilter { variant -> def names = variant.flavors*.name // 如果要检查具体的类型, 使用variant.buildType.name == "<buildType>" if (names.contains("demo") && names.contains("debug")) { // setIgnore(true)// build type中将会忽略过滤到的类型 } } // 多app合并策略https://developer.android.com/studio/build/manifest-merge.html sourceSets {// 资源文件目录指定,可设置由eclipse转到AS下目录的映射 // 插件默认实现了两个SourceSet:main和androidTest main {// 每个[]中可设置多个路径 manifest.srcFile 'AndroidManifest.xml' assets.srcDirs = ['assets'] jniLibs.srcDirs = ['libs'] java.srcDirs = ['src'] aidl.srcDirs = ['src'] res.srcDirs = ['res'] resources.srcDirs = ['src'] renderscript.srcDirs = ['src'] } androidTest.setRoot('tests') instrumentTest.setRoot('tests') // 可设置不同产品有不同目录(功能还不是特别清楚,记录作为日后学习的笔记) debug.setRoot('build-types/debug') release.setRoot('build-types/release') }}dependencies { // 设定为所有变体依赖的公共模块XXX // compile project(':XXX')// 编译额外项目XXX // 设定为不同变体有不同依赖模块XXX // baiduCompile project(':XXX') // 设定为所有变体的公共库 compile fileTree(dir: 'libs', include: ['*.jar'], exclude: ['android-*.jar']) // compile files('libs/zxing.jar') compile 'com.android.support:appcompat-v7:25.3.1' // 设定为不同变体(这里为Test,系统会自动创建Test)指定不同的jar包 testCompile 'junit:junit:4.12' androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' })}
阅读全文
0 0
- Android学习笔记0--配置1--gradle
- build.gradle配置学习笔记
- Android Gradle学习1--android studio中的相关配置
- Android for Gradle 学习笔记 #1 概念篇
- Gradlle Gradle for Android 学习笔记(二) Gradle Wrapper 入门
- Gradle for Android学习笔记(一)
- android gradle学习的新知识 笔记一下
- 深入理解Android之Gradle学习笔记
- 2016年5月22日学习笔记-Android build.gradle配置进阶
- Gradle学习笔记 Gradle命令行
- android gradle 配置 build.gradle
- 学习笔记——jenkins+gradle+git配置
- Android学习笔记【配置】
- Android开发笔记之gradle的buildTypes内部配置
- spring boot gradle 学习笔记(1)
- Android Studio3.0版本gradle配置
- Android Studio3.0 Gradle 4.1配置
- gradle学习笔记
- 网站开发用到的ip知识
- 基于前后端分离的ajax+springMVC+ftp文件(含图片)上传
- 欢迎使用CSDN-markdown编辑器
- 搭建mini的 FastDFS 分布式文件服务器:
- 微信分享等设置 -- 缩略图等
- Android学习笔记0--配置1--gradle
- Java服务端推送和web端推送——GoEasy免费推送服务
- Codeforces 754A Lesha and array splitting
- AngularJs日常bug修复记录: 使用第三方插件按需加载(oclazyload简单使用)
- flv2fmp4解决方案
- SpringMVC4+Hibernate4运行报错Could not obtain transaction-synchronized Session for current thread
- I2C总线信号时序总结
- 关于 git的一些常用 需要的时候看看
- 解决MAC用HDMI连接显示器就没声音问题