【android】android studio生成aar包并在其他工程引用aar包(类/函数/activity)

android studio生成aar包并在其他工程引用aar包

  • arr引用和jar引用的区别
  • 1.ARR实现简单的JAVA/Kotlin类和函数调用过程
    • 1.1.新建需要打包成AAR的模块类
    • 1.2.新建需要调用的类
    • 1.3 创建 AAR 文件:
    • 1.4 AAR文件使用
    • 1.5 函数调用
  • 2.实现AAR中activity的调用过程
    • 2.1 ==**特别说明**==:
    • 2.1.1 名称的设置
      • 2.1.2 android:exported属性设置
    • 2.2 新建需要封装的 android library
      • 2.2.1 AAR打包文件的新建
      • 2.2.2 AAR打包文件的调用
  • 3 MainActivity2调用AAR完整code

arr引用和jar引用的区别

JAR文件,即Java Archive File,主要包含了class文件和清单文件,而不包含资源文件,如图片等所有res中的文件。因此,JAR文件更适合用于简单的类库。

而AAR文件,全称Android Application Resource,它包含了class文件以及res资源文件,这意味着它包含了所有Android应用程序可能需要的资源。因此,如果你的项目是一个UI库,包含一些自己写的控件布局文件以及字体等资源文件,那么就只能使用ARR文件

1.ARR实现简单的JAVA/Kotlin类和函数调用过程

1.1.新建需要打包成AAR的模块类

在现有工程中创建一个 Android Library 项目/module类:
在 Android Studio 中创建一个新的 Android Library 项目,例如命名为 myapplication。
在 Library 项目中创建 Kotlin /java类和函数:
(也可以新建Module,修改新建的build.gradle,将id 'com.android.application’修改为 id ‘com.android.library’,
并注释applicationId “com.example.myapplication1”)

1.2.新建需要调用的类

在 MyKotlinLibrary 项目中创建一个 Kotlin 类,例如 mylibrary.kt和mylibrary_java.java,
mylibrary.kt

package com.example.myapplication1public class mylibrary {public fun helloFromLibrary(): String {return "Hello from the kotlin library!"}
}

mylibrary_java.java

package com.example.myapplication1;public class mylibrary_java {public static String hellofromjava(){return "come from java library";}}

1.3 创建 AAR 文件:

在 Android Studio 中执行 Build -> Make Project,生成 AAR 文件。文件目录“C:\Users…\MyApplication222\myapplication1\build\outputs\aar”

1.4 AAR文件使用

在另一个 Android 应用项目中使用 AAR 文件:
将生成的 AAR 文件复制到另一个 Android 应用项目的 libs 目录下。
在应用项目的 build.gradle 文件中添加以下依赖:

dependencies {implementation files('libs/myapplication1-debug.aar')}

或者直接

implementation fileTree(include: ['*.jar',"*.aar"],dir:'libs')

说明:以上两种方法对应工程中的gradle版本为7.4其他版本的引用方式请参考其他教程

1.5 函数调用

局部函数(完整code见文末链接)

        val button1 =findViewById<Button>(R.id.button)button1.setOnClickListener {val message: String = mylibrary_java.hellofromjava()Log.d("MainActivityfromjava", message)val message2 = mylibrary()val dismessage : String? = message2.helloFromLibrary()if (dismessage != null) {Log.d("MainActivity", dismessage)}}

结果
在这里插入图片描述

2.实现AAR中activity的调用过程

activity的调用通过新建module或者android library都可以实现

2.1 特别说明

2.1.1 名称的设置

在通过AAR打包和调用时一定要注意自己设计的类名、函数名、UI界面元素ID名保证AAR中所有的名称与目标工程文件中的类名、函数名、UI界面元素ID名不一样否则会发生如下报错
W/libEGL: EGLNativeWindowType 0xb4000076c669b580 disconnect failed

这种情况可能由多种原因引起,包括但不限于:

