安卓|aar和jar打包引入流程演示

news2024/11/23 11:59:11

安卓|aar和jar打包引入流程演示

  • aar和jar存在相关意义
  • 打包环境工具
  • aar和jar|Module项目目录
    • aar打包|引入总览
      • 步骤|aar配置打包
        • 创建java or kotlin类文件及资源|截图展示
      • 步骤|aar包引入
    • jar打包|引入总览
      • 步骤|jar配置打包任务
        • 创建java类文件|截图展示
      • 步骤|jar包引入
  • aar和jar运行在手机上的演示效果
  • aar和jar使用验证代码逻辑展示

序: 写了那么久代码,平时都在引入第三方平台sdk。其中有jar、有aar,一直没得机会(其实已经忘记先前的想法:研究下jar和aar是怎么打包出来的)也没得空,去研究下他们是怎么进行打包和引入使用的。今天正是时候,用半天时间操作实战下她的具体流程。

aar和jar存在相关意义

jar文件aar文件
与安卓平台无关的文件,只包含class文件与清单META-INF文件。与安卓平台紧密相关,是安卓库项目的二进制归档文件,其包内不仅能包含class文件,也包括资源文件。

该打包引入演示的代码,已上传到码云代码库tags - v7.0

打包环境工具

jar文件所在Moduleaar文件所在ModuleAndroidStudio版本
AndroidStudio创建Android LibraryAndroidStudio创建Java or Kotlin Library3.6.2/built on March 19, 2020

aar和jar|Module项目目录

在这里插入图片描述

aar打包|引入总览

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

  • 在当前安卓项目project目录上右击新建new - Module - Android Library
  • 在gradle下,寻找 工程名称 - Module-名称(如这里的androidaar) - Tasks - build - assemble 点击执行assemble指令完成aar打包。

步骤|aar配置打包

无需配置,点击执行assemble指令完成aar打包即可完成。

创建java or kotlin类文件及资源|截图展示

在这里插入图片描述
截图中,有两个代码文件JHAppGlobals.kt、JHDisplayUtils.java,及一个自定义View输入搜索框(EdtSearchView.java)EdtSearchView继承LinearLayout,实现了效果左侧[搜索图标]中间[EditText输入框]右侧[清除按钮] 。另外该aar-module中有为实现自定义搜索输入框引入了资源res/drawable、res/mipmap、res/values等。之后我们会通过assemble指令执行将androidaar中的内容打包成*.aar,并作为通用的SDK提供开发使用。

步骤|aar包引入

简单 - 直接在project下的app-module中的libs目录下拷入后,并在app-module的build.gradle中引入依赖。

repositories {/**与dependencies同级别*/
    // 第一步:(libs中)aar包引入,并配置repositories{}
    // 第二步:implementation(name:'androidaar-release', ext:'aar')
    flatDir {
        dirs 'libs'
    }
}

// dependencies{...}
implementation(name:'androidaar-release/**libs目录下aar文件名*/', ext:'aar')

jar打包|引入总览

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

  • 在当前安卓项目project目录上右击新建new - Module - Java or Kotlin Library
  • 在gradle下,寻找 工程名称 - Module-名称(如这里的androidaar) - Tasks - other - 任务名称(如这里的makeJar) 点击执行任务名称指令完成jar打包。

步骤|jar配置打包任务

在jar-Module项目gradle中配置gradle任务的打包执行逻辑

// build.gradle
apply plugin: 'java-library'
apply plugin: 'kotlin'

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
}

sourceCompatibility = "8"
targetCompatibility = "8"

// makeJar 打包逻辑代码。任务名称'makeJar'自定义
task makeJar(type: Copy) {
    delete 'build/libs/jarlib.jar'
    from('build/intermediates/bundles/release/')
    into('build/libs/')
    include('classes.jar')
    rename ('classes.jar', 'jarlib.jar')
}
makeJar.dependsOn(build)

创建java类文件|截图展示

在这里插入图片描述

步骤|jar包引入

简单 - 直接在project下的app-module中的libs目录下拷入即可~

aar和jar运行在手机上的演示效果

在这里插入图片描述

aar和jar使用验证代码逻辑展示

在一个fragment布局文件中引入aar包中自定义的EdtSearchView(测试案例:按照规范设计正常展示),TextView用来显示纯java在jar和aar的调用(测试案例:显示在aar和jar中逻辑执行结果)。


class CMBCTabFragment : IBaseFragment() {
    override fun getLayoutRes(): Int {
        return R.layout.fragment_cmbc_tab
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        val aar = JHDisplayUtils.dp2px(18f) // 来自aar中的java
        val jar = JHJarDisplayUtils.dp2px(20) // 来自jar中的java
        aar_jar_show.text = "aar包引入后显示:${aar} - jar包引入后显示:${jar}"

    }

}

