Android Gradle 命令打包AAR

news/2024/5/20 2:51:24 标签: android, AAR, gradle, gradlew, jdk

平台

     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=true
    ide.text.editor.with.preview.show.floating.toolbar=false
    ide.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:     2972ff02f3210d2ceed2f1ea880f026acfbab5c0

Kotlin:       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.org

BUILD 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构建脚本。下面是一个简单的示例:

gradle">apply plugin: 'com.android.library'

android {
    compileSdkVersion 30
    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 30
        versionCode 1
        versionName "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文件中添加以下依赖:
gradle">dependencies {
    implementation files('libs/your-library-name.aar')
}

http://www.niftyadmin.cn/n/5086439.html

相关文章

Variations-of-SFANet-for-Crowd-Counting记录

论文:Encoder-Decoder Based Convolutional Neural Networks with Multi-Scale-Aware Modules for Crowd Counting 论文链接:https://arxiv.org/abs/2003.05586 源码链接:GitHub - Pongpisit-Thanasutives/Variations-of-SFANet-for-Crowd-C…

软件开源快速开发框架:降本增效,助力流程化办公!

随着时代的进步和社会的发展,应用软件开源快速开发框架的优势特点,可以让不少客户朋友顺利实现流程化办公,朝着数字化方向迈进。流辰信息是专业研发低代码技术平台的服务商,一直在低代码平台领域深耕细作,努力钻研&…

单链表---结构体实现

定义 链表称为线性表的链式存储,顺序表逻辑上相邻的数据,存储位置也相邻。链表逻辑上相邻的数据,存储位置是随机分布在内存的各个位置上的。 故 对于每一个结点,定义的结构体是: typedef struct _LinkNode {int d…

c语言之strcpy函数使用和实现

文章目录 前言一、strcpy函数使用二、实现方法 前言 c语言之strcpy函数使用和实现 一、strcpy函数使用 原型: char *strcpy(char * destination, const char *source );strcpy是覆盖拷贝,将source全覆盖拷贝到destination,会把…

[QCM6125][Android13] 解决虚拟导航栏无法显示在底部的问题

文章目录 开发平台基本信息问题描述 问题分析解决方法 开发平台基本信息 芯片: QCM6125 版本: Android 13 kernel: msm-4.14 问题描述 最近在调试项目,屏幕默认是竖屏的,添加竖屏切换之后,发现虚拟导航栏一直固定在左边,即使在…

Postgresql关于EOH的使用注意

注意通常拿到的指针不是EOH头 EOH是一种扩展数据结构,之前有几篇博客讨论过了,最近在改相关代码加深了一些理解。 EOH目前支持ER_methods、EA_methods两套实现,分别是record类型展开和数组类型展开。 在内存中的样子大概是(EA为…

Linux系统之ip命令的基本使用

Linux系统之ip命令的基本使用 一、ip命令介绍1.1 ip命令简介1.2 ip命令的由来1.3 ip命令的安装包 二、ip命令使用帮助2.1 ip命令的help帮助信息2.2 ip命令使用帮助 三、查看网络信息3.1 显示当前网络接口信息3.2 显示网络设备运行状态3.3 显示详细设备信息3.4 查看路由表3.5 查…

JS+Jquery用法

1. 当存在多个select时,想要获取每一个select的选中的值(使用变量赋值的方法). var Metric "";$(#Metric).change(function () {Metric $(this).children("option:selected").val();console.log("Metric:" Metric);}); 2. 在页面…