资源释放问题:在某些情况下,当图形资源(如 Surface 或纹理)被错误地释放或重复释放时,可能会出现此类警告。
线程同步问题:如果图形操作(如渲染或资源释放)在不同的线程中进行,并且没有正确的同步机制,可能会出现竞态条件,导致此类警告。
应用或框架问题:有时,应用程序或框架本身可能存在错误,导致图形资源的管理不当。
设备或驱动问题:在某些设备上,图形驱动可能存在问题或不完全兼容,导致此类警告。

为了避免类似的错误发生在设计AAR时一定要注意类名、函数名、UI界面元素ID名的唯一性

2.1.2 android:exported属性设置

在AndroidManifest.xml文件中,android:exported属性用于指定一个组件(如Activity、Service、BroadcastReceiver或ContentProvider)是否可以被其他应用程序访问。这个属性有两个可能的取值:true和false。
android:exported=“true”:
当android:exported="true"时,表示该组件可以被其他应用程序访问。
其他应用程序可以通过Intent来启动该组件,发送广播给该组件,或者访问该组件提供的内容。
如果您希望其他应用程序能够与您的应用程序中的某个组件进行交互,您可以将android:exported设置为true。
android:exported=“false”:
当android:exported="false"时,表示该组件不可以被其他应用程序访问。
其他应用程序无法直接启动该组件,发送广播给该组件,或者访问该组件提供的内容。
如果您希望限制其他应用程序对您的应用程序中某个组件的访问权限,您可以将android:exported设置为false。
总的来说,android:exported="true"允许其他应用程序访问组件,而android:exported="false"则限制了对组件的访问。
在这里插入图片描述

2.2 新建需要封装的 android library

2.2.1 AAR打包文件的新建

在 com.example.mylibrary_test上点击右键,新建一个activty->emptyactivity,
在这里插入图片描述
局部函数(完整code见文末链接)
Main2Activity文件

class Main2Activity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main2)}
}

ui文件
局部函数(完整code见文末链接)

 <TextViewandroid:id="@+id/textView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="main2activity"tools:layout_editor_absoluteX="209dp"tools:layout_editor_absoluteY="360dp" />
</androidx.constraintlayout.widget.ConstraintLayout>

AAR的生成和应用与"JAVA/Kotlin类和函数调用"小节”方法一致

2.2.2 AAR打包文件的调用

