当前位置: 首页 > news >正文

三好街 网站建设祥云户网站

三好街 网站建设,祥云户网站,如何给公司网站做优化,网站w3c标准最近想重新梳理学习一遍 Android 的各个知识点#xff0c;于是新建了一个 AndroidStudy 项目仓库#xff0c;打算每个知识块新建 1 个 module。 类似这样#xff1a; AndroidStudy (Root Project) ├─app (Module0) ├─CustomView (Module1) ├─KotlinCoroutines (Modul…最近想重新梳理学习一遍 Android 的各个知识点于是新建了一个 AndroidStudy 项目仓库打算每个知识块新建 1 个 module。 类似这样 AndroidStudy (Root Project) ├─app (Module0) ├─CustomView (Module1) ├─KotlinCoroutines (Module2) ├─...然后发现每新建 1 个 Android Library Module 都生成 1 个新的 build.gradle.kts 文件 plugins {alias(libs.plugins.com.android.library)alias(libs.plugins.org.jetbrains.kotlin.android) }android {namespace com.bqliang.mylibrarycompileSdk 33defaultConfig {minSdk 26testInstrumentationRunner androidx.test.runner.AndroidJUnitRunnerconsumerProguardFiles(consumer-rules.pro)}buildTypes {release {isMinifyEnabled falseproguardFiles(getDefaultProguardFile(proguard-android-optimize.txt),proguard-rules.pro)}}compileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8}kotlinOptions {jvmTarget 1.8} }dependencies {implementation(libs.core.ktx)... }里面的大部分配置都是重复的像 compileSdk、minSdk、compileOptions、kotlinOptions… 虽然我以后也不会再去改这些配置了但是代码洁癖还是让我想把这些重复的配置去掉经过一番搜索发现 Gradle Convention Plugin 非常适合解决这个问题。 什么是 Gradle Convention Plugin 为了解决上面的问题我们自然很容易想到要把其中可以共享的配置抽取出来然后在每个 module 中引用这些配置。我们可以编写 1 个预编译插件 AndroidLibraryPlugin在其中去处理这些共享的构建逻辑然后在需要的 module 中引用这个插件。这样就可以避免重复的配置了这样的插件就叫做 Gradle Convention Plugin所以 Gradle Convention Plugin 并不是指某个具体的插件像 com.android.library而是指一类插件这类插件的作用就是抽取出一些共享的构建逻辑。 如何编写 Gradle Convention Plugin 提到预编译插件很多人知道可以写在 buildSrc 目录下但是这种方式还是有一些缺点的比如任何更改都会导致整个项目重新编译更好的方式是使用复合构建composite build 我们新建 1 个 build-logic 项目文件结构如下我们将在 AndroidLibraryConventionPlugin 中编写我们的要在 Android Library Module 中共享的构建逻辑。 AndroidStudy (Root Project) ├─... └─build-logic| settings.gradle.kts└─ convention| build.gradle.kts└─ src└─ main└─ kotlin└─ AndroidLibraryConventionPlugin.kt因为复合构建项目里的构建是完全独立的所以我们需要在 build-logic/settings.gradle.kts 中声明依赖仓库源也要显式声明 versionCatalogs dependencyResolutionManagement {repositories {google()mavenCentral()}versionCatalogs {create(libs) {from(files(../gradle/libs.versions.toml))}} }rootProject.name build-logic include(:convention)build-logic/convention/build.gradle.kts: import org.jetbrains.kotlin.gradle.tasks.KotlinCompileplugins {kotlin-dsl }group com.bqliang.gradleconventionplugins.buildlogic// Configure the build-logic plugins to target JDK 17 // This matches the JDK used to build the project, and is not related to what is running on device. java {sourceCompatibility JavaVersion.VERSION_17targetCompatibility JavaVersion.VERSION_17 } tasks.withTypeKotlinCompile().configureEach {kotlinOptions {jvmTarget JavaVersion.VERSION_17.toString()} }dependencies {compileOnly(libs.android.gradlePlugin)compileOnly(libs.kotlin.gradlePlugin) }gradlePlugin {// register the convention pluginplugins {register(androidLibrary) {id bqliang.android.libraryimplementationClass AndroidLibraryConventionPlugin}} }这里的 sourceCompatibility、targetCompatibility、kotlinOptions 只是用来指定编译我们的 Gradle Convention Plugin 的 JDK 版本和共享的构建逻辑没有关系。文件最后注册了我们的 Gradle Convention Plugin为了后续方便引用我们可以把 plugin id 写在 libs.versions.toml 里 ... [plugins] bqliang-android-library { id bqliang.android.library, version unspecified } ...build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt: import com.android.build.api.dsl.CommonExtension import com.android.build.gradle.LibraryExtension import org.gradle.api.JavaVersion import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.kotlin.dsl.configure import org.gradle.kotlin.dsl.withType import org.jetbrains.kotlin.gradle.tasks.KotlinCompileclass AndroidLibraryConventionPlugin : PluginProject {override fun apply(target: Project) {with(target) {with(pluginManager) {// Android Library Module 都需要这 2 个插件apply(com.android.library)apply(org.jetbrains.kotlin.android)}extensions.configureLibraryExtension {configureKotlinAndroid(this)defaultConfig.targetSdk 34}}}private fun Project.configureKotlinAndroid(commonExtension: CommonExtension*, *, *, *, *,) {commonExtension.apply {compileSdk 34defaultConfig {minSdk 26}compileOptions {sourceCompatibility JavaVersion.VERSION_11targetCompatibility JavaVersion.VERSION_11}}configureKotlin()}private fun Project.configureKotlin() {// Use withType to workaround https://youtrack.jetbrains.com/issue/KT-55947tasks.withTypeKotlinCompile().configureEach {kotlinOptions {// Set JVM target to 11jvmTarget JavaVersion.VERSION_11.toString()}}} }注意目前我们还没有在 root project 中 include 这个 build-logic 项目呢因为复合构建会把项目里的构建配置包含进来所以我们不能直接使用 include(“:build-logic”)而是要使用 includeBuild(“build-logic”) AndroidStudy/settings.gradle.kts: pluginManagement {includeBuild(build-logic) // include build-logic modulerepositories {google()mavenCentral()gradlePluginPortal()} }dependencyResolutionManagement {repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)repositories {google()mavenCentral()} }rootProject.name AndroidStudy ...现在我们就可以使用我们的预编译约定插件 AndroidLibraryConventionPlugin 了回到文章一开始那个 Android Library Module 的 build.gradle.kts我们可以把里面的大部分配置都去掉了只是简单的引用一下我们的插件就可以了。 plugins {alias(libs.plugins.bqliang.android.library) // apply our convention plugin }android {namespace com.bqliang.mylibrarydefaultConfig {testInstrumentationRunner androidx.test.runner.AndroidJUnitRunnerconsumerProguardFiles(consumer-rules.pro)}buildTypes {release {isMinifyEnabled falseproguardFiles(getDefaultProguardFile(proguard-android-optimize.txt),proguard-rules.pro)}} }dependencies {... }当然这里只是把 Android Library Module 的构建逻辑抽取出来了其实像 Application Module、Jetpack Compose、Room 等等构建逻辑都是可以抽取出来的。 Android 学习笔录 Android 性能优化篇https://qr18.cn/FVlo89 Android Framework底层原理篇https://qr18.cn/AQpN4J Android 车载篇https://qr18.cn/F05ZCM Android 逆向安全学习笔记https://qr18.cn/CQ5TcL Android 音视频篇https://qr18.cn/Ei3VPD Jetpack全家桶篇内含Composehttps://qr18.cn/A0gajp OkHttp 源码解析笔记https://qr18.cn/Cw0pBD Kotlin 篇https://qr18.cn/CdjtAF Gradle 篇https://qr18.cn/DzrmMB Flutter 篇https://qr18.cn/DIvKma Android 八大知识体https://qr18.cn/CyxarU Android 核心笔记https://qr21.cn/CaZQLo Android 往年面试题锦https://qr18.cn/CKV8OZ 2023年最新Android 面试题集https://qr18.cn/CgxrRy Android 车载开发岗位面试习题https://qr18.cn/FTlyCJ 音视频面试题锦https://qr18.cn/AcV6Ap
http://www.sczhlp.com/news/171105/