// fragment_cmbc_tab.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    ...省略>

    <LinearLayout...省略>
        <ImageView ...省略
            android:src="@mipmap/cmbc_scan"
         />
        <!--使用aar包中自定义的View搜索输入框-->
        <org.wenhua.androidaar.edt.EdtSearchView
            android:layout_weight="1"
            android:id="@+id/btnSearch"
            android:layout_width="0dp"
            app:jh_hint="全家早餐立减6元"
            android:layout_marginHorizontal="@dimen/wh8dp"
            app:jh_textColor="@color/colorCMBCWhite"
            app:jh_textSize="15sp"
            app:jh_button="true"
            android:layout_height="wrap_content" />

        <ImageView ...省略
            android:src="@mipmap/servicer"
        />

        <ImageView ...省略
            android:src="@mipmap/cmbc_ask"
        />
    </LinearLayout>

    <!-- 用来展示jar、aar中纯java的调用-->
    <TextView
        android:id="@+id/aar_jar_show"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</LinearLayout>

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

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

相关文章

OpenTracing协议规范链接

一、官网链接 OpenTracing specificationhttps://opentracing.io/specification/不过目前OpenTracing项目已归档&#xff0c;不再维护。需要参考OpenTelemetry官网链接 Migrating from OpenTracing | OpenTelemetryBackward compatibility with OpenTracing has been a prior…

Promise 的理解

promise 是什么&#xff1f;promise 是JS 中进行异步编程的最新的解决方案从语法上来说&#xff1a;Promise 是一个构造函数从功能上来说&#xff1a;promise 对象时用来封装一个异步操作并可以获取其结果其三种状态&#xff0c;reasolve 、pendding、 rejectedPromise 的基本运…

计算机网络-ip数据报

在图中&#xff0c;网络层包含了四种协议&#xff1a;ARP、IP、ICMP、IGMP&#xff0c;由上下关系表明&#xff0c;ARP为IP协议服务&#xff0c;IP为ICMP和IGMP服务。 IP数据报格式 此处不区分数据报和分组的概念&#xff1a;当数据部分过长时&#xff0c;将数据部分拆分&…

2022年全国职业院校技能大赛A(1)

目录 模块A 基础设施设置与安全加固 一、项目和任务描述&#xff1a; 二、服务器环境说明 三、具体任务&#xff08;每个任务得分以电子答题卡为准&#xff09; A-1任务一 登录安全加固 1.密码策略&#xff08;Windows&#xff0c;Linux&#xff09; a.设置最短密码长度为…

Python 之 NumPy 随机函数和常用函数

文章目录一、随机函数1. numpy.random.rand(d0,d1,…,dn)2. numpy.random.randn(d0,d1,…,dn)3. numpy.random.normal()4. numpy.random.randint()5. numpy.random.sample6. 随机种子np.random.seed()7. 正态分布 numpy.random.normal二、数组的其他函数1. numpy.resize()2. nu…

芯片是怎样“炼”成的?

在芯片设计完成&#xff0c;交由芯片制造厂&#xff08;Fab&#xff09;进行试产&#xff08;Tape out&#xff09;之后&#xff0c;就可以进行量产了。但Tape out是个漫长的过程&#xff0c;在此过程中&#xff0c;Fab里的工艺及设备工程师们需要不断调试&#xff0c;使得芯片…

Python优化算法—遗传算法

Python优化算法—遗传算法一、前言二、安装三、遗传算法3.1 自定义函数3.2 遗传算法进行整数规划3.3 遗传算法用于旅行商问题3.4 使用遗传算法进行曲线拟合一、前言 优化算法&#xff0c;尤其是启发式的仿生智能算法在最近很火&#xff0c;它适用于解决管理学&#xff0c;运筹…

全球认可的PMI认证体系

全球认可的PMI认证体系我们生活在一个“项目化”的世界里&#xff0c;而且这一趋势在不断加强。PMI的专业认证将使您做好准备&#xff0c;满足全球范围内各种项目、不同企业的需求。PMI的认证源于项目管理从业者&#xff0c;并服务于项目管理从业者。所有认证基于严格的标准和持…

HTML5之CSS基础学习笔记

基础认知 CSS初始 CSS的介绍 CSS&#xff1a;层叠样式表&#xff08;Cascading style sheets&#xff09; CSS作用是什么&#xff1f;&#xff1f; 给页面中的HTML标签设置样式 CSS就是用来做美化的&#xff0c;我之前写的网页就是黑白&#xff0c;要不带点彩色的图片&#x…