直接在需要调用的按钮事件中添加
局部函数(完整code见文末链接)

            try {Log.e("MainActivity", "starting activity try")val intent = Intent(this, com.example.myapplication1.mylibMainActivity::class.java)//val intent = Intent(this, com.example.mylibrary_test.Main2Activity::class.java)//val intent = Intent(this, com.example.my)Log.e("MainActivity", "starting activity try111111")startActivity(intent)}  catch (e: ActivityNotFoundException) {// 处理 ActivityNotFoundException,例如显示一个错误消息Log.e("MainActivity", "ActivityNotFoundException: ${e.message}")} catch (e: SecurityException) {// 处理 SecurityException,例如提示用户授予权限Log.e("MainActivity", "SecurityException: ${e.message}")} catch (e: IllegalArgumentException) {// 处理 IllegalArgumentException,这通常意味着 Intent 没有被正确设置Log.e("MainActivity", "IllegalArgumentException: ${e.message}")} catch (e: IllegalStateException) {// 处理 IllegalStateException,例如尝试在已经销毁的 Activity 中启动新的 ActivityLog.e("MainActivity", "IllegalStateException: ${e.message}")} catch (e: Exception) {// 捕获所有其他未明确处理的异常Log.e("MainActivity", "An unexpected exception occurred: ${e.message}", e)}

新建需要封装的 module方法类似(需要对AndroidManifest.xml进行application和applicationId相关的修改生成library)
AndroidManifest.xml相关修改见文末完整code链接

3 MainActivity2调用AAR完整code

完整代码链接
参考链接1:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/703230.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数字化转型导师坚鹏:地市级政府数字化转型案例研究

地市级政府数字化转型案例研究 课程背景&#xff1a; 很多地市级政府存在以下问题&#xff1a; 不清楚地市级政府数字化转型的政务服务类成功案例 不清楚地市级政府数字化转型的社会管理类成功案例 不清楚地市级政府数字化转型的智慧城市类成功案例 课程特色&#xff…

从软硬件以及常见框架思考高并发设计

目录 文章简介 扩展方式 横向扩展 纵向扩展 站在软件的层面上看 站在硬件的层面上看 站在经典的单机服务框架上看 性能提升的思考方向 可用性提升的思考方向 扩展性提升的思考方向 文章简介 先从整体&#xff0c;体系认识&#xff0c;理解高并发的策略&#xff0c;方…

【DAY04 软考中级备考笔记】数据结构基本结构和算法

数据结构基本结构和算法 2月25日 – 天气&#xff1a;晴 周六玩了一天&#xff0c;周天学习。 1. 什么是数据结构 数据结构研究的内容是一下两点&#xff1a; 如何使用程序代码把现实世界的问题信息化如何用计算机高效地处理这些信息从创造价值 2. 什么是数据 数据是信息的…

【教程】 iOS混淆加固原理篇

摘要 本文介绍了iOS应用程序混淆加固的缘由&#xff0c;编译过程以及常见的加固类型和逆向工具。详细讨论了字符串混淆、类名、方法名混淆、程序结构混淆加密等加固类型&#xff0c;并介绍了常见的逆向工具和代码虚拟化技术。 引言 在iOS开发中&#xff0c;为了保护应用程序…

Spring Boot 项目集成camunda流程引擎

使用camunda开源工作流引擎有&#xff1a;通过docker运行、使用springboot集成、部署camunda发行包、基于源代码编译运行等多种方式。 其中&#xff0c;通过源代码编译运行的方式最为复杂&#xff0c;具体参考&#xff1a;https://lowcode.blog.csdn.net/article/details/1362…

Redis高并发分布锁实战

Redis高并发分布锁实战 问题场景 场景一: 没有捕获异常 // 仅仅加锁 // 读取 stock15 Boolean ret stringRedisTemplate.opsForValue().setIfAbsent("lock_key", "1"); // jedis.setnx(k,v) // TODO 业务代码 stock-- stringRedisTemplate.delete(&quo…

《Docker 简易速速上手小册》第6章 Docker 网络与安全(2024 最新版)

文章目录 6.1 Docker 网络概念6.1.1 重点基础知识6.1.2 重点案例&#xff1a;基于 Flask 的微服务6.1.3 拓展案例 1&#xff1a;容器间的直接通信6.1.4 拓展案例 2&#xff1a;跨主机容器通信 6.2 配置与管理网络6.2.1 重点基础知识6.2.2 重点案例&#xff1a;配置 Flask 应用的…

《Docker 简易速速上手小册》第7章 高级容器管理(2024 最新版)

文章目录 7.1 容器监控与日志7.1.1 重点基础知识7.1.2 重点案例&#xff1a;监控 Flask 应用7.1.3 拓展案例 1&#xff1a;使用 ELK Stack 收集和分析日志7.1.4 拓展案例 2&#xff1a;使用集成监控工具 7.2 性能调优与资源限制7.2.1 重点基础知识7.2.2 重点案例&#xff1a;Fl…

Linux系统中前后端分离项目部署指南

目录 一.nginx安装以及字启动 解压nginx 一键安装4个依赖 安装nginx 启动 nginx 服务 开放端口号 并且在外部访问 设置nginx自启动 二.配置负载均衡 1.配置一个tomact 修改端口号 8081端口号 2.配置负载均衡 ​编辑 三.部署前后端分离项目 1.项目部署后端 ​编辑…

基于插件实现RabbitMQ“延时队列“

1.官网下载 在添加链接描述下载rabbitmq_delayed_message_exchange 插件,本文以v3.10.0为例 1.1.上传安装包 scp /Users/hong/资料/rabbitmq_delayed_message_exchange-3.10.0.ez root10.211.55.4:/usr/local/software1.2.将文件移入RabbitMQ的安装目录下的plugins目录 m…

Docker安装MS SQL Server并使用Navicat远程连接

MS SQL Server简介 Microsoft SQL Server&#xff08;简称SQL Server&#xff09;是由微软公司开发的关系数据库管理系统&#xff0c;它是一个功能强大、性能卓越的企业级数据库平台&#xff0c;用于存储和处理大型数据集、支持高效查询和分析等操作。SQL Server 支持广泛的应…

【PostgreSQL】Windows安装PostgreSQL数据库图文详细教程

Windows安装PostgreSQL数据库图文详细教程 一、前言二、PostgreSQL简介三、软件下载四、安装步骤4.1 安装向导4.2 选择安装目录4.3 选择组件4.4 选择数据存放目录4.5 选择密码4.6 选择端口号4.7 等待安装完成4.8 取消勾选&#xff0c;安装完成 五、启动教程5.1 搜索pgAdmin4&am…

常见的音频与视频格式

本专栏是汇集了一些HTML常常被遗忘的知识&#xff0c;这里算是温故而知新&#xff0c;往往这些零碎的知识点&#xff0c;在你开发中能起到炸惊效果。我们每个人都没有过目不忘&#xff0c;过久不忘的本事&#xff0c;就让这一点点知识慢慢渗透你的脑海。 本专栏的风格是力求简洁…

云原生应用测试:挑战与方法

&#x1f60f;作者简介&#xff1a;博主是一位测试管理者&#xff0c;同时也是一名对外企业兼职讲师。 &#x1f4e1;主页地址&#xff1a;【Austin_zhai】 &#x1f646;目的与景愿&#xff1a;旨在于能帮助更多的测试行业人员提升软硬技能&#xff0c;分享行业相关最新信息。…

我们为什么要做施耐德的代理商?做施耐德代理商有哪些好处?

品牌知名度与市场影响力&#xff1a;施耐德是一家全球知名的电气和数字化解决方案提供商&#xff0c;其产品和服务广泛应用于住宅、楼宇、数据中心、工业等领域。选择成为施耐德的代理商&#xff0c;可以利用其强大的品牌知名度和市场影响力&#xff0c;更容易获得消费者的信任…

光伏预测 | Matlab基于CNN-SE-Attention-ITCN的多特征变量光伏预测

光伏预测 | Matlab基于CNN-SE-Attention-ITCN的多特征变量光伏预测 目录 光伏预测 | Matlab基于CNN-SE-Attention-ITCN的多特征变量光伏预测预测效果基本描述模型简介程序设计参考资料 预测效果 基本描述 Matlab基于CNN-SE-Attention-ITCN的多特征变量光伏预测 运行环境: Matla…

【Java程序员面试专栏 算法思维】三 高频面试算法题:搜索算法

一轮的算法训练完成后,对相关的题目有了一个初步理解了,接下来进行专题训练,以下这些题目就是汇总的高频题目,本篇主要聊聊搜索算法,以岛屿问题为切入点练习,所以放到一篇Blog中集中练习 题目关键字解题思路时间空间岛屿数量网格搜索分别向上下左右四个方向探索,遇到海…

【JavaEE】 spring boot的配置文件详解

spring boot的配置文件详解 文章目录 spring boot的配置文件详解常用配置spring boot的配置文件1. properties 文件2. YAML 文件3. 多环境配置4. 配置文件优先级5. 配置属性注入特殊说明 properties配置文件基本语法 例子peoperties文件的缺点 YML配置文件YML使用yml 配置不同数…

守护绿色屏障:智能高压森林应急消防泵|恒峰智慧科技

在茂密的森林中&#xff0c;树木蓊郁&#xff0c;绿意盎然。这里是大自然赋予我们的宝贵财富&#xff0c;是我们人类赖以生存的重要资源。然而&#xff0c;随着人类活动的增加&#xff0c;森林火灾频发&#xff0c;给我们的生活带来了极大的威胁。为了保护这片绿色屏障&#xf…

HUAWEI Programming Contest 2024(AtCoder Beginner Contest 342)

D - Square Pair 题目大意 给一长为的数组&#xff0c;问有多少对&#xff0c;两者相乘为非负整数完全平方数 解题思路 一个数除以其能整除的最大的完全平方数&#xff0c;看前面有多少个与其余数相同的数&#xff0c;两者乘积满足条件&#xff08;已经是完全平方数的部分无…