首页 > 其他分享 >Android build.gradle 基本规则

Android build.gradle 基本规则

时间:2023-08-08 16:45:33浏览次数:32  
标签:false gradle build test Android com android 打包

Android build.gradle 基本规则

一个完整示例:

// 此乃本脚本执行所需依赖, 以下分别对应maven库和插件
buildscript {
    repositories {
        // 从Android Studio3.0后新增了google()配置,可以引用google上的开源项目
        google()
        mavenCentral()
        // 一个类似于github的代码托管仓库,声明了jcenter()配置,可以轻松引用 jcenter上的开源项目
        jcenter() 
    }
    dependencies {
        //此处是android的插件gradle,gradle是一个强大的项目构建工具
        classpath 'com.android.tools.build:gradle:7.2.1'
    }
}

// 此乃声明自身是 Android 程序
// 其中 com.android.application 标识应用模块,可直接运行,打包后对应 .apk 文件
//      com.android.library 标识库模块,打包后对应 .aar 文件
apply plugin: 'com.android.application'

// 此乃配置本 android 项目构建所需的各种属性
android {
  // 此乃设置编译时用的Android API版本
  compileSdkVersion 27
  
  // 基础配置
  defaultConfig {
      applicationId "com.billy.myapplication" // 项目包名
      minSdkVersion 16                        // 项目最低兼容的版本
      targetSdkVersion 27                     // 项目的目标版本
      versionCode 1                           // 版本号
      versionName "1.0"                       // 版本名称
      testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
                                              // 表明要使用AndroidJUnitRunner进行单元测试
  }

  // 此乃静态检查配置, 默认有任何错误提示会停止build
  lintOptions {
    // 即使报错也不停止打包
    abortOnError false
    // 打包release版本时进行检测
    checkReleaseBuilds false
  }

  buildTypes {
    release {
      // 配置Log日志
      buildConfigField("boolean", "LOG_DEBUG", "false")//配置Log日志
      // 配置URL前缀
      buildConfigField("String", "URL_PERFIX", ""https://release.cn/"")
      // 是否混淆
      minifyEnabled false
      // 指定混淆规则文件
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
      // 设置签名信息
      signingConfig signingConfigs.release
      // 是否在APK中生成伪语言环境,帮助国际化的东西,一般使用的不多
      pseudoLocalesEnabled false
      // 是否对APK包执行ZIP对齐优化,减小zip体积,增加运行效率
      zipAlignEnabled true
      // 在applicationId 中添加了一个后缀,一般使用的不多
      applicationIdSuffix 'test'
      // //在versionName 中添加了一个后缀,一般使用的不多
      versionNameSuffix 'test'
    }
    debug { // 内容同上
      // 是否支持断点调试
      debuggable false
      // 是否可以调试NDK代码
      jniDebuggable false
      // 是否开启渲染脚本就是一些c写的渲染方法
      renderscriptDebuggable false
    }
  }

  // 此乃签名的配置
  signingConfigs {
      // 线上/发布/生产
      release {
        keyAlias 'test'
        keyPassword '123456'
        storeFile file('test.keystore')
        storePassword '123456'
      }
      // 开发/调试/测试
      debug {} // 内容同上
  }

  // 此乃目录指向的配置
  sourceSets {
    main {
      // 指定lib库目录
      jniLibs.srcDirs = ['libs']
    }
  }

  // 此乃打包时的相关配置
  packagingOptions{
    // 作用: 当有重复文件时,打包过程会报错,当配置了该字段时打包过程就将打包第一个匹配的文件。
    // 以下示例表示当META-INF目录下有重复的LICENSE文件时 只用第一个,打包过程不报错。
    pickFirsts = ['META-INF/LICENSE']

    // 作用: 当出现重复文件时,合并重复的文件并打包进应用
    // 默认值 merges = []
    merge 'META-INF/LICENSE'
  }

  productFlavors {
      wandoujia {}
      xiaomi {}
      _360 {}
  }

  productFlavors.all {
    // 批量修改,类似一个循序遍历
    flavor -> flavor.manifestPlaceholders = [IFLYTEK_CHANNEL: name]
  }
}
// 此乃本项目所需依赖,如maven库
allprojects {
  repositories {
      google()
      mavenCentral()
      flatDir{
          dirs 'src/main/libs', 'libs'
      }
  }

  // 此乃描述本项目的依赖关系
  dependencies {
    // 此乃声明本地的jar包依赖
    implementation fileTree(dir: 'src/main/libs', include: ['*.jar'])
    // 此乃声明远程的依赖
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'com.android.support.constraint:constraint-layout:1.1.2'
    // 此乃声明测试用例的依赖
    testImplementation 'junit:junit:4.12'
    // 此乃声明测试用例需要的库
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
  }
}

// 此乃执行 gradle clean 时将会执行的 task
// 该任务继承自 Delete,将删除根目录中的build目录。
// 相当于执行 Delete.delete(rootProject.buildDir)。
// gradle使用groovy语言,调用method时可以不用加()。
task clean(type: Delete) {
    delete rootProject.buildDir
}

标签:false,gradle,build,test,Android,com,android,打包
From: https://www.cnblogs.com/hencins/p/17614753.html

相关文章

  • Android之Spinner用法,key/value模式
    参考:http://www.dedeyun.com/it/m/98498.htmlhttps://blog.csdn.net/myxiaoq/article/details/258696931.key、value类,需要重写toString()方法,返回text就是Spinner要显示的keypackagecom.jay.common;publicclassSpinnerData{privateStringvalue="";private......
  • Android开发 Jetpack compose LazyColumn 与 LazyRow、LazyVerticalGrid、LazyHorizon
    前言  此篇博客讲解LazyColumn与LazyRow、LazyVerticalGrid、LazyHorizontalGrid,在compose里LazyColumn与LazyRow与是用来延迟加载数据的,它对标原来xml里的ListView与RecyclerView。LazyColumn纵向列表效果图代码@ComposablefunAPage(){vallistData=remembe......
  • android 对话框AlertDialog。
    API:java.lang.Object ↳ android.app.AlertDialog.Builder使用AlertDialog.Builder创建对话框需要了解以下几个方法:setTitle:为对话框设置标题setIcon:为对话框设置图标setMessage:为对话框设置内容setView:给对话框设置自定义样式setItems:设置对话框要显示的一个list,一般用......
  • android 导出带数据库文件的APK
    http://www.ophonesdn.com/article/show/111技术文章基于OPhoneSDK1.5的英文电子词典的实现基于OPhoneSDK1.5的英文电子词典的实现OPhone平台开发,2009-12-0711:06:42标签:OPhoneSDK1.5英文词典英文词典是手机中经常使用的应用。因此,在本文将......
  • Android Service生命周期及用法!(转)
    AndroidService生命周期及用法!大家好,上一节我讲解了AndroidActivity的生命周期,这一节我将讲解一下Service,首先我们要知道Service具体是干什么的,什么时候用到?以及它的生命周期等。Service概念及用途:Android中的服务,它与Activity不同,它是不能与用户交互的,不能自己启动的,运行在......
  • Android 12 适配之 "Android:exported"
    Android12适配之"Android:exported"将build.gradle中的targetSDKVersion和compileSdkVersion改为31,对应Android12build项目报错AppstargetingAndroid12andhigherarerequiredtospecifyanexplicitvalueforandroid:exportedwhenthecorrespondingc......
  • Android协程带你飞越传统异步枷锁
    引言在Android开发中,处理异步任务一直是一项挑战。以往的回调和线程管理方式复杂繁琐,使得代码难以维护和阅读。Jetpack引入的Coroutine(协程)成为了异步编程的新标杆。本文将深入探讨AndroidJetpackCoroutine的使用、原理以及高级用法,助您在异步编程的路上游刃有余。什么是Coroutin......
  • Android平台一对一音视频通话方案对比:WebRTC VS RTMP VS RTSP
    一对一音视频通话使用场景一对一音视频通话都需要稳定、清晰和流畅,以确保良好的用户体验,常用的使用场景如下:社交应用:社交应用是一种常见的使用场景,用户可以通过音视频通话进行面对面的交流;在线教育:老师和学生可以通过音视频通话功能进行实时互动,提高教学效率;远程协助:在某些工作场景......
  • You are using the runtime-only build of Vue where the template compiler is not a
    使用vue-cli搭建的项目,页面自定义带template内容的组件无法渲染,控制台报错,页面不展示组件内容,代码如下:<template><divclass="hello">my-component:<my-component></my-component></div></template><script>importVuefrom"vue"......
  • Android 平台架构
    放一张官网的图各层级描述参考官网:https://developer.android.google.cn/guide/platform?hl=zh-cnHAL层出现的原因:......