使用android studio打包aar和Unity导入aar详解

本文介绍如何在Android Studio中创建一个可复用的AAR包。通过新建模块并实现字符串工具类,完成从项目搭建到AAR包生成的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,使用android studio新建项目之后,新建一个moudel。
File - new -new module,选择android library,取名为myapplication在这里插入图片描述
在myapplication下的目录,src/main/java 下新建Java文件StringUtils

package com.example.myapplication;

public class StringUtils {
    private static StringUtils instance = null;

    private StringUtils() {
    }

    public static StringUtils getInstance() {
        if (instance == null) {
            synchronized (StringUtils.class) {
                if (instance == null) {
                    instance = new StringUtils();
                }
            }
        }
        return instance;
    }

    /*小写字符转大写
     * */
    public String toUpperCase(String s) {
        return s.toUpperCase();
    }

    /*大写字符转小写
     * */
    public String toLowerCase(String s) {
        return s.toLowerCase();
    }
}

选择菜单build - rebuild project
在这里插入图片描述
点击之后在会生成目录
在这里插入图片描述
出现如上目录,就是aar包生成成功

如何打包release的aar包?
明白了!你提到在 Gradle 工具窗口 中没有找到 assembleRelease 任务,并且只能看到 testReleaseUnitTest。这可能是由于你正在使用 Android Library 模块,而 assembleRelease 任务默认是与 buildTypes 相关的(对于 library 模块,它可能不是默认显示的)。我们可以通过几个步骤来手动配置并确保正确生成 release 版本的 AAR

解决方法

1. 确保在 build.gradle 中设置了 release 配置

首先,请确保在 build.gradle 文件中,buildTypes 配置已经正确设置。

plugins {
    id 'com.android.library'
}

android {
    namespace 'com.example.testunity'
    compileSdk 34

    defaultConfig {
        minSdk 24
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        consumerProguardFiles "consumer-rules.pro"
    }

    buildTypes {
        debug {
            minifyEnabled false
            // Debug 配置
        }

        release {
            minifyEnabled true // 开启混淆
            shrinkResources true // 移除未使用的资源
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' // ProGuard 混淆配置
        }
    }
}
  • debug 配置:用于开发,通常不会进行混淆。
  • release 配置:用于发布版本,开启混淆和优化。
2. 手动运行 Gradle 命令

如果在 Android StudioGradle 工具窗口 中没有看到 assembleRelease 任务,可以尝试手动运行 Gradle 命令:

  1. 清理项目
    在终端中,运行以下命令来清理项目:

    ./gradlew clean
    
  2. 构建 Release 版本的 AAR
    使用以下命令手动构建 release 版本 的 AAR 文件:

    ./gradlew :TestUnity:assembleRelease
    

    这会强制 Gradle 使用 release 配置构建项目并生成 AAR 文件。

  3. 检查输出文件
    构建完成后,release 版本的 AAR 文件 会生成在以下路径:

    <project>/TestUnity/build/outputs/aar/TestUnity-release.aar
    
3. 在 Android Studio 中显示 assembleRelease

如果你希望在 Android Studio 中通过 Gradle 工具窗口 显示 assembleRelease 任务,你可以通过以下步骤手动同步 Gradle 配置:

  1. 点击 File > Sync Project with Gradle Files,确保 Gradle 配置已同步。
  2. 打开 Gradle 工具窗口(右侧面板)。
  3. 展开 Tasks -> build,你应该能够看到 assembleRelease 任务。

如果你无法找到 assembleRelease,你也可以手动运行以下命令来执行构建:

./gradlew :TestUnity:assembleRelease
4. 确保没有依赖错误

有时,assembleRelease 任务不会显示或无法运行,可能是由于项目中的依赖问题。确保项目中的所有依赖都可以正常解析并且没有任何构建错误。如果有错误,解决它们后再尝试运行构建。

总结

  • 确保 build.gradle 文件中配置了 release 类型,并启用了混淆和资源优化。
  • 手动运行 Gradle 命令 ./gradlew :TestUnity:assembleRelease,来生成 release 版本的 AAR
  • 检查生成的 AAR 文件,它应该位于 build/outputs/aar/ 目录下,命名为 TestUnity-release.aar
  • 确保 Gradle 配置同步,通过 File > Sync Project with Gradle Files

按照这些步骤,你应该能够成功生成 release 版本的 AAR 文件。如果依然遇到问题,或者没有找到 assembleRelease,请告诉我具体错误信息,我会进一步帮助你!

