Android Gradle本地化构建技巧

news/2024/5/20 1:02:17 标签: android, Gradle

文章目录

  • 自定义Gradle配置文件
    • config.gradle
  • 引入自定义Gradle
    • app的build.gradle
    • base的build.gradle
  • 配置Gradle常量
  • 提升Gradle构建速度的十大技巧
    • 禁止Multidex Apk构建
    • 最小化打包资源文件
    • 禁用png压缩
    • png转换webp
    • 不使用动态版本标识
    • Gradle内存分配调优
    • 开启Gradle构建缓存

Gradle_2">自定义Gradle配置文件

config.gradle

在根目录新建config.gradle

在这里插入图片描述
config.gradle内容如下:

ext {
    //Android 配置
    android = [
            compileSdkVersion: 29,
            buildToolsVersion: "29.0.1",
            applicationId    : "com.xx.xx",
            minSdkVersion    : 21,
            targetSdkVersion : 29,
            versionCode      : 8,
            versionName      : "1.7"
    ]
    //依赖 配置
    dependencies = [
            "httpclient"     : 'org.apache.http.legacy',
            "appcompat"      : 'androidx.appcompat:appcompat:1.0.2',
            "bmobsdk"        : 'cn.bmob.android:bmob-sdk:3.7.3-rc1',
            "rxjava2"        : "io.reactivex.rxjava2:rxjava:2.2.2",
            "rxandroid2"     : 'io.reactivex.rxjava2:rxandroid:2.1.0',
            "okio"           : 'com.squareup.okio:okio:2.1.0',
            "gson"           : 'com.google.code.gson:gson:2.8.5',
            "okhttp3"        : 'com.squareup.okhttp3:okhttp:3.12.0',
            "tagcloud"       : 'com.moxun:tagcloudlib:1.2.0',
            "circleimageview": 'de.hdodenhof:circleimageview:3.0.0',
            "glide"          : 'com.github.bumptech.glide:glide:4.9.0',
            "recyclerview"   : 'androidx.recyclerview:recyclerview:1.0.0',
            "datepicker"     : 'cn.aigestudio.datepicker:DatePicker:2.2.0',
            "litepal"        : 'org.litepal.android:java:3.0.0',
            "eventbus"       : 'org.greenrobot:eventbus:3.1.1',
            "tablayout"      : 'com.google.android.material:material:1.0.0',
            "photoview"      : 'com.github.chrisbanes:PhotoView:2.3.0',
            "3dmap"          : 'com.amap.api:3dmap:5.0.0',
            "location"       : 'com.amap.api:location:3.3.0',
            "search"         : 'com.amap.api:search:5.0.0',
            "bugly"          : 'com.tencent.bugly:crashreport:2.1.9',
            "buglyndk"       : 'com.tencent.bugly:nativecrashreport:3.0',
            "zxing"          : 'cn.yipianfengye.android:zxing-library:2.2',
            "videoplayer"    : 'cn.jzvd:jiaozivideoplayer:7.0.5'
    ]
    //仓库
    maven = [
            "bmobUrl": "https://raw.github.com/bmob/bmob-android-sdk/master",
            "jitpack": "https://jitpack.io"
    ]
}

Gradle_58">引入自定义Gradle

在项目的根build.gradle中引入自定义Gradle配置文件

//引入自定义Gradle配置文件
apply from: "config.gradle"

app module和其他module的 build.gradle都可以使用config.gradle中定义的参数,如果有数据需要修改,只需要修改config.gradle,所有module中的build.gradle都不需要做修改。

好处:

  • 1.统一性
  • 2.便于管理
  • 3.版本管理

app的build.gradle

app的build.gradle如下:

android {
    compileSdkVersion rootProject.ext.android["compileSdkVersion"]
    buildToolsVersion rootProject.ext.android["buildToolsVersion"]

    //默认配置
    defaultConfig {
        applicationId rootProject.ext.android["applicationId"]
        minSdkVersion rootProject.ext.android["minSdkVersion"]
        targetSdkVersion rootProject.ext.android["targetSdkVersion"]
        versionCode rootProject.ext.android["versionCode"]
        versionName rootProject.ext.android["versionName"]
    }
...
}

base的build.gradle

android {
    //HttpClient
    useLibrary rootProject.ext.dependencies["httpclient"]
    compileSdkVersion rootProject.ext.android["compileSdkVersion"]
    buildToolsVersion rootProject.ext.android["buildToolsVersion"]
    defaultConfig {
        minSdkVersion rootProject.ext.android["minSdkVersion"]
        targetSdkVersion rootProject.ext.android["targetSdkVersion"]
        versionCode rootProject.ext.android["versionCode"]
        versionName rootProject.ext.android["versionName"]
    }
	...
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    //V7
    api rootProject.ext.dependencies["appcompat"]
    api rootProject.ext.dependencies["bmobsdk"]
    api rootProject.ext.dependencies["rxjava2"]
    api rootProject.ext.dependencies["rxandroid2"]
    api rootProject.ext.dependencies["okio"]
    api rootProject.ext.dependencies["gson"]
    api rootProject.ext.dependencies["okhttp3"]
    api rootProject.ext.dependencies["tagcloud"]
    api rootProject.ext.dependencies["circleimageview"]
    api rootProject.ext.dependencies["datepicker"]
    api rootProject.ext.dependencies["glide"]
    api rootProject.ext.dependencies["recyclerview"]
    api rootProject.ext.dependencies["litepal"]
    api rootProject.ext.dependencies["eventbus"]
    api rootProject.ext.dependencies["tablayout"]
    api rootProject.ext.dependencies["photoview"]
    api rootProject.ext.dependencies["3dmap"]
    api rootProject.ext.dependencies["location"]
    api rootProject.ext.dependencies["search"]
    api rootProject.ext.dependencies["bugly"]
    api rootProject.ext.dependencies["buglyndk"]
    api rootProject.ext.dependencies["zxing"]
    api rootProject.ext.dependencies["videoplayer"]
}

