适配 AGP8.5,构建参数 targetSdk 等配置(六)

emacs入门命令、gradle慢解决通用思路以及和idea互通、 android-studio启动 、 版本对照:gradel和AS和Android Gradle plugin(AGP) android-studio和Android Gradle plugin(AGP)版本对照、 本 阅读详情

在这里插入图片描述

1、versionName & versionCode & packageName

  • versionName
  • versionCode
  • packageName

AGP7+

android = mProject.extensions.findByName("android")

android.defaultConfig.applicationId = packageName
android.defaultConfig.versionName = versionName
android.defaultConfig.versionCode = Integer.parseInt(versionCode)

AGP8+

private fun processBuildParams(data: JsonObject, project: Project) {
        val versionName = (data["versionName"] as JsonPrimitive).content
        val versionCode = (data["versionCode"] as JsonPrimitive).content.toInt()
        val packageName = (data["packageName"] as JsonPrimitive).content

        CmdColorPrintUtils.outputGreen(
            "构建参数:\n" +
                    "\tversionName =$versionName\n" +
                    "\tversionCode =$versionCode\n" +
                    "\tpackageName =$packageName\n"
        )

        val androidComponents =
            project.extensions.getByType(ApplicationAndroidComponentsExtension::class.java)
        androidComponents.onVariants { variant ->
            variant.applicationId.set(packageName)
            variant.outputs.forEach { variantOutput ->
                variantOutput.versionCode.set(versionCode)
                variantOutput.versionName.set(versionName)
            }
        }
    }

2、ndk abiFilters

AGP7+

android.defaultConfig.ndk.abiFilters = abiList

AGP8+

project.plugins.withId("com.android.application") {
            val androidDslExt =
                project.extensions.findByType(ApplicationExtension::class.java)
            androidDslExt?.buildTypes?.all { buildType ->

                val abiList = CheckPluginManager.getInstance().abiList
                if (abiList.isNotEmpty()) {
                    CmdColorPrintUtils.outputGreen("${buildType.name} 指定CPU架构:")
                    abiList.forEach {
                        CmdColorPrintUtils.outputGreen("\t $it")
                    }
                    buildType.ndk {
                        abiFilters.addAll(abiList)
                    }
                }
            }
        }

3、manifest Placeholders

AGP7+

Map<String, Object> placeInMap = new HashMap<>()

android.defaultConfig.manifestPlaceholders = placeInMap

AGP8+

推荐方式一

private var mManifestPlaceMap = mutableMapOf<String, String>()