相关文章:

  • 坪地网站建设效果万网 网站建设方案书范文
  • 静安西安网站建设网站开发天津
  • 厦门长实建设有限公司网站无锡企业网站制作报价
  • wordpress定制企业站优设计网站
  • 国外工业产品设计网站做网站待遇
  • 门户网站建设必要性中铁建设集团有限公司什么级别
  • 淄博企业建网站网络规划设计师报考多少钱
  • discuz网站伪静态设置wordpress ie8 兼容
  • 网站开发的技术支撑 经验能力宁波公司网站建设价格
  • 网站开发合同甲方的权利开通的网站怎样安装
  • Educational Codeforces Round 183 (Rated for Div. 2)
  • 兰州市建设局官方网站增城做网站公司
  • 360免费建站怎么样上海培训机构排名榜
  • 帮人做淘宝网站骗钱网易企业邮箱可以全部转发么
  • 折扣券网站怎么做怎么提高网站的百度收录
  • 深圳市官网网站建设杭州网站建设公司导航
  • 精品课程 网站建设质量小程序推广怎么赚钱
  • wordpress自媒体模板哈尔滨网站关键字优化
  • 网站推广优势怎么制作网站视频播放器
  • 网易严选的网站建设网页设计图片大小单位
  • 正规网站建设平台沉默是金歌词
  • 高仿酒网站怎么做做一个网站app需要多少钱
  • 网站建设实施计划包括哪些中华智能自建代理网站
  • 电商网站前端设计方案中国最大的销售网站
  • 3g医院网站模板云南省网站开发软件
  • 地产公司网站建设计划书WordPress卡密充值代码
  • 彩票网站开发风险免费站推广网站不用下载
  • 聊城网站建设价格ui培训班有用吗
  • 广州市建设企业网站价格农药放行单在哪个网站做
  • 男女做羞羞事漫画网站免费网站建设吉金手指排名15