返回顶部
首页 > 资讯 > 精选 >Android开发升级AGP7.0后的适配方法有哪些
  • 621
分享到

Android开发升级AGP7.0后的适配方法有哪些

2023-07-02 12:07:00 621人浏览 安东尼
摘要

本文小编为大家详细介绍“Android开发升级AGP7.0后的适配方法有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“Android开发升级AGP7.0后的适配方法有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习

本文小编为大家详细介绍“Android开发升级AGP7.0后的适配方法有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“Android开发升级AGP7.0后的适配方法有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

    升级

    年初了,我们打算升级下apg,这样之后就拥抱下jetpack compose了!!

    想用comopse有两个必选项agp7.0和Kotlin版本1.5.31.

    Java11配置

    因为apg7.0需要把所有的module编译环境切换到java11版本上,然而这个地方很容易出错。

    首先是命令行的配置,对于Mac用户来说,可能会写死默认的java环境到1.8. 这个时候我们需要做的就是删除bashprofile内的java配置。

    同时最好用命令行java --version尝试下输出的版本是不是java11。

    Android开发升级AGP7.0后的适配方法有哪些

    as的配置则相对来说比较简单了。

    Android开发升级AGP7.0后的适配方法有哪些

    Android开发升级AGP7.0后的适配方法有哪些

    按照这两个配置完成之后重新同步下工程应该就行了。

    AndroidComponentsExtension

    之前在现在准备好告别TransfORM了吗?的文章就简单展开了下AndroidComponentsExtension,新版本更换了extensions。这次给项目升级适配之前写的哪些插件,想了想用新不用久吗,尝试下新东西了。

    onVariants

    以前在写android插件的时候很多时候都需要在gralde的afterEvaluate方法执行之后才能获取到很多安卓对应的属性。

    这次在v2的api中,则提供了非常多不同的节点,让我们在不同的阶段做一些不同的事情。

    比如说onVariants,beforeVariants,finalizeDsl这三个不同的阶段,正常情况下我们选择onVariants就足够了。

    Component Artifacts

    demo 地址

    Gralde 内的一部分核心是Task,但是要想写好一个Task其实并没有想象中的那么容易。特别是一个CacheableTask,他更多的关注与他们的输入和输出。

    构建缓存(build cache)的工作原理是:在缓存中存储已编译的类、测试输出和其他构建构件,同时考虑所有的任务输入,包括输入文件内容、相关类路径和任务配置。

    所以在AGP 7.0中,提供了这部分新的api让我们简化对于task,输入输出这些参数的优化,让我们可以更专注到我们想要变更的东西上。

    比如说APk,MANIFEST,MAPPING_FILE,BUNDLE,AAR或者其他的一些编译产物,当前agp给我们提供的也是相对来说比较少的一部分功能。

    另外一点就是,我们如果想要知道一个task的输入其实如果不去阅读源码,之后获取对应的路径或者源代码,其实是一个非常繁琐的过程。之后还要通过变更dependon或者finalizedBy等等手段将任务插入到编译流程内。

    所以就有了我们这次的其中一个主角Artifacts,他主要负责帮助我们将我们的task,插入到编译流程内,让我们尽量少的关注到输入和输出。

              // 生成TaskProvider           val taskProvider = project.tasks.reGISter(                  "manifestCopy${variant.name}Task",                  ManifestSampleTask::class.java          )          // 获取variant的artifacts之后将Task转化成我们所想要的          variant.artifacts.use(taskProvider).wiredWithFiles(                  ManifestSampleTask::mergedManifest,                  ManifestSampleTask::outputManifest          ).toTransform(SingleArtifact.MERGED_MANIFEST)

    这个就是官方的一个Artifacts的简单的使用了,通过变化我们可以轻松的完成一个有获取合并后的Manifest作为输入,之后以另外一个Manifest文件作为输出的一个task。而且会被直接添加编译流程内,就不需要我们关心他们的前置和后置任务是啥了。

    registerJavaGenerateTask 没了

    原先在v1的api上吧,有registerJavaGenerateTask这个方法,能加一些简单的代码生成的操作,比如j神以前生成的R2就是通过挂载这个方法。

    这次v2版本我在AndroidComponentsExtension中没找到的对应的api,所以只能无中生友,自己搞一个出来咯。

    @Override public void registerJavaGeneratingTask(@NonNull Task task, @NonNull File... sourceFolders) {     getVariantData().registerJavaGeneratingTask(task, sourceFolders); } open fun registerJavaGeneratingTask(    task: Task,    generatedSourceFolders: Collection<File>) {    @Suppress("DEPRECATION")    taskContainer.sourceGenTask.dependsOn(task)    val fileTrees = extraGeneratedSourceFileTrees ?: mutableListOf<ConfigurableFileTree>().also {        extraGeneratedSourceFileTrees = it    }    for (f in generatedSourceFolders) {        val fileTree = services.fileTree(f).builtBy(task)        fileTrees.add(fileTree)    }    addJavaSourceFoldersToModel(generatedSourceFolders)}

    我仔细观察了下registerJavaGenerateTask的源代码,发现其中只做了两件比较简单的事情。将Task挂载到generateVariantResources任务之后,然后将生成java类的文件夹加入到sourcetSet上去,这样就行了。

    sourcetSet就是javac的将java转化成class的编译路径。

    所以相对来说就比较简单,我们用新的api模拟出原来的效果就差不多可以了,我们只要找到挂载的任务之后,顺便把代码添加到java和kotlin的sourceset中就行了

    fun Project.registerJavaGenerateTask(    variant: String?,    task: TaskProvider<out Task>,    generatedSourceFolders: Collection<File>) {    if (variant.isNullOrEmpty().not()) {        variant?.apply {            // 因为task生成在配置阶段完成之后            afterEvaluate {                findJavaGenerateTask(variant)?.dependsOn(task)            }            //  获取最新版本sourceSet            val application = extensions.findByType(ApplicationExtension::class.java)            application?.sourceSets {                findByName(variant)?.apply {                    generatedSourceFolders.forEach {                        java.srcDir(it)                        kotlin.srcDir(it)                    }                }            }        }    }}

    这次升级适配主要的代码就是这个了,其实代码量上来说不多。但是把有个坑点,之前因为偷懒就直接用了setSrcDirs这个api,所以文件就被覆盖了。导致了一部分代码没有被编译成class,导致了classnotfound异常。

    其他

    获取applicationId,我们的插件内有对于应用id的判断,之后进行不同的manifest pleaceholder的调整。逻辑比较简单,只是切换了新版本的api而已。

      if (variant is ApplicationVariant) {    val applicationId = variant.applicationId.get()      variant.manifestPlaceholders.put("xxxxx", applicationId)  }

    对resValue插入新的string或者values。也是原来就有的能力,但是要对新版本进行一次小小的适配和更换。

    private fun addAPGClassFile(config: Variant, key: String, value: String) {    val resValue = ResValue(value)    val reskey = config.makeResValueKey("string", key)    config.resValues.put(reskey, resValue)}

    启动configuration cache

    启用配置缓存的操作,本质上是在项目的 gradle.properties 文件中设置了环境变量 org.gradle.unsafe.configuration-cache=true。

    读到这里,这篇“Android开发升级AGP7.0后的适配方法有哪些”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

    --结束END--

    本文标题: Android开发升级AGP7.0后的适配方法有哪些

    本文链接: https://lsjlt.com/news/341746.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • Android开发升级AGP7.0后的适配方法有哪些
      本文小编为大家详细介绍“Android开发升级AGP7.0后的适配方法有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“Android开发升级AGP7.0后的适配方法有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习...
      99+
      2023-07-02
    • Android开发升级AGP7.0后的一些适配方法技巧
      目录升级Java11配置AndroidComponentsExtensiononVariantsComponent ArtifactsregisterJavaGenerateTask...
      99+
      2024-04-02
    • web开发锁的状态以及升级方法有哪些
      锁的状态以及升级方法有哪些,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、前言锁的状态总共有四种,级别由低到高...
      99+
      2024-04-02
    • nodejs升级的方法有哪些
      这篇文章主要介绍“nodejs升级的方法有哪些”,在日常操作中,相信很多人在nodejs升级的方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”nodejs升级的方法有...
      99+
      2024-04-02
    • Android Studio升级到3.0后遇到的坑有哪些
      这篇文章主要介绍Android Studio升级到3.0后遇到的坑有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!第一坑、必须升级gradle到4.0以上相信这个大坑,一般使用as的人都会解决了,所以就不多说第二...
      99+
      2023-05-30
      android studio
    • 升级Ubuntu 11.04 Natty的方法有哪些
      这篇文章主要讲解了“升级Ubuntu 11.04 Natty的方法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“升级Ubuntu 11.04 Natty的方法有哪些”吧!在线升级: G...
      99+
      2023-06-16
    • 免费升级win11的方法有哪些
      今天小编给大家分享一下免费升级win11的方法有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。方法一:win11推送升级...
      99+
      2023-07-02
    • android开发性能优化的方法有哪些
      Android开发性能优化的方法有以下几种:1.减少内存使用:通过使用轻量级数据结构、避免创建不必要的对象、及时释放无用的资源等方式...
      99+
      2023-09-13
      android
    • Android开发中解析xml的方法有哪些
      这篇文章给大家介绍Android开发中解析xml的方法有哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。第一步:新建一个Android工程,命名为XmlDemo第二步:修改main.xml布局文件,代码如下:<...
      99+
      2023-05-31
      android xml roi
    • 关于云服务器的升级配置问题有哪些方法
      服务器硬件配置: 在升级配置云服务器之前,需要确定服务器的硬件配置。服务器硬件配置包括服务器主板、内存、硬盘、操作系统、网络连接和其他设备。这些硬件设备的规格和数量将直接影响服务器的性能和稳定性。 云服务器的安全措施: 为了保证云...
      99+
      2023-10-28
      服务器 方法 有哪些
    • PostgreSQL升级的方法有哪几种
      这篇文章主要介绍“PostgreSQL升级的方法有哪几种”,在日常操作中,相信很多人在PostgreSQL升级的方法有哪几种问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Po...
      99+
      2024-04-02
    • android开启线程的方法有哪些
      在Android中,可以通过以下几种方式开启线程:1. 使用Thread类:创建一个继承自Thread类的子类,并实现run()方法...
      99+
      2023-08-12
      android
    • SAP API开发方法有哪些
      本篇内容主要讲解“SAP API开发方法有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SAP API开发方法有哪些”吧!(1) ABAP function module + SOAMANA...
      99+
      2023-06-03
    • 为Ubuntu升级Linux内核的不同方法有哪些
      这篇文章将为大家详细讲解有关为Ubuntu升级Linux内核的不同方法有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。第一部分:需要重启的内核升级以下方法需要你重启系统以便新的内核生效。以下所有方法都...
      99+
      2023-06-16
    • Android开发中创建桌面快捷方式的方法有哪些
      今天就跟大家聊聊有关Android开发中创建桌面快捷方式的方法有哪些,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Android在桌面上生成快捷方式有两种情况,一种是直接在桌面直接生...
      99+
      2023-05-31
      android roi
    • 适合开发者的Chrome插件有哪些
      这篇文章给大家介绍适合开发者的Chrome插件有哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Chrome已经是Web开发中使用最多的浏览器,Chrome插件种类繁多,这些插件帮助开发者们大大提升了工作效率,本文我...
      99+
      2023-06-15
    • XP升级到Win8操作系统有哪些方法
      近日,微软透露了Windows8的升级详情,所有 Windows XP, Vista 和 Windows7的用户可升级至 Win8,但是有一些限制。如XP系统必须安装过SP3才能升级。Windows8系统详...
      99+
      2022-06-04
      升级到 操作系统 方法
    • Java的后端开发技术有哪些
      这篇文章主要介绍“Java的后端开发技术有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java的后端开发技术有哪些”文章能帮助大家解决问题。Servlet技术Servlet 是从事 Java ...
      99+
      2023-06-27
    • Android开发中实现定时器功能的方法有哪些
      Android开发中实现定时器功能的方法有哪些?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、TimerTimer是Android直接启动定时器的类,TimerTask是...
      99+
      2023-05-31
      android roi
    • 前端开发与后端开发的区别有哪些
      这篇文章主要介绍了前端开发与后端开发的区别有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 前端开发是什么前端称为客户端开发,你可以在应用程序或网站的屏幕上看到...
      99+
      2023-06-15
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作