project.plugins.withType(AppPlugin::class.java) {
	val appExt =
		project.extensions.getByType(ApplicationAndroidComponentsExtension::class.java)

		//【方式一】推荐,在添加变体情况下也可以使用
		appExt.finalizeDsl { extension ->
		    extension.defaultConfig {
		        CmdColorPrintUtils.outputGreen("manifest 参数:")
		        mManifestPlaceMap.forEach { (k, v) ->
		            manifestPlaceholders.put(k, v)
		            CmdColorPrintUtils.outputGreen("\t$k  ->  $v")
		        }
		    }
		}
		
	appExt.onVariants { variant ->
		//【方式二】在不添加变体情况下这样是可用的
		CmdColorPrintUtils.outputGreen("${variant.name} manifest 参数:")
		mManifestPlaceMap.forEach { (k, v) ->
			CmdColorPrintUtils.outputGreen("\t$k  ->  $v")
			variant.manifestPlaceholders.put(k, v)
		}
	}

4、targetSdk & minSdk & compileSdk

AGP8+

  • 找到 AndroidComponentsExtension 并设置 beforeVariants
  • 找到 CommonExtension 直接设置 compileSdk
//一些编译配置
val androidExt = project.extensions.getByType(AndroidComponentsExtension::class.java)
val commonExt = project.extensions.getByType(CommonExtension::class.java)

//compileSdk,你需要马上设置
val compileSdk = CheckPluginManager.getInstance().compilerSDK
if (compileSdk > 0) {
    commonExt.compileSdk = compileSdk
    CmdColorPrintUtils.outputGreen("设置包体参数 compileSdk:$compileSdk")
}

androidExt.beforeVariants { variant ->
    val genVariant = variant as GeneratesApkBuilder
    val minSdk = CheckPluginManager.getInstance().minSDK
    val targetSdk = getTargetSdk()
    if (minSdk > 0) {
        variant.minSdk = minSdk
        CmdColorPrintUtils.outputGreen("${variant.name} 设置包体参数 minSdk:$minSdk")
    }
    if (targetSdk > 0) {
		//你也可以这样设置,但是 AS 提示方法过时
		//建议你使用 GeneratesApkBuilder 的接口,使用 variant as GeneratesApkBuilder 转换
        //variant.targetSdk = targetSdk;

        genVariant.targetSdk = targetSdk
        CmdColorPrintUtils.outputGreen("${variant.name} 设置包体参数 targetSdk:$targetSdk")
    }
    CheckPluginManager.getInstance().currentTargetSdkVer = genVariant.targetSdk as Int
    CheckPluginManager.getInstance().currentCompileSdkVer = commonExt.compileSdk!!
}

4.1 compileSdk 相关

设置 compileSdk 怎么找到 CommonExtension 的?

比如我现在使用的是gradle-api-8.7.2

找到这个 jar 使用 JADX 打开搜索设置 compileSdk 相似接口就发现了

在这里插入图片描述

你需要较早设置 compileSdk

设置较晚会报错:It is too late to set compileSdk

A problem occurred configuring project ':app'.
> com.android.build.gradle.internal.dsl.AgpDslLockedException: It is too late to set compileSdk
  It has already been read to configure this project.
  Consider either moving this call to be during evaluation,
  or using the variant API.

同样的,targetSdk、minSdk 你也可以这样寻找

对我们来说 AGP8+ 可能是新事物,这能这样慢慢摸索了,除非官方文档有相应的 demo

在这里插入图片描述

Android开发最佳实践:从Gradle构建到文件存储的深度技术解析 在Android应用开发中,工程构建、系统框架和存储适配是决定应用稳定性与可维护性的关键。Gradle作为构建地基,版本对齐与依赖管理直接影响编译效率;分区存储与FileProvider机制则关乎应用在Android 10以上系统的文件分享安全性。理解ContentProvider初始化时机和进程模型,有助于排查线上疑难问题;而合理应对后台限制与蓝牙权限变化,则是适配新系统的必修课。本文从这些基础技术概念出发,结合工程实践,系统梳理了Android中大型项目构建、架构、存储与分享功能的实现要点,并给出常见崩 阅读详情

相关推荐

Android Gradle构建:定制APK输出路径与文件名的工程实践

在软件构建与持续集成(CI/CD)流程中,构建产物的规范化管理是提升工程效率的关键环节。其核心原理在于通过构建工具对输出产物进行标准化命名与路径规划,从而实现自动化脚本的通用性和版本追溯的便捷性。这一实践的技术价值在于,它能显著减少人工干预,避免文件混淆,并优化团队协作流程。尤其在Android开发领域,通过Gradle这一主流构建工具,开发者可以灵活配置APK的输出属性,将版本号、构建时间、Git提交哈希或渠道标识等信息动态嵌入文件名,并将产物归类到指定目录。这种定制化能力广泛应用于多构建变体管理、多渠道

weixin_33769125的博客 396

AGP 升级,适配 8.5 版本(一)

本次升级是从之前的 AGP7+ 升级到 AGP8+

Primer5 2839

Android Studio构建失败:Failed to apply plugin错误深度排查与解决指南

在Android应用开发中,Gradle作为核心构建工具,负责管理依赖、编译代码和打包应用。其工作原理是通过解析构建脚本中的配置,动态加载并应用相应的插件(如Android Gradle Plugin)来完成整个构建生命周期。当插件应用失败时,构建流程便会中断,直接影响开发效率。这通常源于构建环境配置的复杂性,例如网络问题导致的依赖下载超时,或是Gradle与AGP版本不兼容。对于开发者而言,掌握系统性的排查方法至关重要,这不仅能快速恢复构建,更是保障团队协作和持续集成流水线稳定的工程实践基础。本文聚焦于A

weixin_30527323的博客 331

Android 基于Gradle 7.2+,自定义插件示例(实测7.4.2也可以运行)

结果,并不能运行那段命令代码,搜索了一堆资料,也没搞定,放弃了。看了官方的示例,把那段也注释掉了,真有意思,哈哈。* 在 manifest 文件中替换文本,得到了 app/build/intermediates/merged_manifest/staging/[build variant]ManifestUpdater/AndroidManifest.xml。创建变体还有一些简单的方式,我的示例中,试了 “构建变体,方式1、2、3” ,就定义在 app/build.gradle.kts 中。

Dream It Possible 726

flutter3.41.5版本运行不起来程序,配置直接搞定,第一篇

flutter点击运行时出现网络问题时,1.修改两个文件2.下载一个东西全部解决假如我们的项目名字叫fluttertestapp。

qq_43894292的博客 208

Android计步器Gradle构建指南:从依赖配置到ProGuard混淆

Android Gradle构建是应用交付的基石,涉及AGP与Gradle版本匹配、构建脚本配置、依赖管理及代码混淆等核心环节。其原理在于通过声明式DSL驱动编译、资源处理、打包与优化全流程,技术价值体现在保障多端兼容性、控制APK体积、提升构建可复现性。典型应用场景包括传感器类轻量App(如计步器)的快速集成与发布,尤其需关注android:exported、minSdkVersion、ProGuard规则等现代构建约束。本文聚焦Gradle构建链路中的关键配置与高频问题,涵盖AGP版本校验、国内镜像源设

weixin_42561143的博客 182

Android 15 变更及适配攻略

2025年的第一篇Android适配,比以往来的更晚一些。废话不多说,我们开始!!

唯鹿的博客 8869

Android Studio底层配置逻辑与构建系统详解

Android Studio并非普通IDE,而是深度耦合JDK、Gradle、Android SDK和NDK的工程化工具链。其核心在于理解Gradle构建生命周期、AGP版本协同机制及多层配置文件(build.gradle、settings.gradle、local.properties、gradle.properties)的职责分工。技术价值体现在构建可复现性、跨环境一致性与CI/CD集成能力;典型应用场景包括团队协作开发、多模块项目管理、模拟器调试优化及Lint质量管控。本文聚焦Android Stud

weixin_34234721的博客 429

Android AGP8.1.0组件化初探

其实本文的目的不是在于如何使用,ARouter这个很简单,相信做过组件化的同学都会,只是需要遇到问题时学会分析和调试,要不然盲目猜测是不会有结果的。开发这条路任重而道远,希望大家都能上下求索,享受这个求索的过程,痛并快乐着,也很重要,新技术出来可以尝试,也可以根据自己需要调整,不一样说非得更新用这个新技术,只要能解决问题,咋好用咋来。

u012556114的博客 2059

三端口DC-DC变换器设计与光伏储能协同控制

三端口DC-DC变换器是面向分布式能源系统的关键功率变换拓扑,通过在光伏输入、储能电池与直流负载三个端口间实现动态能量分配,解决多源异步供电下的电压稳定与功率平衡问题。其核心原理基于双Boost半桥架构与双闭环协同控制,融合MPPT最大功率点跟踪与电池智能充放电管理,在保证30V高精度稳压(±0.5V)的同时,支持光伏主导供电与电池支撑供电的自动模式切换。该技术显著提升光储系统能量利用率与供电连续性,广泛应用于微电网、便携式交直流电源及离网型光储一体机等场景,是构建柔性直流配电与智能能源管理的基础硬件单元。

weixin_36431814的博客 142

CIFAR-100模型性能对比:Top1与Top5错误率深度解析

本文深度解析了CIFAR-100数据集上Top1与Top5错误率的核心意义与差异。通过对比MobileNet、ResNet、DenseNet等主流模型的性能数据,揭示了模型架构、训练策略及数据集特性如何共同影响这两个关键指标,并为不同应用场景下的模型选择提供了实战指南。

weixin_28224217的博客 339

AGP 8.x vs AGP 9.x 稳定性对比, AGP 3.5.4项目迁移到 AGP 8.13

<think>我们根据要求:根据以下内容,生成≤150字的文章摘要。内容是关于AGP 8.x vs 9.x稳定性对比和迁移分析。需要提炼核心要点。注意字数限制。输出摘要。</think>AGP 8.13作为8.x最终版,经过两年迭代极其稳定,社区生态完善;而AGP 9.x虽为最新,但破坏性变更多、强制内置Kotlin,且第三方插件兼容性差。对纯Java项目,建议分步迁移至AGP 8.13(需改namespace、JDK 17、DSL等),暂缓升级9.x,待生态成熟后再考虑。

白高林的专栏 349

FreeRTOS-Plus-CLI在STM32F429上的高效移植与调试技巧

本文详细介绍了如何将FreeRTOS-Plus-CLI高效移植到STM32F429平台,并分享关键的调试技巧。内容涵盖使用HAL库进行底层驱动适配(特别是DMA+IDLE中断方案)、工程集成、自定义命令开发以及常见问题解决方案,旨在帮助开发者快速为嵌入式系统添加强大的命令行调试接口,提升开发与维护效率。

weixin_29224309的博客 336

【Android】Android TargetSdk 35 -> 36迁移要点

Android API/AGP 兼容表 (https://developer.android.com/build/releases/about-agp)、Android 16 SDK。Android 16 返回行为变化 (https://developer.android.com/about/versions/16/behavior-changes-16)、预测返回迁移指南。配置 (https://developer.android.com/about/versions/16/setup-sdk)

weixin_42473228的博客 478

Jetson Nano官方镜像下载&烧录

在NVIDIA Jetson Nano开发者套件上安装NVIDIA官方Ubuntu镜像

weixin_44222088的博客 8854

OnlyOffice Docker部署踩坑实录:解决Nginx反向代理导致的editor.bin下载失败

本文详细解析了在Docker中部署OnlyOffice时,因Nginx反向代理配置不当导致editor.bin下载失败的常见问题。通过分析问题根源,提供了从Nginx代理配置、Docker网络设置到OnlyOffice容器内部调整的完整解决方案,并分享了实战调试技巧与性能优化建议,帮助用户彻底解决这一部署难题。

wine的专栏 524

Android SDK版本管理:compileSdk、minSdk、targetSdk全面解析

在Android应用开发中,compileSdk、minSdk与targetSdk是build.gradle中的核心配置,它们分别决定了编译API范围、设备安装门槛与运行时行为规则。理解三者差异可避免依赖冲突、安装失败与行为变更等典型问题。通过合理设置SDK版本,开发者可以平衡用户覆盖与系统适配,提升应用稳定性。随着Android版本迭代,targetSdk升级需关注权限、通知、存储等行为变更。本文梳理实践方案,帮助开发者高效管理Android项目SDK版本。

weixin_30843605的博客 426

开源ISP介绍(1)——开源ISP的Vivado框架搭建

ZYNQ视频图像处理系统,ISP图像处理硬件实现

路漫漫其修远兮,吾将上下而求索 3292

安卓Build—SDK, JDK适配简明指南

Android compileSdk , minSdk,  targetSdk 以及sourceCompatibility, targetCompatibility 的区别与配置指南

淼miaomiao的博客 1499

【AI测试干货】软件测试 - 全流程提示词完整体系

本篇教程是一套专为软件测试工程师打造的 AI 协作提示词体系。从测试计划制定、用例设计、自动化脚本开发、缺陷管理,到测试报告生成,每个环节都提供了结构化的提示词模板,帮助测试人员高效利用 AI 提升工作质量。

blues_C的博客 353

【异常】Coze/扣子 Workflow 调用报 4200 错误深度解析

Coze API 的。

奶爸的编程之路,也就一周冷个三天 302

Android Studio 2024 + AGP 7.4.2 配置:5 个关键文件修改与 NDK 版本兼容性实测

本文详细解析了Android Studio 2024与AGP 7.4.2的配置迁移实战,重点介绍了5个关键文件的修改步骤及NDK版本兼容性实测。通过实测数据揭示了libomp.so问题的解决方案,帮助开发者高效完成项目升级,提升构建成功率和性能。

weixin_34032792的博客 441

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【Android 构建必读】构建工具链版本对应关系全解析 · 2026版

如果你遇到过下面这类报错,大概率不是代码写错了,而是构建工具版本没对齐一句话总结:Android 构建是一套「环环相扣」的工具链——不只是 AGP 和 Gradle,Kotlin、KSP、Compose、JDK、Studio 都要对齐,任何一个环节版本不对,整个项目就编不过。本文的目标很简单——让你升级时直接查表、照表操作,不用到处搜碎片信息。Android 构建版本升级,说难不难,说简单也不简单。查表对齐:AGP、Gradle、Studio、Kotlin、KSP、Compose、JDK 七者版本要匹配。

iotjin的专栏 1132

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

新建 Android 项目:Gradle Sync 与环境配置完整避坑

Android 项目的构建与运行,本质上是一套由 Gradle、AGP、JDK 与 Android SDK 共同约束的环境工程。Gradle Sync 负责解析依赖、编译资源并生成工程结构,AGP 把 Android 构建规则接入 Gradle;当 JDK 版本、AGP/Gradle 对应关系或 SDK 组件错位时,最常见表现就是同步失败或设备无法启动。理解这条链路的价值,在于把“新建项目”从点向导按钮变成可排查的工程流程,并覆盖模拟器加速、adb 真机调试、Logcat 日志定位等日常场景。第一个 And

weixin_33841503的博客 718

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Android开发环境升级与旧版教材代码适配指南

Android开发环境随着Gradle和Android Studio的迭代不断演进,导致旧版教材中的示例代码在新环境下常出现兼容性问题。Gradle作为构建工具的核心组件,其语法从2.x到7.x+经历了重大变革,包括依赖声明方式从compile变为implementation/api等。这些变化直接影响项目的构建流程和依赖管理,需要开发者掌握版本迁移技巧。在工程实践中,常见的适配场景包括处理废弃API(如AsyncTask)、遵循新的lint规范、调整工程结构等。通过理解构建系统的原理和Android框架的

weixin_30700977的博客 401

Flutter Deer 演进实录:从 CHANGELOG 看 Android 系统适配、Flutter SDK 升级与工程化打磨

`docs/CHANGELOG.md` 记录了 Flutter Deer 自 1.0.7 至 1.3.3 的全部版本变更,是理解这个 Flutter 练习项目技术演进脉络的第一手资料。本文以该文档为骨架,结合仓库中的 `pubspec.yaml`、Android 工程配置、源码与测试,逐版本还原其 Flutter SDK 升级路线、Android 系统版本适配策略、空安全迁移、深色模式与本地化改造

gitblog_00886的博客 762
上一篇: 我提了一个 Androidx IssueTracker
下一篇: AGP8+ fullMode 完全模式混淆闪退
Primer@.com
博客等级 码龄9年 524粉丝 292原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值