安卓基础(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")删掉

相关推荐
张拭心29 分钟前
春节后,有些公司明确要求 AI 经验了
android·前端·人工智能
张拭心39 分钟前
Android 17 来了!新特性介绍与适配建议
android·前端
Kapaseker3 小时前
Compose 进阶—巧用 GraphicsLayer
android·kotlin
黄林晴3 小时前
Android17 为什么重写 MessageQueue
android
阿巴斯甜1 天前
Android 报错:Zip file '/Users/lyy/develop/repoAndroidLapp/l-app-android-ble/app/bu
android
Kapaseker1 天前
实战 Compose 中的 IntrinsicSize
android·kotlin
xq95271 天前
Andorid Google 登录接入文档
android
黄林晴1 天前
告别 Modifier 地狱,Compose 样式系统要变天了
android·android jetpack
冬奇Lab2 天前
Android触摸事件分发、手势识别与输入优化实战
android·源码阅读
城东米粉儿2 天前
Android MediaPlayer 笔记
android