Android studio build.gradle 基本设置配置

编程入门 行业动态 更新时间:2024-10-08 08:23:10

Android <a href=https://www.elefans.com/category/jswz/34/1771412.html style=studio build.gradle 基本设置配置"/>

Android studio build.gradle 基本设置配置

今天给大家示范一下基本设置和说明

ps:博主的这套配置让你的项目可以在任意电脑使用as打开无需额外文件、无需额外配置哦,当然as的版本是不能差距太大

复制项目减少体积见:android 快速方便的将项目复制到其他电脑上


首先根目录project的build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {repositories {maven { url '/' }maven { url '' }google()jcenter()}dependencies {classpath 'com.android.tools.build:gradle:3.1.3'//gradle版本,大版本一般和as版本号对应,尽量匹配//3.0废弃并且作者不再维护
//        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'// NOTE: Do not place your application dependencies here; they belong// in the individual module build.gradle files}
}
allprojects {repositories {maven { url '/' }maven { url '' }google()jcenter()}
}
task clean(type: Delete) {delete rootProject.buildDir
}
ext {//为整个gradle添加,方便统一管理//用于编译的SDK版本COMPILE_SDK_VERSION = 27//最低支持Android版本MIN_SDK_VERSION = 16//目标版本TARGET_SDK_VERSION = 27//implementation "com.android.support:appcompat-v7:${APPCOMPAT_VERSION}"//或者implementation 'com.android.support:appcompat-v7:'+APPCOMPAT_VERSION//等等,反正就是字符串拼接APPCOMPAT_VERSION = "27.0.2"
}

app里的build.gradle配置

apply plugin: 'com.android.application'android {buildToolsVersion '27.0.3'//建议下载最新的compileSdkVersion COMPILE_SDK_VERSION//建议和targetSdkVersion一样defaultConfig {applicationId "等于packageName必填目前是你的包路径"minSdkVersion MIN_SDK_VERSION//适配的最低版本,建议4.0以上targetSdkVersion TARGET_SDK_VERSION//目标版本(可以暂时理解为最高版本),建议最新(6.0和7.0的api改动较大,需要全面测试)versionCode 25152//版本int值,一般是日期或者和version对应versionName "2.5152"//版本号multiDexEnabled true//true表示分包,基本是必须的了,app很容易就会出现65536的问题,了解更多见分包的博客flavorDimensions "default"//多渠道的维度,不会就填default,了解更多见①//增加静态值BUILD_TIME,代码中Build.BUILD_TIME即可获取buildConfigField("long", "BUILD_TIME", System.currentTimeMillis() + "L")ndk {//支持架构,v8a运行会有问题,建议不写//abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "mips", "mips64", "x86", "x86_64"abiFilters "armeabi", "armeabi-v7a", "x86"}//在AndroidManifest.xml增加一些值(xml没有代码,但此处可以动态修改),了解更多见②manifestPlaceholders = [GAODE_KEY    : "000000"//比如增加一个高德的key的string值]}signingConfigs {//debug时签名位置,请保存好自己的签名,不然以后有的你麻烦release {keyAlias '123456'keyPassword '123456'storeFile file('../123456.jks')//签名位置,..表示上一级目录,这里写的是相对位置:项目跟目录的123456.jks签名文件(这样的话别人也可以直接使用)storePassword '123456'}}buildTypes {//Build apk(打包)或build variants(debug)时选择的apk类型release {//正式,静态常量BuildConfig(这个类太多,注意不要导错!不要导错!不要导错!).DEBUG=false,线上包用这个minifyEnabled false//是否开启混淆,不会的暂时不开启,了解更多见混淆相关的博客proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'signingConfig signingConfigs.release//告诉编译器debug时用哪个签名,不然会出现debug包和线上包替换安装都必须先卸载的情况//AndroidManifest增加值,了解更多见②manifestPlaceholders = [JPUSH_APPKEY    : "111111"]}debug {//测试,静态常量BuildConfig.DEBUG=true,测试包minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'//AndroidManifest增加值,了解更多见②manifestPlaceholders = [JPUSH_APPKEY    : "123456"]signingConfig signingConfigs.release}//不混淆,便于debugNoProguard {//此处表示可以自定义initWith debug//来源于debug的自定义minifyEnabled false}}dexOptions {//此处不需要改:项目大了有时java会内存溢出,这里表示扩大java运行内存javaMaxHeapSize "4g"}productFlavors {//一般多渠道用的,和上面的多渠道对应,了解更多见①yingyongbao {manifestPlaceholders = [UMENG_CHANNEL_VALUE: "yingyongbao"]flavorDimensions "default"}ali {manifestPlaceholders = [UMENG_CHANNEL_VALUE: "ali"]flavorDimensions "default"}}lintOptions {//抑制某些错误继续打包:此处不需要改,有问题解决问题,不要在这加//禁用掉丢失多国语言的错误提示disable 'MissingTranslation'//下面两个是忽略lint的报错信息继续打包,不建议使用.孩子哭就捂住嘴是解决不了问题的
//        checkReleaseBuilds false
//        abortOnError false}//这个方法是将打包生成的apk修改到项目根目录.apk目录下,生成的apk都需要在此目录中查找,不会用的可以删除这段applicationVariants.all { applicationVariantImpl ->//输出目录修改if (!applicationVariantImpl.getPackageApplication().outputDirectory.toString().contains("/build/")) {//不是build就输出到根目录下/.apkapplicationVariantImpl.getPackageApplication().outputDirectory = new File(".apk", getRootDir())}applicationVariantImpl.outputs.all {apkVariantOutputImpl ->//获取app名称InputStreamReader xmlIsr = new InputStreamReader(new FileInputStream(getProjectDir().getAbsolutePath() + "/src/main/res/values/strings.xml"))String readSt, appName = ""while ((readSt = xmlIsr.readLine()) != null) {if (readSt.contains("app_name")) {appName = readSt.split(">")[1].split("<")[0]break}}xmlIsr.close()//修改apk的文件名if (applicationVariantImpl.buildType.debuggable) {apkVariantOutputImpl.apkData.outputFileName = appName + "测试V${defaultConfig.versionName}.apk"} else {apkVariantOutputImpl.apkData.outputFileName = appName + "V${defaultConfig.versionName}.apk"}}}
}repositories {//此处不需要改flatDir {//aar的配置dirs 'libs'}
}dependencies {
//新版的导入为api,旧版的导入为compileapi fileTree(include: ['*.jar'], dir: 'libs')//一次性导入所有libs目录下的jar//基础包api project(':mylibrary')api 'com.android.support:gridlayout-v7:' + APPCOMPAT_VERSION//support包需要统一,不然某些方法可能会崩溃
}

①多渠道设置

举例(这只是个例子,实际运用请不要模仿,主意原因applicationId和包路径不一样会导致一些第三方识别错误的问题(貌似只有微信),比如wx的分享支付(直接调的intent跳转,两个不一样的话根本跳不回来)。谷歌设想是好的,但人(微)各(信)有(坑)志(爹)):

项目需求,要10个完全一样的app,第一时间大家都想到的是复制10个,然后改包名吧。但是当项目需求修改时每次都要复制n遍,这岂不是要上天...

这时applicationId应运而生,你只需要将applicationId改10次就会发现你安装了10个app,如下。但是作为程序猿,每次改applicationId、app名等也是也是一个体力活啊。

代码的包路径com.a.0,固定不改
applicationId "com.a.0"//这是原来默认的进程名com.a.0,getPackageName为com.a.0
//增加str资源
resValue "string", "app_name", "app0“//修改applicationId
applicationId "com.a.a"//进程名com.a.a,getPackageName为com.a.a(此时已经不是包路径了)
//增加str资源
resValue "string", "app_name", "appa“applicationId "com.a.b"//进程名com.a.b,同理
//增加str资源
resValue "string", "app_name", "appb“

于是多渠道应运而生,当你使用多渠道时,问题又来了,类似友盟这种多渠道配置早已占坑,根本没法动态修改applicationId(不然怎么叫多渠道呢...)

//理想情况是这样的
productFlavors {app0 {applicationId "com.a.0"//增加str资源resValue "string", "app_name", "app0“}appa {applicationId "com.a.a"//增加str资源resValue "string", "app_name", "appa“}...}
//但是类似友盟这种多渠道早已占坑yingyongbao {manifestPlaceholders = [UMENG_CHANNEL_VALUE: "yingyongbao"]}ali {manifestPlaceholders = [UMENG_CHANNEL_VALUE: "ali"]}
//这两个完全冲突,想合并得需要渠道数*项目数的代码倍数,每增加一个项目都麻烦死

而此时二维的多渠道再次打破这一僵局,这就是flavorDimensions这个主角

    defaultConfig {
//        applicationId 不需要了,多渠道中配置flavorDimensions "chanel","appType"...}productFlavors {Yyb_ {dimension "channel"manifestPlaceholders = [UMENG_CHANNEL_VALUE: "yingyongbao"]}Ali_ {dimension "channel"manifestPlaceholders = [UMENG_CHANNEL_VALUE: "ali"]}...
//        不同的APPapp0_ {dimension "appType"//主意细节,初始化applicationId比较晚,gradle的其他地方可能引用不了applicationId "com.a.0"//增加str资源resValue "string", "app_name", "app0“}appa_ {dimension "appType"applicationId "com.a.a"//增加str资源resValue "string", "app_name", "appa“}//每增加一个项目只需要再加个就行了...}

②AndroidManifest.xml动态修改,比如原配置里build.gradle极光的key正式和测试的区分,AndroidManifest直接使用即可。

不同级别的manifestPlaceholders最后会合并在一起,你不用担心GAODE_KEY和JPUSH_APPKEY会冲突

applicationId也可以使用(虽然会报错):${applicationId}

<meta-dataandroid:name="com.amap.api.v2.apikey"android:value="${GAODE_KEY}"/>


转载请注明出处:王能的博客Android studio build.gradle 基本设置配置_王能的博客-CSDN博客

更多推荐

Android studio build.gradle 基本设置配置

本文发布于:2024-03-08 03:52:33,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1719765.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:studio   Android   gradle   build

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!