Android gradle测试
16lz
2021-01-23
apply plugin: 'com.android.application'apply from: '../configradle/board.gradle'def getData = { -> def date = new Date() def formatteDate = date.from('yyyMMdd') return formatteDate}android { //处理ndk目录问题// sourceSets.main {// // AndroidSourceSet代表了Java、aidl和Renderscript源以及Android和非Android(Java风格的)资源的逻辑组。// jni.srcDirs = []// jniLibs.srcDir 'src/main/libs'// }// sourceSets {// main {// jniLibs.srcDir 'libs'// }// }// 被配置为从编译中排除某些包。// sourceSets {// main {// java {// exclude 'com/wangdong/**'// }// }// } //如果使用请了解demo地址:https://github.com/adonis-lsh/DataBindingDemo// dataBinding {// enabled = true// } //指定DEX工具的选项,例如启用库预调试.// dexOptions {//// //最大堆内存// javaMaxHeapSize "8g"// //是否支持大工程模式// jumboMode = true// //预编译 是否需要预Dex库。这可以改进增量构建,但是干净构建可能会慢一些// preDexLibraries = true// //线程数 运行dex时要使用的线程数。默认为4。// threadCount = 8// }// lintOptions {// // Turns off checks for the issue IDs you specify.关闭对您指定的问题ID的检查。// disable 'TypographyFractions','TypographyQuotes'// // Turns on checks for the issue IDs you specify. These checks are in// // addition to the default lint checks. //打开对您指定的问题ID的检查。这些检查是对//默认的lint检查的补// enable 'RtlHardcoded', 'RtlCompat', 'RtlEnabled'// 要仅对问题ID的子集启用检查并忽略所有其他问题,// //而是使用'check'属性列出问题ID。此属性将覆盖// //您使用上述属性启用或禁用的所有问题ID。// check 'NewApi', 'InlinedApi'// // If set to true, turns off analysis progress reporting by lint.如果设置为true,则关闭lint的分析进度报告。// quiet true// // if set to true (default), stops the build if errors are found.如果设置为true(默认值),则在发现错误时停止构建。// abortOnError false// // if true, only report errors.如果为true,则仅报告错误。// ignoreWarnings true// }// lint检查// lintOptions{// checReleaseBuild false// abortOnError false// }// compileSdkVersion 28 //buildToolsVersion是根据我们sdk下载是否安装了sdk-tool版本号使用// buildToolsVersion "28.0.3" defaultConfig { applicationId "com.wangdong.mijiqiqi"// minSdkVersion 18// targetSdkVersion 28// versionCode 1// versionName "1.0" //testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" //64k问题 需要配置依赖和Application// multiDexEnabled true } buildTypes { debug { // 此生成类型是否应生成可调试的apk。就是用debug打包出来没有指定签名也可以安装,使用默认签名 //这样,您就可以在安全的 Android 设备上调试应用,并使用常规调试密钥库配置 APK 签名。 //debuggable true // id添加后缀 例如:package="com.wangdong.mijiqiqi.debugStaging"可以调试安装在安装一个 //即使 productFlavors中 添加了不一样的applicationId "com.wangdong.mijiqiqi.huawei" // 这个后缀还是会生效 package="com.wangdong.mijiqiqi.huawei.debugStaging"// applicationIdSuffix ".debugStaging" minifyEnabled true //Zipalign优化// zipAlignEnabled true // 移除无用的resource文件// shrinkResources false// proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' //BuildConfig添加枚举变量 buildConfigField 'com.wangdong.mijiqiqi.BusinessModule', 'BUSINESS_MODULE', 'com.wangdong.mijiqiqi.BusinessModule.' + BUSINESS_MODULE // 自定义输出配置 多渠道打包// applicationVariants.all { variant ->// variant.outputs.all {// def fileName = "onbuer_v${rootProject.ext.android.versionName}.${rootProject.ext.android.versionCode}_${variant.productFlavors[0].name}.apk"// outputFileName = fileName// }// } } release { minifyEnabled true //Zipalign优化 zipAlignEnabled true // 移除无用的resource文件 shrinkResources false// proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } wangdong { minifyEnabled true// proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } //由于需要导入org.apache.httpcomponents, 它内部包含META-INF/DEPENDENCIES文件,在打包时会发生 //冲突,所以在这里需要把他的META-INF/DEPENDENCIES排除// packagingOptions{// exclude 'META-INF/DEPENDENCIES'// } //程序打包// android.applicationVariants.all { variant ->// variant.outputs.all{// //因为groovy lang 后缀判断是用endsWithAmy方法 使用endsWitch回报错//// if (outputFileName.endsWitch(".apk")){// if (outputFileName.endsWithAny(".apk")){// def apkType = ""// if (variant.buildType.name == "debug"){// apkType = "t"// }else if (variant.buildType.name == "release"){// apkType = "c"// }//// def isHasLog = "-l"// def isHasPrinter = "-p"// def fileName = "wangdong" + "-"+// variant.versionName.replaceAll(".*[0-9]:","") + "-" +// apkType +// isHasLog +// isHasPrinter + "-"+// variant.versionName + ".apk"// outputFileName = fileName// }// }// }}dependencies { //1.让项目在构建时候,不使用强制版本,然后报错// configurations.all {// resolutionStrategy{// failOnVersionConflict()// }// } //1.排除依赖中 module 是就是name,下面就是排除最小的依赖,// compile('org.hibernate:hibernate-core:3.6.3.Final'){// exclude group:"org.slf4j" , module:"slf4j-api",transitive = false// } //强制指定一个版本// configurations.all{// resolutionStrategy{// force 'org.slf4j:slf4j-api:1.7.24'// }// } //最新依赖// implementation fileTree(dir: 'libs', include: ['*.jar'])// implementation 'androidx.appcompat:appcompat:1.0.2'// implementation 'androidx.constraintlayout:constraintlayout:1.1.3' testImplementation 'junit:junit:4.12'// androidTestImplementation 'androidx.test.ext:junit:1.1.0'// androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' //旧依赖 implementation fileTree(include: ['*.jar'], dir: 'libs')// implementation 'com.android.support:appcompat-v7:26.1.0' implementation 'com.android.support.constraint:constraint-layout:1.1.3'// testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'// 从新开始// 如果您有多个库,则其清单优先级与依赖顺序(库出现在 Gradle dependencies 块中的顺序)匹配。 implementation 'com.android.support:appcompat-v7:28.0.0' implementation project(path: ':wdbase')// implementation 'com.android.support:multidex:1.0.3' if (!isModule) { implementation project(path: ':yating') implementation project(path: ':xiaoting') }//依赖 /** 使用说明: * 1.本地Module Library依赖 * implementation project(':librarydict') //当module比较多时候构建非常耗时建议控制module的依赖数量 * 2.本地二进制library依赖:jar和aar * 依赖jar:implementation fileTree(dir:'libs',include:['*.jar']) //可以一条依赖引入libs下所有的jar * implementation files('libs/dict-v120.jar','libs/download-v151.jar')//也可以指定依赖一个或几个jar * 依赖aar:首先要在module中的build.gradle中增加如下语句 * repositories { flatdir { dirs 'libs' }} * * implementation fileTree(dir: 'libs',include:['*.aar'])//可以一条依赖引用libs下所有的aar * implementation (name :'library-downlad',ext 'aar') //也可以指定依赖某一个aar * 3.远程二进制library依赖 * implementation group:'com.android.demo',nme:'library-dict',version:'1.2.0' //依赖明确的 标明和版本 * implementation 'com.android.demo:library-dict:1.2.0' //通常按照如下方式简写即可 * implementation 'com.android.demo:llibrary-dict:+' // 也可以把版本号改成"+",依赖始终是最新的,弊端是编译通不过,和变更不稳定.构建效率低一下 * * //对于有很多App,依赖内部统一sdk情况是,可以将gradle文件放在放在服务器,远程控制统一依赖版本,避免因为各个App依赖的SDK版本不统一导致很难管理和维护 * //远程地址:http://172.28.2.93/remote/library-config.gradle * * ext.liararyBuildConfig = [ * deps:[ * "dict-library" : 'com.android.demo.:library-dict:1.2.0', * "download-library" : 'com.android.demo:library-download:1.5.1', * ] * ] * * //项目根目录下的build.gradle全局引入: * apply "ip第hi/remote/library-config.gradle" * * ext { dependencies = [ * "dict-library" : libraryBuildconfig.deps.'dict-library', * "download-library" : libraryBuildConfig.deps.'download-library',] } * * //在module的build.gradle中依赖 * implementation rootProject.ext.dependencies ["dict-library"] * implementation rootProject.ext.dependencies ["download-library"] * * 不同依赖配置方式的区别说明 * compile, implementation, api * * 从Android Gradle plugin 3.0开始,对于依赖包的配置方式,引入了implementation和api * 使用android studio新建项目时候,原来用compile的地方全部默认被替换成了implementation * * 比如:原来 compile fileTree (dir: 'libs', include: ['*.jar']) * 现在 implementation fileTree (dir:'libs', include: ['*.jar']) * * 新增加依赖配置方式还有: provided , api , apk ,compileOnly , runtimeOnly , 渠道名+ Compile, * 差异主要在于构建内容和参与构建的时机,多样的配置方式满足了开发者的花样需求,具体如下 * * 1.implementation 依赖包中的依赖的library只能在依赖包中内部使用, 主工程无法访问依赖包依赖的library中的类和方法, * 使用场景:SDK开发中对第三方library有依赖,希望控制sdk的大小,不想应为和宿主工程引用同一个依赖包版本不同导致编译冲突时特别合适 * 而且如果因为依赖包依赖的library有改动时,只会重新编译library和依赖包,不需要从新编译宿主,所以构建速度回快一些 * * 对于各个渠道还可以单独依赖属于渠道特有的包,通过 渠道名+ implementation指定, 比如 debugiImplementation //调试渠道依赖 * 再比如:releaseImplementarion // 正式版依赖 testImplementation //测试版依赖 * * 2.api (原来compole) 会将依赖包中依赖和其他libtrary一同编译和打包到apk中,宿主工程可以使用依赖包中的其他library的类和方法 * 对于各个渠道还可以单独依赖属于渠道特有的包,通过 渠道名+ api/compile 指定 ,如果 debugApi, releaseApi ,testApi * * 3.compileOnly (provided) 主要是为了方便程序把编译通过的,不会打包到apk中,使用场景:android系统有这个API,但编译时需要引入才能构建通过, * 比如系统的APK依赖framevork.jar,gson库等 * * 4.runtimeOnly (原来apk) 只是打包到apk中,不参与 编译,不能再代码中直接调用依赖的代码,否则会在编译时候出错,一遍很少使用 * * */ //依赖 /*为了解决 项目在创建时候 就报错Resolved versions for app (26.1.0)and test app (27.1.1)differ 报错问题 * 说明是版本冲突,在External Libraries中发现了 * com.android.support:support-annotations:27.1.1@jar * 和com.android.support:support-annotations:26.1.0@jar 冲突 想把27.1.1删除掉, * 但是在此打开时候换有出现了27.1.1 经过网上查找解决办法 androidTestCompile('com.android.support:support-annotations:26.1.0') { force = true } 说明:新添加了插件 Depencencies Version Checker 使用在下AS下面VersionChecker中的左边输入项目build.gradle和模块build.gradle * 然后点击下面按钮就会 把依赖的版本号地址显示出来,点击依赖就可以转到浏览器里面浏览 * 项目如果依赖的android自己的依赖,就可以查看文挡 在文挡右上角就有版本号了 implementation 'com.android.support:recyclerview-v7:26.1.0'*/}
apply from: '../configradle/singleConfigs.gradle'//./表示当前路径,../表示父级目录,/表示根级android { compileSdkVersion rootProject.ext.android.compileSdkVersion buildToolsVersion rootProject.ext.android.buildToolsVersion defaultConfig { minSdkVersion rootProject.ext.android.minSdkVersion targetSdkVersion rootProject.ext.android.targeSdkVersion versionCode rootProject.ext.android.versionCode versionName rootProject.ext.android.versionName } //插件会尝试将应用的变体与本地库依赖项的变体进行匹配。由于变体感知依赖项匹配依赖于您为类型维度命名的方式,// flavorDimensions 'board','api', 'mode' flavorDimensions 'board' //产品风味 就是产品渠道 也就是,可以添加单独id也就是包名,签名,渠道标识, productFlavors { XIAOMI_A1 { //插件会尝试将应用的变体与本地库依赖项的变体进行匹配。由于变体感知依赖项匹配依赖于您为类型维度命名的方式, dimension 'board' //在build/generated/source/buildConfig/XIAOMI_A1/debug或release/com.wangdong.mijiqiqi/buildConfig buildConfigField 'String', 'BOARD', '"XIAOMI-A1"' //签名文件 signingConfig signingConfigs.XIAOMI_A1 manifestPlaceholders = [BUGLY_APP_CHANNEL: "XIAOMI_A1"] } HUAWEI_A2 {//注意:您仍然需要在 main/ 清单文件中使用 package 属性指定软件包名称。//此外,您还必须在源代码中使用该软件包名称来引用 R 类,或解决任何相关活动或服务注册。//这样,您便可以使用 applicationId 为每个产品特性提供唯一的 ID 用于打包和分发,而不必更改您的源代码。// applicationId "com.wangdong.mijiqiqi.huawei" // id添加后缀 例如:package="com.wangdong.mijiqiqi.debugStaging"可以调试安装在安装一个 //即使 productFlavors中 添加了不一样的applicationId "com.wangdong.mijiqiqi.huawei" // 这个后缀还是会生效 package="com.wangdong.mijiqiqi.huawei.debugStaging"// applicationIdSuffix ".debugStaging" //版本名后缀。在计算变体的最终版本名时,它会附加到“基本”版本名称。// versionNameSuffix "-demo" dimension 'board' buildConfigField 'String', 'BOARD', '"HUAWEI-A2"' signingConfig signingConfigs.HUAWEI_A2 //占位符 其他地方使用"${BUGLY_APP_CHANNEL}" manifestPlaceholders = [BUGLY_APP_CHANNEL: "HUAWEI_A2"] }// VIVO_A3 {//// dimension 'mode'// buildConfigField 'String','BOARD','"VIVO-A3"'// // signingConfig signingConfigs.HUAWEI_A2// manifestPlaceholders = [BUGLY_APP_CHANNEL:"VIVO_A3"]// }// IPONE_A4 {////// dimension 'api'// buildConfigField 'String','BOARD','"IPONE-A4"'// // signingConfig signingConfigs.HUAWEI_A2// manifestPlaceholders = [BUGLY_APP_CHANNEL:"IPONE_A4"]// } }// variantFilter { variant ->// def names = variant.flavors*.name// // To check for a certain build type, use variant.buildType.name == ""// if (names.contains("mode") && names.contains("api")) {// // Gradle ignores any variants that satisfy the conditions above.// setIgnore(true)// }// }}
android{ signingConfigs{ XIAOMI_A1{ keyAlias '' keyPassword '' storeFile file('../sign/mijiqiqi.keystore') storePassword '' } HUAWEI_A2{ keyAlias '' keyPassword '126' storeFile file('../sign/mijiqiqi.jks') storePassword '651' } }}
更多相关文章
- android应用和系统版本信息
- 各Android版本WifiStateMachine状态机
- Android获取当前WiFi的MAC地址-适配所有版本
- Android应用程序版本切换
- android studio 中设置apk的版本号
- Android 版本号和分支查看
- Android OS历史版本
- Android 高管谈 Lollipop:为何它是 Android 重大版本更新?
- NDK版本与Android固件要求对应表