MYSQL-主从复制

文章目录1 概述2 原理3 搭建3.1 主库配置3.2 从库配置1 概述 主从复制是指将主数据库的DDL和 DML操作通过二进制日志传到从库服务器中&#xff0c;然后在从库上对这些日志重新执行(也叫重做)&#xff0c;从而使得从库和主库的数据保持同步。 MySQL支持一台主库同时向多台从库进…

从事架构师岗位快2年了,聊一聊我对架构的一些感受和看法

从事架构师岗位快2年了&#xff0c;聊一聊我和ChatGPT对架构的一些感受和看法 职位不分高低&#xff0c;但求每天都能有新的进步&#xff0c;永远向着更高的目标前进。 文章目录踏上新的征程架构是什么&#xff1f;架构师到底是干什么的&#xff1f;你的终极目标又是什么&#…

腾讯实践:面向在线游戏的智能推荐系统设计实践

‍省时查报告-专业、及时、全面的行研报告库省时查方案-专业、及时、全面的营销策划方案库【免费下载】2023年1月份热门报告合集ChatGPT的发展历程、原理、技术架构及未来方向《ChatGPT&#xff1a;真格基金分享.pdf》2023年AIGC发展趋势报告&#xff1a;人工智能的下一时代推荐…

【经验】CiteSpace|Wiley Online Library或除知网以外的其他网站的文献怎么导入CiteSpace 6.1.6?

如果没安装&#xff0c;请看这篇博客安装&#xff0c;现在新版&#xff08;6.1.6&#xff09;的不需要额外下载java了&#xff0c;就很妙~&#xff1a;   最新版citespace软件的安装与配置 结论&#xff1a;导出成RIS然后用它自带的转换成WoS。 Wiley Online Library导出RIS…

(考研湖科大教书匠计算机网络)第四章网络层-第三节2:分类编址的IPv4地址

获取pdf&#xff1a;密码7281专栏目录首页&#xff1a;【专栏必读】考研湖科大教书匠计算机网络笔记导航 文章目录一&#xff1a;分类IP地址概述二&#xff1a;各类地址详解&#xff08;1&#xff09;A类地址&#xff08;2&#xff09;B类地址&#xff08;3&#xff09;C类地址…

算法刷题打卡第91天:统计一个圆中点的数目

统计一个圆中点的数目 难度&#xff1a;中等 给你一个数组 points &#xff0c;其中 points[i] [xi, yi] &#xff0c;表示第 i 个点在二维平面上的坐标。多个点可能会有 相同 的坐标。 同时给你一个数组 queries &#xff0c;其中 queries[j] [xj, yj, rj] &#xff0c;表…

C++100-C++拓展002-float精度问题

文章目录C100-C拓展002-float精度问题摘要Cfloat精度问题C浮点float基本格式C查看数据范围在线练习&#xff1a;总结C100-C拓展002-float精度问题 摘要 本系列为C学习系列&#xff0c;会介绍C基础语法&#xff0c;基础算法与数据结构的相关内容。本文为C拓展内容&#xff0c;包…

linux安装

我们在部暑的时候 总要用到linux 所以我们可以提前把linux安装好 准备一个安装好的linux 到时直接克隆出来用就可以一 安装linux1). 选择创建新的虚拟机2). 选择"典型"配置3). 选择"稍后安装操作系统(S)"4). 选择"Linux"操作系统,"CentOS7 …

IAR警告抑制及还原

工作中需要临时抑制 警告 Pa084&#xff0c;源代码如下&#xff1a; sy_errno_t sy_memset_s(void *dest, sy_rsize_t dmax, int value, sy_rsize_t n) { sy_errno_t err; if (dest NULL) { return SY_ESNULLP; } if (dmax > SY_RSIZE…

「C语言进阶」数据内存的存储

&#x1f680;&#x1f680;&#x1f680;大家觉不错的话&#xff0c;就恳求大家点点关注&#xff0c;点点小爱心&#xff0c;指点指点&#x1f680;&#x1f680;&#x1f680; 目录 &#x1f430;数据类型的介绍 &#x1f430;类型的意义 &#x1f430;数据类型的基本归类…

引入短信服务发送手机验证码进行安全校验

其他方案>引入QQ邮箱发送验证码进行安全校验 相对短信验证码&#xff0c;操作更简单而且免费 最近想给自己的项目在注册时加点安全校验&#xff0c;准备使用免费的邮箱验证来着&#xff0c;在上一篇引入QQ邮箱进行安全校验时&#xff0c;看有朋友说阿里云会送一些短信服务免…