Android AAR 打包简介

在 Android 开发中,AAR(Android Archive)是一种用于打包 Android 库的格式。通过 AAR,开发者可以方便地分发和引用共享的代码及资源,例如布局文件、图片和 jar 包等。本文将介绍如何创建并打包 AAR 文件,并提供示例代码。

AAR 文件结构

一个标准的 AAR 文件包含以下内容:

  • classes.jar: 包含的 Java 类文件。
  • res/: 存放资源文件,如布局、图片等。
  • AndroidManifest.xml: 库的清单文件。
  • assets/: 包含应用程序资产文件。

如何创建 AAR 文件

下面是一个创建 AAR 文件的简单示例。

1. 创建库模块

在你的 Android 项目中,打开 build.gradle 文件并添加以下代码,以创建新的库模块:

apply plugin: 'com.android.library'

android {
    compileSdkVersion 33

    defaultConfig {
        minSdkVersion 21
        targetSdkVersion 33
        versionCode 1
        versionName "1.0"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    // 在这里添加其他依赖
}

2. 编写库代码

src/main/java 目录下创建一个简单的类,比如 MyLibrary.java

package com.example.mylibrary;

public class MyLibrary {
    public static String getGreeting() {
        return "Hello from MyLibrary!";
    }
}

3. 打包 AAR 文件

现在,可以通过以下命令构建 AAR 文件:

./gradlew assembleRelease

构建完成后,AAR 文件将存放在 module-name/build/outputs/aar/ 目录下。

引用 AAR 文件

接下来,将 AAR 文件引入到你的应用程序中。常用的方法是将 AAR 文件拷贝到 libs 目录中,并在主模块的 build.gradle 中添加如下依赖:

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.aar'])
}

使用 AAR 文件

在你的应用中,可以直接使用库中提供的功能。例如,在 MainActivity.java 中调用 MyLibrary

import com.example.mylibrary.MyLibrary;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        String greeting = MyLibrary.getGreeting();
        Log.d("TAG", greeting);
    }
}

序列图

下面是一个示例序列图,展示了如何使用 AAR 文件中的类。

sequenceDiagram
    participant A as MainActivity
    participant B as MyLibrary
    A->>B: 调用 getGreeting()
    B-->>A: 返回 "Hello from MyLibrary!"

结尾

通过上述步骤,您应该能够轻松创建和使用 AAR 文件。这不仅提高了代码的重用性,也使得项目结构更加清晰。无论是大型应用还是小型库,合理利用 AAR 文件都能提高开发效率。希望这篇文章对您有所帮助,更好的理解和使用 AAR 文件。如有进一步的疑问或需求,请随时探讨。