当前位置: 首页 > news >正文

Android Gradle 命令打包AAR

平台

     Android Archive (AAR) 文件是一种特定于Android的存档文件格式,用于将Android库和资源打包成单个可重用的单元。AAR文件通常用于共享和分发Android库,以便其他Android应用项目可以轻松引用和使用这些库。
AAR文件是一种便捷的方式,用于封装、共享和分发Android库和资源。它们是Android生态系统中的一种重要工具,有助于促进代码重用、模块化开发和更快的Android应用开发。

  • Ubuntu 20.04

  • Android Studio Giraffe | 2022.3.1 Patch 2

Runtime version: 17.0.6+0-17.0.6b829.9-10027231 amd64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.
Linux 5.15.0-84-generic
GC: G1 Young Generation, G1 Old Generation
Memory: 3072M
Cores: 4
Registry:external.system.auto.import.disabled=trueide.text.editor.with.preview.show.floating.toolbar=falseide.images.show.chessboard=true
Current Desktop: ubuntu:GNOME
  • Gradle
$ ./gradlew --v------------------------------------------------------------
Gradle 6.7.1
------------------------------------------------------------Build time:   2020-11-16 17:09:24 UTC
Revision:     2972ff02f3210d2ceed2f1ea880f026acfbab5c0Kotlin:       1.3.72
Groovy:       2.5.12
Ant:          Apache Ant(TM) version 1.10.8 compiled on May 10 2020
JVM:          17.0.8.1 (Private Build 17.0.8.1+1-Ubuntu-0ubuntu120.04)
OS:           Linux 5.15.0-84-generic amd64

方法

     要使用命令行编译生成AAR文件,你需要使用Gradle构建工具和相应的构建脚本。
本文基于现有的AndroidStudio 项目, 首先看下文件结构

Project|-- Module1|--Module2|-- ...
./gradlew Module1:assembleRelease

成功后, 可以在: Module1/build/outputs/aar/Module1-release.aar


错误1

