本文主要是介绍gradle dsl,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
仅仅是为了 提取 一些 gradle语法
compileSdkVersion: "23" as int,
compileSdkVersion Integer.parseInt(ANDROID_BUILD_COMPILE_SDK_VERSION)minSdkVersion Integer.parseInt(MIN_SDK_VERSION) targetSdkVersion Integer.parseInt(ANDROID_BUILD_TARGET_SDK_VERSION) versionCode Integer.parseInt(VERSION_CODE) versionName VERSION_NAME
dexOptions {javaMaxHeapSize '2g' }
android.applicationVariants.all { variant ->// 开始构建当前变体的即时时间 def currentTime = buildTime()variant.outputs.each { output ->println "**************************************" println "currentTime: ${currentTime}" println "variant: ${output.name}" println "buildType: ${variant.buildType.name}" println "flavor: ${variant.flavorName}" println "manifest: ${output.processResources.manifestFile}" println "**************************************" //将生成的apk文件保存至根目录的_apk文件下 def outputFile = output.outputFileif (outputFile != null && outputFile.name.endsWith('.apk')) {File outputDirectory = new File("${projectDir}/../_apk");def apkName = "${variant.buildType.name}/app-${output.name}-V${frameworkVersion}-#${buildNumber}-${currentTime}.apk" output.outputFile = new File(outputDirectory, apkName)}// 如果开启混淆,则保留混淆的映射关系文件,方便release进行调试 if (variant.getBuildType().isMinifyEnabled()) {variant.assemble.doLast {copy {from variant.mappingFileinto "${projectDir}/../_mappings" rename { String fileName ->"mapping-${output.name}-V${frameworkVersion}-#${buildNumber}-${currentTime}.txt" }}}}} }def buildTime() {return new Date().format("yyyy.MM.dd_HH.mm.ss", TimeZone.getTimeZone("UTC")) }
import org.tmatesoft.svn.core.wc.* import org.tmatesoft.svn.core.wc2.* import org.tmatesoft.svn.core.* apply plugin: 'com.android.application' android { compileSdkVersion 22 buildToolsVersion "22.0.1" defaultConfig { // 包名 applicationId "com.zhb.studiotest" minSdkVersion 19 targetSdkVersion 22 versionCode 1 versionName "1.0.0.1" manifestPlaceholders = [ CHANNEL_NAME:"Unspecified",APPLICATION_LABLE:"StudioTest"] } sourceSets.main.jni.srcDirs = [] sourceSets.main.jniLibs.srcDir 'src/main/libs' def versionPropsFile = file('version.properties') if (versionPropsFile.canRead()) { def Properties versionProps = new Properties() versionProps.load(new FileInputStream(versionPropsFile)) def prename = versionProps['VERSION_NAME_MAJOR'] def name = versionProps['VERSION_NAME_BUILD'].toInteger() def runTasks = gradle.startParameter.taskNames if ('buildAll' in runTasks) { name++ } versionProps['VERSION_NAME_BUILD']=name.toString() versionProps.store(versionPropsFile.newWriter(), null) defaultConfig { versionName prename + name } } signingConfigs { releaseConfig { // 写死签名密码 keyAlias 'xxx' keyPassword 'xxxx' storeFile file("keystore.jks") storePassword 'xxxx' // 要求输入签名密码 // storeFile file("keystore.jks") // keyAlias System.console().readLine("\nkeyAlias: ") // storePassword System.console().readLine("\nKeystore password: ") // keyPassword System.console().readLine("\nKey password: ") } } /*productFlavors { xiaomi { applicationId = "com.zhb.xiaomi" manifestPlaceholders = [UMENG_CHANNEL_VALUE: name,APPLICATION_LABLE:name] } baidu { applicationId = "com.zhb.baidu" manifestPlaceholders = [UMENG_CHANNEL_VALUE: name,APPLICATION_LABLE:name] } wandoujia { applicationId = "com.zhb.wandoujia" manifestPlaceholders = [UMENG_CHANNEL_VALUE: name,APPLICATION_LABLE:name] } }*/ productFlavors { wandoujia {} baidu {} //c360 {} //uc {} productFlavors.all { flavor -> applicationId = "com.zhb."+name flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name,APPLICATION_LABLE:name] } } buildTypes { debug { buildConfigField "boolean", "LOG_DEBUG", "true" versionNameSuffix "-debug" // 混淆开关 minifyEnabled false // 在Android中,每个应用程序中储存的数据文件都会被多个进程访问: // 安装程序会读取应用程序的manifest文件来处理与之相关的权限问题; // Home应用程序会读取资源文件来获取应用程序的名和图标; // 系统服务会因为很多种原因读取资源(例如,显示应用程序的Notification); // 此外,就是应用程序自身用到资源文件。 // 当资源文件通过内存映射对齐到4字节边界时,访问资源文件的代码才是有效率的。 zipAlignEnabled false // 删除没用的资源文件 shrinkResources false } release { buildConfigField "boolean", "LOG_DEBUG", "false" minifyEnabled true zipAlignEnabled true shrinkResources true // 混淆文件 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' // 签名 signingConfig signingConfigs.releaseConfig applicationVariants.all { variant -> // 修改APK名称 variant.outputs.each { output -> def file = output.outputFile def fileName = file.name fileName = fileName.replace(".apk", "-V${defaultConfig.versionName}.apk") fileName = fileName.replace("app", "StudioTest") fileName = fileName.replace("debug-unaligned", "debug") output.outputFile = new File(file.parent, fileName) } // 修改values.xml variant.mergeResources.doLast(){ File valuesFile = file("${buildDir}/intermediates/res/merged/${variant.dirName}/values/values.xml") String content = valuesFile.getText('UTF-8') content = content.replaceAll("CHANNEL_NAME","${variant.productFlavors[0].name}") valuesFile.write(content,'UTF-8') } } } } } def getSvnRevision(){ ISVNOptions options = SVNWCUtil.createDefaultOptions(true); SVNClientManager clientManager = SVNClientManager.newInstance(options); SVNStatusClient statusClient = clientManager.getStatusClient(); SVNStatus status = statusClient.doStatus(project.rootDir, false); SVNRevision revision = status.getRevision(); return revision.getNumber(); } task svnCommitVersionFile(){ description = "Commits a single file to an SVN repository" doLast{ if (!project.hasProperty("commitMsg")){ ext.commitMsg = "//change version" } SvnOperationFactory svnOperationFactory = new SvnOperationFactory() def authentication = SVNWCUtil.createDefaultAuthenticationManager("haibo.zhou", "hbzhou0622") svnOperationFactory.setAuthenticationManager(authentication) try { SvnCommit commit = svnOperationFactory.createCommit() commit.setSingleTarget(SvnTarget.fromFile(new File('app/version.properties'))) commit.setCommitMessage(commitMsg) SVNCommitInfo commitInfo = commit.run() println "Commit info: " + commitInfo println "Commit message: " + commitMsg } finally{ svnOperationFactory.dispose() } } } task generateZip(type: Zip){ def versionPropsFile = file('version.properties') def Properties versionProps = new Properties() versionProps.load(new FileInputStream(versionPropsFile)) def prename = versionProps['VERSION_NAME_MAJOR'] def name = versionProps['VERSION_NAME_BUILD'].toInteger() def version = "V" + prename + name + "_(" + getSvnRevision() + ")" from 'build/outputs' archiveName "StudioTest_" + version + ".zip" destinationDir file("build/release") doLast(){ copy{ from ("build/release/"+archiveName) into ("release") } if (!project.hasProperty("commitMsg")){ ext.commitMsg = "//upload compile result" } SvnOperationFactory svnOperationFactory = new SvnOperationFactory() def authentication = SVNWCUtil.createDefaultAuthenticationManager("haibo.zhou", "hbzhou0622") svnOperationFactory.setAuthenticationManager(authentication) try { SvnScheduleForAddition add = svnOperationFactory.createScheduleForAddition(); SvnTarget target = SvnTarget.fromFile(new File("app/release/"+archiveName)); add.addTarget(target); add.setAddParents(true); add.setForce(true); add.run(); SvnCommit commit = svnOperationFactory.createCommit() commit.setSingleTarget(SvnTarget.fromFile(new File("app/release/"+archiveName))) commit.setCommitMessage(commitMsg) SVNCommitInfo commitInfo = commit.run() println "Commit info: " + commitInfo println "Commit message: " + commitMsg } finally{ svnOperationFactory.dispose() } } } // build script for jenkins only task buildAll(){ println 'start build' } svnCommitVersionFile.dependsOn build generateZip.dependsOn svnCommitVersionFile buildAll.dependsOn generateZip tasks.withType(JavaCompile) { compileTask -> compileTask.dependsOn ndkBuild } task ndkBuild(type: Exec) { workingDir file('src/main/jni') commandLine getNdkBuildCmd() } task cleanNative(type: Exec){ workingDir file('src/main/jni') commandLine getNdkBuildCmd(), 'clean' } clean.dependsOn cleanNative def getNdkDir() { if (System.env.ANDROID_NDK_ROOT != null) return System.env.ANDROID_NDK_ROOT Properties properties = new Properties() properties.load(project.rootProject.file('local.properties').newDataInputStream()) def ndkdir = properties.getProperty('ndk.dir', null) if (ndkdir == null) throw new GradleException("NDK location not found. Define location with ndk.dir in the local.properties file or with an ANDROID_NDK_ROOT environment variable.") return ndkdir } def getNdkBuildCmd() { def ndkbuild = getNdkDir() + "/ndk-build" ndkbuild += ".cmd" return ndkbuild } dependencies { // 工程目录里面的libs文件夹下所有的jar包 compile fileTree(dir: 'libs', include: ['*.jar']) // 网络仓库里面的工程 //compile 'com.github.chrisbanes.photoview:library:1.2.4' // 本地的工程 compile project(':PhotoView-master') }
这篇关于gradle dsl的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!