记录一下报错
在这里插入图片描述
原因是说构造的jdk版本的问题
从错误信息来看,问题的根本原因是你当前使用的是 Java 8 JVM,但是 Gradle 8.7.3Android Gradle Plugin 8.7.3(AGP)需要至少 Java 11 来运行。要解决此问题,你需要升级 Java 版本,并确保 Gradle 使用正确的 Java 版本。

解决步骤

1. 安装 Java 11 或更高版本

你需要 安装 Java 11 或更高版本。以下是安装和配置 Java 11 的步骤:

1.1 安装 Java 11
  • Windows

    1. 访问 AdoptOpenJDKOracle JDK 下载并安装 Java 11
    2. 安装完成后,记下 Java 安装路径(例如 C:\Program Files\AdoptOpenJDK\jdk-11)。
  • macOS

    1. 你可以使用 Homebrew 安装 Java 11:
      brew install openjdk@11
      
    2. 如果不使用 Homebrew,也可以从 AdoptOpenJDKOracle JDK 下载并安装 Java 11。
  • Linux

    1. 使用包管理器安装 Java 11,例如:
      sudo apt-get install openjdk-11-jdk
      
1.2 配置环境变量

安装完成后,确保 Java 11 被正确配置为默认的 JVM。

  • Windows

    1. 打开 系统环境变量(右键点击“此电脑” > “属性” > “高级系统设置” > “环境变量”)。
    2. 系统变量 中找到 JAVA_HOME,并将其值设置为你安装的 Java 11 路径,例如:
      JAVA_HOME = C:\Program Files\AdoptOpenJDK\jdk-11
      
    3. 确保 Path 变量中包含 JAVA_HOME\bin,例如:
      %JAVA_HOME%\bin
      
  • macOS/Linux

    1. 打开终端并编辑 ~/.bash_profile(或者 ~/.zshrc,取决于你使用的 shell),并添加以下行:
      export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64  # 或者安装路径
      export PATH=$JAVA_HOME/bin:$PATH
      
    2. 执行:
      source ~/.bash_profile
      
    3. 确保使用 java -version 查看当前 Java 版本:
      java -version
      
2. 配置 Gradle 使用 Java 11

确保 Gradle 使用 Java 11 来构建项目。你可以通过在 gradle.properties 文件中手动设置 JAVA_HOME 来强制使用 Java 11。

gradle.properties 文件中添加以下配置

org.gradle.java.home=C:/Program Files/AdoptOpenJDK/jdk-11  # 根据实际路径修改

对于 macOS 和 Linux,路径应该类似于 /usr/lib/jvm/java-11-openjdk-amd64

3. 配置 Android Studio 使用 Java 11

确保 Android Studio 使用 Java 11 来构建项目。

  1. 打开 Android Studio
  2. 进入 File > Project Structure > SDK Location
  3. JDK location 中,选择你安装的 Java 11 路径
4. 刷新并重新构建项目
  1. 重新加载 Gradle 配置
    在 Android Studio 中,点击 File > Sync Project with Gradle Files 来重新同步 Gradle 配置文件。

  2. 清理并重新构建
    在命令行中运行以下命令来清理并重新构建项目:

    ./gradlew clean
    ./gradlew build
    

    这将确保 Gradle 使用 Java 11 来构建项目,并解决由于 Java 版本不兼容而引起的构建问题。

5. 运行 gradlew tasks 检查任务

成功配置 Java 11 后,运行以下命令来列出所有可用的 Gradle 任务,确保你能看到 assembleRelease 或相关的构建任务。

./gradlew tasks

你应该能看到类似这样的任务:

> Task :app:assembleDebug
> Task :mylibrary:assembleDebug

总结

  1. 安装并配置 Java 11:确保你的开发环境使用 Java 11(或更高版本),并且 JAVA_HOME 指向正确的 Java 11 路径。
  2. 配置 Gradle 使用 Java 11:通过 gradle.properties 配置 Java 11。
  3. 重新同步 Gradle 配置:在 Android Studio 中同步 Gradle 配置文件,确保 Gradle 使用 Java 11 来构建项目。
  4. 清理并重新构建项目:运行 ./gradlew clean build 来确保构建顺利进行。

通过这些步骤,你应该能够解决由于 Java 8 不兼容导致的问题,并成功构建项目。如果你遇到任何问题,欢迎继续联系我!

笔者发现java11也一样报错,于是用了java17,使用的是gradle8.9

是的,当你打包AAR文件并准备在Unity中使用时,基本的AAR文件结构通常只需要包含以下几个关键部分:

  1. AndroidManifest.xml
  2. classes.jar(或者其他Java文件)

