• gradle


    repositories

    1. buildscript {
    2. repositories {
    3. //国内可以使用镜像阿里仓库
    4. maven { url 'https://maven.aliyun.com/repository/google' }
    5. maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
    6. maven { url "https://repo.eclipse.org/content/repositories/paho-releases/" }
    7. // ---------------
    8. jcenter()//由JFrog公司提供的Bintray中的Java仓库。它是当前世界上最大的Java和Android开源软件构件仓库。代替 mavenCentral()
    9. google()//google代码仓库
    10. maven {
    11. credentials {
    12. username 'dxxxxxx'
    13. password 'password'
    14. }
    15. url 'http://xxxxxxxx.com/repository/maven-public/'
    16. allowInsecureProtocol(true)
    17. }
    18. }
    19. }
    1. dependencies {
    2. //使用的gradle:7.0.4版本号,
    3. classpath "com.android.tools.build:gradle:7.0.4"
    4. //alibaba arouter版本
    5. classpath "com.alibaba:arouter-register:1.0.2"
    6. //kotlin
    7. classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    8. classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
    9. classpath "com.google.dagger:hilt-android-gradle-plugin:$hilt_version"
    10. }

    加载基本插件

    1. plugins {
    2. id 'com.android.application'
    3. id 'kotlin-android'
    4. id 'kotlin-kapt'
    5. id 'dagger.hilt.android.plugin'
    6. }
    7. apply plugin: 'com.xxxx.xxxx.xxxx'

    常用:基础配置项

    1、Manifest entries (Manifest属性)

    2、Build Types(构建类型)

    3、signing configurations(签名配置)

    4、Running Proguard(运行 Proguard)

    Manifest entries (Manifest属性)

    1. android {
    2. compileSdkVersion 19
    3. buildToolsVersion "19.0.0"
    4. defaultConfig {
    5. versionCode 12
    6. versionName 1.0.0
    7. minSdkVersion 16
    8. targetSdkVersion 16
    9. }
    10. }

    Build Types(构建类型 构建相应类型时取相应配置项)

    1. buildTypes {
    2. //自定义string buildconfig
    3. buildConfigField "String", "LAUNCHER_IMAGE_URL_TEST", "\"" + rootProject.api["launcher_image_url_test"] + "\""
    4. //build debug配置
    5. debug {
    6. versionNameSuffix "-debug"
    7. //
    8. zipAlignEnabled false
    9. // 移除无用的resource文件
    10. shrinkResources false
    11. // 是否进行混淆
    12. minifyEnabled false
    13. signingConfig signingConfigs.release
    14. proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    15. // DEBUG 模式,输出日志
    16. debuggable true
    17. jniDebuggable true
    18. }
    19. //build release 配置
    20. release {
    21. zipAlignEnabled true
    22. // 移除无用的resource文件
    23. shrinkResources true
    24. // 是否进行混淆
    25. minifyEnabled true
    26. // 混淆
    27. proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    28. signingConfig signingConfigs.release
    29. }
    30. //自定义环境
    31. 'mydev' {
    32. //测试环境的渠道
    33. buildConfigField "String", "LAUNCHER_IMAGE_URL", "\"" + rootProject.wtvdev_api["launcher_image_url"] + "\""
    34. versionNameSuffix "-mydev"
    35. //
    36. zipAlignEnabled false
    37. // 移除无用的resource文件
    38. shrinkResources false
    39. // 是否进行混淆
    40. minifyEnabled false
    41. signingConfig signingConfigs.release
    42. proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    43. debuggable true
    44. jniDebuggable true
    45. }
    46. }

    signing configurations(签名配置)

    1. android {
    2. signingConfigs {
    3. debug {
    4. storeFile file("debug.keystore")
    5. }
    6. myConfig {
    7. storeFile file("../other.keystore") // 加载签名文件
    8. storePassword "android" //密码
    9. keyAlias "androiddebugkey"
    10. keyPassword "android"
    11. v1SigningEnabled true
    12. v2SigningEnabled true
    13. }
    14. }
    15. }

    Running Proguard(运行 Proguard)

    1. // 多渠道打包 根据不同的productflavors加载不同的变量,如ENVIRONMENT_VALUE-test或用release
    2. // Specifies one flavor dimension.
    3. flavorDimensions "version"
    4. productFlavors {
    5. mytest {
    6. dimension = "version"
    7. manifestPlaceholders = [
    8. CHANNEL_VALUE : "mytest",
    9. ENVIRONMENT_VALUE: "TEST"
    10. ]
    11. }
    12. store_xiaomi {
    13. dimension = "version"
    14. manifestPlaceholders = [
    15. CHANNEL_VALUE : "store_xiaomi",
    16. ENVIRONMENT_VALUE: "RELEASE"
    17. ]
    18. }
    19. store_vivo {
    20. dimension = "version"
    21. manifestPlaceholders = [
    22. CHANNEL_VALUE : "store_vivo",
    23. ENVIRONMENT_VALUE: "RELEASE"
    24. ]
    25. }
    26. store_huawei {
    27. dimension = "version"
    28. manifestPlaceholders = [
    29. CHANNEL_VALUE : "store_huawei",
    30. ENVIRONMENT_VALUE: "RELEASE"
    31. ]
    32. }
    33. store_oppo {
    34. dimension = "version"
    35. manifestPlaceholders = [
    36. CHANNEL_VALUE : "store_oppo",
    37. ENVIRONMENT_VALUE: "RELEASE"
    38. ]
    39. }
    40. store_yingyongbao {
    41. dimension = "version"
    42. manifestPlaceholders = [
    43. CHANNEL_VALUE : "store_yingyongbao",
    44. ENVIRONMENT_VALUE: "RELEASE"
    45. ]
    46. }
    47. }

    TASK

    1. channel {
    2. channelFile = file("app_channel.txt")
    3. //多渠道包的输出目录,默认为new File(project.buildDir,"channel")
    4. outputDir = new File(project.buildDir, "channels")
    5. //多渠道包的命名规则,默认为:${appName}-${versionName}-${versionCode}-${flavorName}-${buildType}-${buildTime}
    6. apkNameFormat = '${appName}-${versionName}-${flavorName}-${buildType}'
    7. //快速模式:生成渠道包时不进行校验(速度可以提升10倍以上,默认为false
    8. fastMode = false
    9. //buildTime的时间格式,默认格式:yyyyMMdd-HHmmss
    10. buildTimeDateFormat = 'yyyyMMdd-HH:mm:ss'
    11. //低内存模式(仅针对V2签名,默认为false):只把签名块、中央目录和EOCD读取到内存,不把最大头的内容块读取到内存,在手机上合成APK时,可以使用该模式
    12. lowMemory = false
    13. }
    14. -----------------------------------------------------------------------------------------
    15. def startBuildTime, endBuildTime
    16. task publish {
    17. doFirst {
    18. startBuildTime = System.currentTimeMillis()
    19. }
    20. //依赖channelRelease的task,也就是channelRelease执行完再执行publish继续往下走
    21. dependsOn("channelRelease")
    22. doLast {
    23. endBuildTime = System.currentTimeMillis()
    24. println "the build time is: ${endBuildTime - startBuildTime}"
    25. println "publish success!"
    26. }
    27. }
    28. -------------------------------------------------------------------------
    29. //清理 task
    30. task clean(type: Delete) {
    31. delete rootProject.buildDir
    32. }

    dependencies 加载依赖 

    1. implementation 'com.tencent.mm.opensdk:wechat-sdk-android:+'
    2. api rootProject.depsLibs.retrofit
    3. debugImplementation 'com.github.eleme.UETool:uetool:1.3.2'
    4. debugImplementation 'com.github.eleme.UETool:uetool-base:1.3.2'
    5. releaseImplementation 'com.github.eleme.UETool:uetool-no-op:1.3.2'
    6. compileOnly "com.tencent.mm.opensdk:wechat-sdk-android:+"

    两个关键字的具体区别就很明显,api关键字以及compile关 键字引用的依赖包对于其他模块来说是可见的,可传递性的,而使用implementation关键字引用的依赖包对于其他模块来说是不可见的,无法将此依赖传递下去。

    名称

    说明

    compileOnly

    gradle2.12之后版本新添加的,2.12版本时期曾短暂的叫provided,后续版本已经改成了compileOnly,由java插件提供,适用于编译期需要而不需要打包的情况

    providedCompile

    war插件提供的范围类型:与compile作用类似,但不会被添加到最终的war包中这是由于编译、测试阶段代码需要依赖此类jar包,而运行阶段容器已经提供了相应的支持,所以无需将这些文件打入到war包中了;例如Servlet API就是一个很明显的例子.

    api

    3.4以后由java-library提供 当其他模块依赖于此模块时,此模块使用api声明的依赖包是可以被其他模块使用

    implementation

    3.4以后由java-library提供 当其他模块依赖此模块时,此模块使用implementation声明的依赖包只限于模块内部使用,不允许其他模块使用。

    compile

    编译范围依赖在所有的classpath中可用,同时它们也会被打包。

    providedRuntime

    同proiveCompile类似。

    runtime

    runtime依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如,你可能在编译的时候只需要JDBC API JAR,而只有在运行的时候才需要JDBC驱动实现。

    testCompile

    测试期编译需要的附加依赖

    testRuntime

    测试运行期需要

    archives

    -

    default

    配置默认依赖范围

    1. api (rootProject.ext.dependencies["retrofit2-retrofit"]){
    2. exclude group:'com.squareup.okhttp3',module:'okhttp' //剔除okhttp
    3. }

    ext 定义扩展程序

    1. rootProject.ext.androidx["compileSdkVersion"]
    2. ext {
    3. /* android sdk的使用版本配置
    4. * app 版本配置 */
    5. android = [
    6. applicationId : "com.xxxxx",
    7. compileSdkVersion: 31,
    8. buildToolsVersion: "30.0.2",
    9. minSdkVersion : 21,
    10. targetSdkVersion : 28,
    11. versionCode : 113,
    12. versionName : "1.1.3"
    13. ]
    14. /**
    15. * 项目使用到的常量
    16. */
    17. constants = [
    18. ]
    19. }

    maven仓库上传

    1. apply plugin: 'maven'
    2. uploadArchives {
    3. repositories {
    4. mavenDeployer {
    5. pom.artifactId = '项目信息'
    6. pom.version = '版本信息'
    7. repository(url: '私服仓库地址') {
    8. authentication(userName: '账号', password: '密码')
    9. }
    10. snapshotRepository(url: '私服快照地址') {
    11. authentication(userName: '账号', password: '密码')
    12. }
    13. }
    14. }
    15. }

    sourceSets 

     可以指定哪些源文件(或文件夹下的源文件)要被编译,哪些源文件要被排除

    1. ​​​​​​​sourceSets {
    2.     main {
    3.         jniLibs.srcDirs = ['libs']
    4.     }
    5. }

  • 相关阅读:
    机器学习——回归
    爬虫怎么批量采集完成任务
    C++:将栈类和队列类都实现成模板类
    Leetcode226.翻转二叉树
    vue3后台管理框架之Mock开发
    网络编程基础
    大数据开发,Hadoop Spark太重?你试试esProc SPL
    jmeter分布式压力测试搭建
    数组复制之System.arraycopy
    Github又悄悄升级了,这次的变化是大文件的存储方式
  • 原文地址:https://blog.csdn.net/qq_29389373/article/details/126732085