Gradle_141">配置Gradle常量

打开BuildConfig文件,查看Gradle常量
在这里插入图片描述
在buildTypes下添加如下代码:
在这里插入图片描述

      debug {
            //自定义Gradle常量
            buildConfigField("boolean","LOG_DEBUG","true")
            buildConfigField("String","LOG_TAG","\"YueJian\"")
            buildConfigField("String","SP_NAME","\"Config\"")
        }

同步后查看BuildConfig文件
在这里插入图片描述
已经为我们构建出了需要的常量

使用这些常量如下,这样就可以在debug版本中做一些操作,如输出日志,而在release版本中不会执行这些操作。
在这里插入图片描述

Gradle_163">提升Gradle构建速度的十大技巧

  • 使用最新版的Gradle插件
  • 避免激活旧的Multidex
  • 禁止Multidex Apk构建
  • 最小化打包资源文件
  • 禁用png压缩
  • png转换webp
  • 推荐使用instant run
  • 不使用动态版本标识
  • Gradle内存分配调优
  • 开启Gradle构建缓存

禁止Multidex Apk构建

Gradle构建的三个性能指标:

  • 全量编译:全部编译 - Open Project
  • 代码增量编译:修改了Java/Kotlin下面的代码的时候编译
  • 资源增量编译:修改了res下面的资源文件的时候编译

发布App到应用市场时需要多渠道打包和全部打包;而调试时候不需要这么多,我们可以禁止一些文件编译。

在调试的时候如何禁止呢?

Settings-Build-Compiler-PdevBuild

在这里插入图片描述

app的build.gradle:
在这里插入图片描述

android {
    //调试的时候禁止,加快编译速度
    if(rootProject.hasProperty('devBuild')){
        splits.abi.enable = false
        splits.density.enable = false
        //禁用PNG压缩
        //aaptOptions.cruncherEnabled = false
    }
...

最小化打包资源文件

android {
    //默认配置
    defaultConfig {
        //调试
        resConfigs("zh","xxhdpi")
	...
	}
	...
}

禁用png压缩

在这里插入图片描述

android {
    //调试的时候禁止,加快编译速度
    if(rootProject.hasProperty('devBuild')){
        splits.abi.enable = false
        splits.density.enable = false
        //禁用PNG压缩
        aaptOptions.cruncherEnabled = false
    }
...

png转换webp

在这里插入图片描述

不使用动态版本标识

不要在添加依赖的时候使用 + 加号

Gradle_247">Gradle内存分配调优

在这里插入图片描述

Gradle_250">开启Gradle构建缓存

#开启Gradle构建缓存
org.gradle.caching=true

在这里插入图片描述


http://www.niftyadmin.cn/n/1837780.html

相关文章

Opencv---形态学处理

转自:https://blog.csdn.net/keen_zuxwang/article/details/72768092 高级形态学变换: 开运算: 先腐蚀,再膨胀,可清除一些小东西(亮的),放大局部低亮度的区域 闭运算: 先膨胀,…

SQL语句性能调整参考点

SQL语句性能调整参考点 1.选择最有效率的表名顺序 ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表 driving table)将被最先处理。 在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。当ORACLE处理多个表时, 会…

android xml解析之SAX

在Android平台上可以使用Simple API for XML(SAX) 、 Document Object Model(DOM)和Android附带的pull解析器解析XML文件。 下面是本例子要解析的XML文件&#xff1a; 文件名称&#xff1a;itcast.xml<?xml version"1.0" encoding"UTF-8"?><per…

Android社交App开发之SharedPreferences工具类

package com.hongx.framework.utils;import android.content.Context; import android.content.SharedPreferences;import com.hongx.framework.BuildConfig;/*** FileName: SpUtils* SharedPreferences工具类*/ public class SpUtils {private SharedPreferences sp;private S…

AnkhSVN 1.0 RC3 released on August 25, 2006

喜欢使用这个插件的朋友可以下载最新版本了。 AnkhSVN 1.0 RC3使用了Subversion 1.4 RC5的libraries&#xff0c;修复了些BUG&#xff0c;并增加了对VS 2005 web projects的支持。 我曾介绍过安装VS.NET插件AnkhSVN,通过简单配置让其支持.svn和_svn,并其很好的支持web project&…

用户喜欢点什么

暂时想到的元素&#xff1a; 蓝色文字。&#xff08;浏览器默认&#xff09;带下划线文字。&#xff08;浏览器默认&#xff09;视觉权重较高的字符或图形。&#xff08;比如大小/颜色/造型&#xff09;有交互暗示的字符或图形。&#xff08;比如左右箭头&#xff09;表单&…

Android社交App开发之启动页

启动页主要包括以下内容&#xff1a; 把启动页全屏延迟进入主页根据具体逻辑是进入主页还是引导页还是登录页适配刘海屏 启动页全屏 参考&#xff1a;Android设置Activity全屏的三种方式 values目录下的styles.xml文件中添加AppThemeFull样式 <!--Full Style Activity -…

Windows7 快捷键

1. Windows快捷方式的快捷键需要该快捷方式在“Start”窗口目录下或在“桌面”目录下才会生效。否则&#xff0c;其他地方定义的快捷方式快捷键&#xff0c;在机器重启后&#xff0c;就会失效。 15 个一定要会的 Windows7 快捷键 http://www.appinn.com/windows-7-15-keyboard-…