首页 > 其他分享 >Android Studio项目中的重复类、动态版本控制及其他优化方法

Android Studio项目中的重复类、动态版本控制及其他优化方法

时间:2024-07-21 12:59:23浏览次数:15  
标签:版本控制 Instant variant Studio aar Android com android

本文介绍在Android开发过程中,我们常常会遇到一些棘手的问题,如重复类冲突、动态版本控制及依赖打包等。本文将介绍如何解决这些问题,并提供一些有用的优化方法。

1. 解决重复类冲突问题

在引入多个JAR包或AAR包时,可能会遇到类重复的问题,导致编译失败。这里提供了两种解决方法:

方法1:手动删除重复类

最简单的方法是手动打开JAR包(可以使用ZIP工具),然后删除重复的类文件。这种方法适合于少量的重复类情况。

方法2:通过Gradle脚本自动处理

build.gradle文件中增加自动化脚本,检测并删除重复类。

之前写过,详细参考这篇解决 Android 项目中 Duplicate Class 问题。-

2. 动态判断打包APK和AAR并增加日期版本标识

在项目的build.gradle文件中,通过动态判断插件类型来分别处理应用模块和库模块的输出文件名,并在文件名中添加日期和版本信息。

android {
    // 其他配置省略

    afterEvaluate {
        if (project.plugins.hasPlugin('com.android.application')) {
            applicationVariants.all { variant ->
                variant.outputs.all { output ->
                    def date = new Date().format("yyyy_MM_dd", TimeZone.getTimeZone("GMT+08"))
                    def buildType = variant.buildType.name
                    def newFileName = "${android.defaultConfig.applicationId}_${buildType}_${date}_v${android.defaultConfig.versionName}.apk"
                    output.outputFileName = newFileName
                }
            }
        }

        if (project.plugins.hasPlugin('com.android.library')) {
            libraryVariants.all { variant ->
                variant.outputs.all { output ->
                    def moduleName = project.name
                    def versionName = android.defaultConfig.versionName
                    output.outputFileName = "${moduleName}-${variant.name}-${versionName}.aar"
                    variant.buildConfigField 'String', 'VERSION_NAME', "\"${versionName}\""
                }
            }
        }
    }
}

在这里插入图片描述

3. 打包AAR时将远程依赖包一起打包

使用fat-aar插件可以将库及其依赖模块一起打包成一个完整的AAR包。以下是使用fat-aar插件的步骤:

第一步:添加插件到根目录的build.gradle文件
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.github.kezong:fat-aar:1.3.8'
    }
}
第二步:在主library的build.gradle中应用插件
apply plugin: 'com.kezong.fat-aar'
第三步:在dependencies中使用embed来包含依赖
dependencies {
    implementation fileTree(dir: 'libs', include: '*.jar')
    embed project(path: ':lib-java', configuration: 'default')
    embed project(path: ':lib-aar', configuration: 'default')
    embed 'com.google.guava:guava:20.0'
    embed 'com.facebook.fresco:fresco:1.12.0'
    implementation('androidx.appcompat:appcompat:1.2.0')
}

4. Android Studio 4.0及以上版本中Instant Run功能的开启或关闭

Instant Run功能可以大幅提升应用从编译到运行的速度,但有时也会带来一些不可预见的BUG。在Android Studio 3.0之后,需要通过修改配置文件来关闭Instant Run,Instant Run 改名为HotSwap(热交换)。

关闭Instant Run

在这里插入图片描述

总结

本文介绍了在Android开发中常见的几个问题及其解决方案,包括如何处理重复类、动态版本控制、打包完整的AAR以及关闭Instant Run功能。通过这些方法,可以更高效管理项目依赖,提高构建效率,并减少不必要的错误。

标签:版本控制,Instant,variant,Studio,aar,Android,com,android
From: https://blog.csdn.net/SHH_1064994894/article/details/140569011

相关文章

  • SQLite数据库在Android中的使用
    目录一,SQLite简介二,SQLIte在Android中的使用1,打开或者创建数据库2,创建表3,插入数据4,删除数据5,修改数据 6,查询数据三,SQLiteOpenHelper类四,SQLite中事务的处理一,SQLite简介        SQLite是一个无服务器的,零配置的,事务性的SQL数据库引擎。无服务器,意味着使......
  • Android10.0 锁屏分析-KeyguardPatternView图案锁分析
    首先一起看看下面这张图:通过前面锁屏加载流程可以知道在KeyguardSecurityContainer中使用getSecurityView()根据不同的securityModeinflate出来,并添加到界面上的。我们知道,Pattern锁所使用的layout是R.layout.keyguard_pattern_view;<com.android.keyguard.KeyguardPat......
  • 如何在Android Java中访问android/data/文件夹(应用程序包)?
    **我的应用程序的包名称是com.gorlopsen。该应用程序必须上传了没有它就无法工作的文件。文件下载到存档中并解压到android/data/com.gorlopsen文件夹中。但是,在解压阶段,出现下载错误,导致应用程序无法使用。在网上找到了有关访问所有文件的信息,但并不适合我。是否可以请求......
  • 基于Android平台开发,在线电影购票系统(九)用户评论列表实现
    1.涉及到的技术点使用SQLite数据库实现用户评论数据保存使用RecyclerView+adapter实现用户评论列表2.具体代码实现过程CommentListAdapter.java适配器publicclassCommentListAdapterextendsRecyclerView.Adapter<CommentListAdapter.MyHolder>{privateList......
  • 我正在尝试将 Azure SQL 数据库连接到 Microsoft SQL Server Management Studio。收到
    这是完整的错误——标题:连接到服务器无法连接到adityapatil-server.database.windows.net。其他信息:建立与SQLServer的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及SQLServer是否配置为允许远程连接。(提供......
  • Android C++系列:Linux文件系统(二)
    1.VFS虚拟文件系统Linux支持各种各样的文件系统格式,如ext2、ext3、reiserfs、FAT、NTFS、iso9660等等,不同的磁盘分区、光盘或其它存储设备都有不同的文件系统格式,然而这些文件系统都可以mount到某个目录下,使我们看到一个统一的目录树,各种文件系统上的目录和文件我们用l......
  • Android C++系列:函数返回值注意事项
    1.背景函数返回值就是使用return语句终止正在执行的函数,看是很简单的问题有什么说的呢?因为越是简单的问题里面越是有一些不易发现的坑。比如在循环中使用return语句:boolfindChar(conststring&str,constcharc){autosize=str.size();for(decltype(size......
  • Android开发 - xmlns命名空间中tools详解
    xmlns:tools是什么命名空间tools可以告诉AndroidStudio,哪些属性在运行的时候是被忽略的,只在设计布局的时候有效。比如我们要让android:text属性只在布局预览中有效。tools可以覆盖android的所有标准属性,将android:换成tools:即可。同时在运行的时候就连tools:本身都是被忽略......
  • Android开发 - 布局文件之 include 使用
    简介include是在一个布局中,导入另一个布局文件。优势是:相同的页面只需写一次,提高了共通布局的复用性。下面我们以标题栏为例,详细说明它的使用步骤使用步骤第一步:通用布局-创建title_bar.xml//title_bar<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:an......
  • Android开发 - Context解析
    Context是什么Context的中文翻译为:语境;上下文;背景;环境,在开发中我们经常说称之为“上下文”,那么这个“上下文”到底是指什么意思呢?在语文中,我们可以理解为语境,在程序中,我们可以理解为当前对象在程序中所处的一个环境,一个与系统交互的过程。比如微信聊天,此时的“环境”是指......