> Task :Module1:compileReleaseJavaWithJavac FAILED
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.FAILURE: Build failed with an exception.* What went wrong:
Execution failed for task ':Module1:compileReleaseJavaWithJavac'.
> java.lang.IllegalAccessError: class org.gradle.internal.compiler.java.ClassNameCollector (in unnamed module @0x5e4091b4) cannot access class com.sun.tools.javac.code.Symbol$TypeSymbol (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.code to unnamed module @0x5e4091b4* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.* Get more help at https://help.gradle.orgBUILD FAILED in 3s
11 actionable tasks: 1 executed, 10 up-to-date

同样的方法之前没有问题, 突然报错?
琢磨了下, 近期更新了系统, 开发工具, 还有JDK, 当前是JDK17, 尝试替换回JDK11, 参考:
How do I tell Gradle to use specific JDK version?

方法1:

./gradlew Module1:assembleRelease -Dorg.gradle.java.home=/usr/lib/jvm/java-11-openjdk-amd64

方法2:

Project/gradle.properties

org.gradle.java.home=/usr/lib/jvm/java-11-openjdk-amd64

解决

补充

生成AAR文件的一般步骤(来自GPT):

  • 创建Android库项目:
    首先,创建一个Android库项目,该项目将包含你的库代码和资源。你可以使用Android Studio创建项目,或者手动创建一个包含build.gradle文件的项目目录。

  • 创建build.gradle文件:
    在库项目的根目录下,创建一个名为build.gradle的Gradle构建脚本。下面是一个简单的示例:

apply plugin: 'com.android.library'android {compileSdkVersion 30defaultConfig {minSdkVersion 16targetSdkVersion 30versionCode 1versionName "1.0"}
}dependencies {// 添加库的依赖,如果有的话
}
  • 构建AAR文件:
    打开终端,导航到库项目的根目录,并执行以下Gradle构建命令:
./gradlew build

此命令将执行Gradle构建,生成AAR文件。生成的AAR文件将位于your-library-project/build/outputs/aar/目录中,其中your-library-project是你的库项目的目录名。

  • 使用生成的AAR文件:
    你可以将生成的AAR文件用于其他Android应用项目。要使用AAR文件,将其复制到目标项目的libs目录中,并在目标项目的build.gradle文件中添加以下依赖:
dependencies {implementation files('libs/your-library-name.aar')
}

相关文章:

Android Gradle 命令打包AAR

平台 Android Archive (AAR) 文件是一种特定于Android的存档文件格式,用于将Android库和资源打包成单个可重用的单元。AAR文件通常用于共享和分发Android库,以便其他Android应用项目可以轻松引用和使用这些库。 AAR文件是一种便捷的方式,用于…...

如何导出带有材质的GLB模型?

1、为什么要使用 GLB 模型? GLB格式(GLTF Binary)是一种用于存储和传输3D模型及相关数据的文件格式,具有以下优点和作用: 统一性:GLB是一种开放标准的3D文件格式,由Khronos Group制定和维护。它融合了GL…...

C/C++面试常见知识点

目录 C/C语言C内存分区malloc/free与new/delete的区别联合体联合体大小的计算 结构体对齐为什么需要结构体内存对齐 结构体与联合体的区别左值引用与右值引用指针和引用的区别迭代器失效static关键字在C语言的作用进程地址空间的分布内联函数 三大特性构造函数不能是虚函数析构…...

详细介绍数据结构-堆

计算机中的堆数据结构 什么是堆 在计算机科学中,堆(Heap)是一种重要的数据结构,它用于在动态分配时存储和组织数据。堆是一块连续的内存区域,其中每个存储单元(通常是字节)都与另一个存储单元…...

001flutter基础学习

flutter基础学习 参考:https://book.flutterchina.club/chapter1/flutter_intro.html Flutter是谷歌的移动UI框架跨平台: Linux,Android, IOS,Fuchsia原生用户界面:它是原生的,让我们体验更好,性能更好开源免费:完全开源,可以进行商用Flutter与主流框架的对比 Cor…...

leetCode 1143.最长公共子序列 动态规划 + 图解

此题我的往期文章推荐: leetCode 1143.最长公共子序列 动态规划 滚动数组-CSDN博客https://blog.csdn.net/weixin_41987016/article/details/133689692?spm1001.2014.3001.5501leetCode 1143.最长公共子序列 一步步思考动态规划 优化空间复杂度_呵呵哒(&#xf…...

解密人工智能:KNN | K-均值 | 降维算法 | 梯度Boosting算法 | AdaBoosting算法

文章目录 一、机器学习算法简介1.1 机器学习算法包含的两个步骤1.2 机器学习算法的分类 二、KNN三、K-均值四、降维算法五、梯度Boosting算法和AdaBoosting算法六、结语 一、机器学习算法简介 机器学习算法是一种基于数据和经验的算法,通过对大量数据的学习和分析&…...

Python深度学习实践

线性模型 课程 import numpy as np import matplotlib.pyplot as plt x_data[1.0,2.0,3.0] y_data[2.0,4.0,6.0] #前馈函数 def forward(x):return x*w #损失函数 def loss(x,y):y_predforward(x)return (y_pred-y)*(y_pred-y) w_list[] mse_list[] for w in np.arange(0.0,4…...

VS2017+QT+PCL环境配置

前言: 最近自己再弄一下小项目中需要用到pcl来开发点云的显示,但是却遇到很多坑,所以记录下来分析给知音人。 避雷:由于vtk和pcl之间有版本以来关系,但是安装过程是不变的。 选择对应的版本参考如下安装: pcl1.8.1依赖vtk版本7.1.1;pcl1.9.1至pcl1.12.0依赖vtk最低版本为…...

207、SpringBoot 整合 RabbitMQ 实现消息的发送 与 接收(监听器)

目录 ★ 发送消息★ 创建队列的两种方式代码演示需求1:发送消息1、ContentUtil 先定义常量2、RabbitMQConfig 创建队列的两种方式之一:配置式:问题: 3、MessageService 编写逻辑PublishController 控制器application.properties 配…...

想要精通算法和SQL的成长之路 - 滑动窗口和大小根堆

想要精通算法和SQL的成长之路 - 滑动窗口和大小根堆 前言一. 大小根堆二. 数据流的中位数1.1 初始化1.2 插入操作1.3 完整代码 三. 滑动窗口中位数3.1 在第一题的基础上改造3.2 栈的remove操作 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 大小根堆 先来说下大小根堆是什…...

Python算法练习 10.15

leetcode 2130 链表的最大孪生和 在一个大小为 n 且 n 为 偶数 的链表中&#xff0c;对于 0 < i < (n / 2) - 1 的 i &#xff0c;第 i 个节点&#xff08;下标从 0 开始&#xff09;的孪生节点为第 (n-1-i) 个节点 。 比方说&#xff0c;n 4 那么节点 0 是节点 3 的孪…...

智能防眩目前照灯系统控制器ADB

经纬恒润的自适应远光系统—— ADB&#xff08;Adaptive Driving Beam&#xff09; 是一种能够根据路况自适应变换远光光型的智能远光控制系统。根据本车行驶状态、环境状态以及道路车辆状态&#xff0c;ADB 系统自动为驾驶员开启或退出远光。同时&#xff0c;根据车辆前方视野…...

若依 ruoyi 路径 地址 # 井号去除

export default new Router({mode: history, // history 去掉url中的# 、hash 包含#号scrollBehavior: () > ({ y: 0 }),routes: constantRoutes })...

Elasticsearch 和 Arduino:一起变得更好!

作者&#xff1a;Enrico Zimuel 使用 Arduino IoT 设备与 Elasticsearch 和 Elastic Cloud 进行通信的简单方法 在 Elastic&#xff0c;我们不断寻找简化搜索体验的新方法&#xff0c;并开始关注物联网世界。 来自物联网的数据收集可能非常具有挑战性&#xff0c;尤其是当我们…...

基于Ubuntu环境Git 服务器搭建及使用

多人合作开发的时候 常常会需要使用代码管理平台&#xff0c;保持代码一致和解决冲突。在工作中我使用过SVN和TFS&#xff0c;本文说明另外一种平台&#xff0c;Git&#xff0c;下面是基于Ubuntu环境安装并简单使用Git服务器。 确认安装git apt install git levilevi-ThinkPa…...

【quartus13.1/Verilog】swjtu西南交大:计组课程设计

实验目的&#xff1a; 通过学习简单的指令系统及其各指令的操作流程&#xff0c;用 Verilog HDL 语言实 现简单的处理器模块&#xff0c;并通过调用存储器模块&#xff0c;将处理器模块和存储器模块连接形成简 化的计算机核心部件组成的系统。 二. 实验内容 1. 底层用 Verilog…...

基于springboot的网上点餐系统论文开题报告

一、选题背景 随着互联网和移动互联网技术的快速发展&#xff0c;网上点餐成为了人们越来越喜欢的一种点餐方式。一些具有创新意识的餐厅也开始逐渐尝试利用互联网技术来提升用户的点餐体验。因此&#xff0c;开发一个基于Spring Boot的网上点餐系统就显得非常必要和重要。 二…...

Hadoop3教程(九):MapReduce框架原理概述

文章目录 简介参考文献 简介 这属于整个MR中最核心的一块&#xff0c;后续小节会展开描述。 整个MR处理流程&#xff0c;是分为Map阶段和Reduce阶段。 一般&#xff0c;我们称Map阶段的进程是MapTask&#xff0c;称Reduce阶段是ReduceTask。 其完整的工作流程如图&#xff…...

使用PyTorch加载数据集:简单指南

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker &#xff1b;并安装。 基础操作不再赘述。 打开 macOS 终端&#xff0c;开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

GO协程(Goroutine)问题总结

在使用Go语言来编写代码时&#xff0c;遇到的一些问题总结一下 [参考文档]&#xff1a;https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现&#xff1a; 今天在看到这个教程的时候&#xff0c;在自己的电…...

Kafka主题运维全指南:从基础配置到故障处理

#作者&#xff1a;张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1&#xff1a;主题删除失败。常见错误2&#xff1a;__consumer_offsets占用太多的磁盘。 主题日常管理 …...

【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验

Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...