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

安卓基础(aar)

重新设置java21的环境,临时设置

$env:JAVA_HOME = "D:\Android Studio\jbr"

查看当前环境变量 JAVA_HOME 的值

echo $env:JAVA_HOME

构建ARR文件

./gradlew :private-lib:assembleRelease

目录是这样的:

MyApp/
├── app/                 # 主应用模块(默认生成)
├── private-lib/         # 你的库模块(文件夹名)
│   ├── src/
│   ├── build.gradle     # 模块配置文件
│   └── ...
├── settings.gradle      # 项目设置文件
└── gradlew              # Gradle 脚本

这里的 private-lib 就是一个模块文件夹,它包含独立的代码和资源,专门用于开发库文件(如 .aar)。

构建好了之后会在private-lib\build\outputs\aar\private-lib-release.aar生成.aar

然后在app创建一个libs文件夹

private-lib-release.aar放入libs文件夹

private-lib文件夹里面的build.gradle.kts 配置文件

plugins {// 应用 Android 库插件,用于构建 AAR 库文件id("com.android.library")
}android {// 设置库的命名空间,类似于 Java 包名,用于避免命名冲突namespace = "com.example.privatelib"// 指定编译使用的 Android SDK 版本compileSdk = 34defaultConfig {// 支持的最低 Android SDK 版本minSdk = 24// 目标 SDK 版本,建议与 compileSdk 保持一致targetSdk = 34// 指定测试运行器,用于 Android 单元测试testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"// 指定供依赖本库的应用使用的 ProGuard 规则文件consumerProguardFiles("consumer-rules.pro")}buildTypes {release {// 启用代码混淆和优化(移除未使用代码)isMinifyEnabled = true// 指定 ProGuard 规则文件:// 1. Android 官方默认优化规则// 2. 项目自定义的混淆规则文件proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"),"proguard-rules.pro")}}compileOptions {// 设置 Java 源代码兼容性级别sourceCompatibility = JavaVersion.VERSION_1_8// 设置 Java 字节码兼容性级别targetCompatibility = JavaVersion.VERSION_1_8}
}

然后主程序引用aar

项目结构

project-root/├── app/│    ├── libs/│    │    └── mylibrary-release.aar│    └── build.gradle.kts└── settings.gradle.kts
配置 app/build.gradle.kts
plugins {id("com.android.application")kotlin("android")
}android {namespace = "com.example.myapp"compileSdk = 34defaultConfig {applicationId = "com.example.myapp"minSdk = 24targetSdk = 34versionCode = 1versionName = "1.0.0"}// 其他配置...
}dependencies {// 引用本地libs目录下的AAR文件implementation(files("libs/mylibrary-release.aar"))// 其他依赖...implementation("androidx.appcompat:appcompat:1.6.1")implementation("org.jetbrains.kotlin:kotlin-stdlib:1.8.22")
}

对于settings.gradle.kts

pluginManagement {repositories {google {content {includeGroupByRegex("com\\.android.*")includeGroupByRegex("com\\.google.*")includeGroupByRegex("androidx.*")}}mavenCentral()gradlePluginPortal()}
}
dependencyResolutionManagement {repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)repositories {google()mavenCentral()}
}rootProject.name = "aartest"
include(":app")
include(":private-lib")

不能删除 include(":private-lib")!这行代码非常重要:

include(":private-lib") 的作用:

  1. 告诉Gradle项目结构 - 让Gradle知道这个项目包含一个名为 private-lib 的子模块
  1. 注册模块 - 使 private-lib 文件夹成为一个可构建的Gradle模块
  1. 启用模块依赖 - 让其他模块可以通过 project(":private-lib") 引用它

如果删除会发生什么:

❌ 删除 include(":private-lib")
↓
app/build.gradle.kts 中的 implementation(project(":private-lib")) 会失败
↓  
错误: "Project ':private-lib' not found"

引用private-lib文件夹

implementation(project(":private-lib"))

引用private-lib-release.aar

implementation(files("libs/private-lib-release.aar"))

但是引用private-lib-release.aar后可以把settings.gradle.kts的include(":private-lib")删掉

http://www.xdnf.cn/news/12684.html

相关文章:

  • 【工具使用】STM32CubeMX-FreeRTOS操作系统-信号标志、互斥锁、信号量篇
  • linux设备重启后时间与网络时间不同步怎么解决?
  • 【补题】Educational Codeforces Round 107 (Rated for Div. 2) D. Min Cost String
  • PicSharp(图片压缩工具) v1.1.6
  • C++中,字符与字符串直接拼接(重点,易错)
  • 【MySQL】三大范式
  • 【工作记录】接口功能测试总结
  • jenkins 持续集成环境从0到1搭建全过程
  • PyTorch 中cumprod函数计算张量沿指定维度的累积乘积详解和代码示例
  • Oracle 19c RAC集群ADG搭建
  • MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
  • 计算机是如何⼯作的
  • 408第一季 - 数据结构 - 树与二叉树II
  • 《Brief Bioinform》: 鼠脑单细胞与Stereo-seq数据整合算法评估
  • 【Java实例-英雄对战】Java战斗之旅,既分胜负也决生死
  • 台式机电脑CPU天梯图2025年6月份更新:CPU选购指南及推荐
  • Canal环境搭建并实现和ES数据同步
  • App Search 和 Workplace Search 独立产品现已弃用
  • Cursor实现用excel数据填充word模版的方法
  • Fetch与Axios:区别、联系、优缺点及使用差异
  • 使用 C/C++ 和 OpenCV 提取图像的感兴趣区域 (ROI)
  • vue3+dify从零手撸AI对话系统
  • JavaWeb的一些基础技术
  • 在Ubuntu上使用 dd 工具制作U盘启动盘
  • 使用Transformer模型进行时间序列预测的完整解决方案,满足预测误差≤1.5%和注意力权重可视化的要求
  • GitHub 趋势日报 (2025年06月06日)
  • 2025年- H76-Lc184--55.跳跃游戏(贪心)--Java版
  • 有没有 MariaDB 5.5.56 对应 MySQL CONNECTION_CONTROL 插件
  • 信息最大化(Information Maximization)
  • Go语言进阶④:Go的数据结构和Java的有啥不一样