安卓基础(aar)

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

bash 复制代码
$env:JAVA_HOME = "D:\Android Studio\jbr"

查看当前环境变量 JAVA_HOME 的值

bash 复制代码
echo $env:JAVA_HOME

构建ARR文件

bash 复制代码
./gradlew :private-lib:assembleRelease

目录是这样的:

bash 复制代码
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 配置文件

Kotlin 复制代码
plugins {
    // 应用 Android 库插件,用于构建 AAR 库文件
    id("com.android.library")
}

android {
    // 设置库的命名空间,类似于 Java 包名,用于避免命名冲突
    namespace = "com.example.privatelib"
    // 指定编译使用的 Android SDK 版本
    compileSdk = 34

    defaultConfig {
        // 支持的最低 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

项目结构

Kotlin 复制代码
project-root/
  ├── app/
  │    ├── libs/
  │    │    └── mylibrary-release.aar
  │    └── build.gradle.kts
  └── settings.gradle.kts
配置 app/build.gradle.kts
Kotlin 复制代码
plugins {
    id("com.android.application")
    kotlin("android")
}

android {
    namespace = "com.example.myapp"
    compileSdk = 34

    defaultConfig {
        applicationId = "com.example.myapp"
        minSdk = 24
        targetSdk = 34
        versionCode = 1
        versionName = "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

Kotlin 复制代码
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") 引用它

如果删除会发生什么:

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

引用private-lib文件夹

bash 复制代码
implementation(project(":private-lib"))

引用private-lib-release.aar

bash 复制代码
implementation(files("libs/private-lib-release.aar"))

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

相关推荐
夜雪一千10 分钟前
如何在MySQL中实现字段级加密
android·数据库·mysql
夜雪一千11 分钟前
MySQL 如何存储经纬度坐标:选型、建表、空间查询实战
android·mysql·adb
JMchen28 分钟前
集成第三方 C/C++ 库到 Android NDK 项目:OpenCV 与 FFmpeg 实战指南
android·opencv·cmake
有毒的教程2 小时前
Dev-C++ 使用扩展库两种方式:DevPak一键安装 / 手动配置(重点)
android·c++·adb
mmsx2 小时前
Android 测绘数值基础:测量单位系统与七四参数、高程拟合
android
郑州光合科技余经理3 小时前
出海外卖平台:支付对接为什么要和下单收款分开
android·java·开发语言·前端·后端·php·ai编程
夜雪一千3 小时前
MySQL 如何提高查询速度:从索引、SQL、表结构到实战调优
android·sql·mysql
终端安全笔记3 小时前
配置锁状态那一栏查的是什么:报告里几项各自指向什么风险
android·前端·安全·ios
恋猫de小郭3 小时前
Kotlin Toolchain 0.13,JetBrains 推荐 KMP 都切换到到全新工具链
android·前端·flutter
安卓机器4 小时前
rom定制系列------小米8 安卓16线刷原生固件 体验新版本
android·小米8安卓16