Gradle 学习 二
Gradle 动态参数配置
//在gradle.properties中 SystemProp.vc=1 //System.properties引用方式的变量定义 xxx.vn="1.0" //project.property引用方式的变量定义 MS=15 // 直接引用方式的变量定义
//在app/build.gradle minSdkVersion MS //System.properties引用变量 versionCode System.properties['vc'] //project.property引用变量 versionName project.property('xxx.vn') //直接引用变量
这个方法重要运用于 打包签名的配置
系统参数
在build.gradle中,根目录或者app目录都可以
//新建一个打印系统参数任务 task pr << { println project project标识 println project.name project名字 println project.buildDir project构建目录 println project.buildFile project构建文件 println project.version project版本信息 println name Task的名字 println buildDir project构建文件的存放位置 println path task的定位的路径地址 } //在terminal中 gradlew pr //就会这些信息
多渠道打包
感觉鸡肋 不学 还是记录一下
<meta-data android:name="PRODUCT" android:value="${CHANNEL_VALUE}" />
//app目录下build.gradle android 闭包中 productFlavors { pr1 { manifestPlaceholders = [CHANNEL_VALUE: "pr1"] } pr2 { manifestPlaceholders = [CHANNEL_VALUE: "pr2"] } pr3 { manifestPlaceholders = [CHANNEL_VALUE: "pr3"] } } //termail中执行gradlew build,生成的是注意未签名的包
多渠道打包脚本优化
//app目录下build.gradle android 闭包中修改 productFlavors { pr1 { // manifestPlaceholders = [CHANNEL_VALUE: "pr1"] } pr2 { // manifestPlaceholders = [CHANNEL_VALUE: "pr2"] } pr3 { // manifestPlaceholders = [CHANNEL_VALUE: "pr3"] } } productFlavors.all { flavor -> flavor.manifestPlaceholders = [CHANNEL_VALUE:name] }
生成包重新命名
//app目录下build.gradle android 闭包中添加 applicationVariants.all { variant -> variant.outputs.each { output -> def outputFile = output.outputFile if (outputFile != null && outputFile.name.endsWith('.apk')) { def fileName = "自定义_${defaultConfig.versionName}_${variant.buildType.name}_${variant.productFlavors[0].name}.apk" output.outputFile = new File(outputFile.parent, fileName) } } }
不同的版本添加不同的代码
buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } ttt.initWith(buildTypes.release) ttt { applicationIdSuffix ".ttt" buildConfigField "boolean","textflag","true" buildConfigField "String","textflag1","\"aaa\"" } sss.initWith(buildTypes.release) ttt { applicationIdSuffix ".sss" buildConfigField "boolean","textflag","false" buildConfigField "String","textflag1","\"bbb\"" } } //在代码中可以通过获取buildConfig,做不同的代码 //可在defaultConfig中设置默认配置 defaultConfig { applicationId "com.example.caoyang.ctest" minSdkVersion MS targetSdkVersion 26 versionCode System.properties['vc'] versionName project.property('xxx.vn') testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" resValue "string", "textflag1", "\"moren\"" } //可以通过这个方法在不同的buildType中的设置不同的 app_name等属性 //相当与res/string中加入<string name="textflag1" translatable="false">"moren"</string>
依赖
dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) //app/libs目录里面存储的jar文件依赖 androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) //android单测试依赖包 compile 'com.android.support:appcompat-v7:26.+' compile 'com.android.support.constraint:constraint-layout:1.0.2' // compile files('libs/logcollect.jar') //某文件地址里面的jar文件的依赖 testCompile 'junit:junit:4.12' //junit单元测试依赖包 }
Gradle编译成jar,编译测试之后,不可使用,有缺陷
so依赖
src/main/jnilibs文件夹 分别CPU分类 armeabi armeabi-v7a等等
可以在build.gradle中指定一个目录做为jniLibs
sourceSets { main { jniLibs.srcDirs = ['src/yyy'] } }
本地库项目依赖
1),new Module
2).setting.gradle中
include ':app', ':mylibrary' //':mylibrary'是加入的
3)build.gradle 中
compile project(':mylibrary')