这些是最基本的要素。如果你没有其他资源(比如图片、布局、或本地库等),那么仅这两个文件就足够了。下面详细解释一下这两个文件及它们在Unity中的作用:

1. AndroidManifest.xml

  • 作用:该文件定义了你的库需要的权限、服务、Activity、广播接收器等。它描述了该库如何与Android系统交互。
    当你将AAR文件集成到Unity中时,Unity会自动合并这个AndroidManifest.xml到Unity项目中的主AndroidManifest.xml中。
    • 如果Unity的AndroidManifest.xml和AAR的AndroidManifest.xml有冲突,可能需要手动解决(例如,合并权限或服务配置等)。
    • 你可以通过Player Settings中的Publishing Settings配置一些通用权限和功能,但如果AAR库需要特定的权限或组件,需要在Manifest中显式声明。

2. classes.jar

  • 作用:这是AAR文件的核心部分,包含了你的Java代码。
    • Unity与Java的交互:通过AndroidJavaObject等Unity提供的API,可以调用classes.jar中定义的Java类和方法。
    • 如何使用:Unity会自动将classes.jar文件包含在Android构建中,确保库中的Java类在运行时可以被正确引用。

在Unity项目中,你可以通过以下代码与Java类进行交互:

using UnityEngine;

public class Example : MonoBehaviour
{
    void Start()
    {
        using (AndroidJavaClass javaClass = new AndroidJavaClass("com.example.MyJavaClass"))
        {
            javaClass.CallStatic("myStaticMethod");
        }
    }
}
  • 这里的 com.example.MyJavaClass 就是classes.jar中的一个类。

其他文件(可选)

尽管AndroidManifest.xmlclasses.jar是最基本的文件,但在一些情况下,AAR文件可能还会包含以下内容:

  1. res/ 资源文件(如图片、布局、字符串等)

    • 作用:如果你的AAR库包含了资源文件(如布局、图片、字符串等),这些资源也会被包含在AAR文件中。
    • Unity中的资源合并:Unity会将这些资源与项目中的资源一起打包到最终的APK中。需要注意的是,资源的ID可能会与Unity自身的资源冲突,特别是使用R类访问资源时。此时,资源合并可能需要手动干预。
  2. libs/ 本地库文件(.so)或其他依赖的JAR文件

    • 作用:如果你的AAR依赖于本地C++代码或其他JAR文件,这些文件会放在libs/目录下,并且在构建时一并集成。
    • 在Unity中,本地库文件(.so)会被自动复制到正确的位置,因此你可以通过Android的jni接口与这些库进行交互。
  3. proguard-rules.pro

    • 作用:如果AAR库使用了Proguard进行混淆,可能会包含这个文件。它定义了哪些类和方法需要保留,避免在混淆过程中被错误地移除或修改。
    • Unity中的构建过程如果启用了代码混淆(使用Proguard),则可能需要在proguard-rules.pro中添加AAR库的保留规则。

AAR文件的最简构成

最简AAR文件,仅包含AndroidManifest.xmlclasses.jar,结构会像这样:

my-library.aar
├── AndroidManifest.xml
└── classes.jar

如何在Unity中使用AAR文件?

  1. 将AAR文件放入Unity项目中的Assets/Plugins/Android/目录。
  2. Unity会自动识别并将其包含到Android构建中。你无需手动配置build.gradle,Unity会使用内部的构建系统来管理AAR的依赖。
  3. 如果有Java类需要通过C#调用,可以使用AndroidJavaClassAndroidJavaObject进行交互。

注意事项

  1. Manifest合并冲突:如果你的AAR文件和Unity的AndroidManifest.xml文件中有冲突(例如,权限或服务),Unity会尝试自动合并它们。但有时需要手动解决冲突。你可以在Assets/Plugins/Android/目录下调整和修改Manifest文件。

  2. 资源冲突:如果AAR文件中有资源(如drawablevalues等),它们会和Unity项目中的资源进行合并。如果两个文件有相同的名称,可能会导致资源冲突,需要通过手动调整来解决。

  3. 签名和Proguard:如果你使用的AAR文件需要签名或使用了Proguard混淆,确保你正确配置了这些选项,避免在发布时出现问题。

总结

  • 基础AAR内容:最基本的AAR文件,确实只需要包含AndroidManifest.xmlclasses.jar两个文件。
  • 扩展AAR内容:如果库涉及到资源文件(如图片、布局)、本地库(.so文件)或Proguard规则,它们也会包含在AAR中,但这些不是必须的,取决于你的库的具体需求。
  • Unity使用:将AAR文件放入Assets/Plugins/Android/目录后,Unity会自动集成到构建过程中,并通过Java层的API与其进行交互。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值