Using EOS SDK on Android

如何借助Android Studio在Android项目中接入EOS SDK

阅读时间7分钟

本指南介绍了如何为Android Studio项目添加 Epic Online Services (EOS) SDK,如何确保构建系统能够识别出SDK,以及如何处理Android相关的SDK初始化工作。

在为安卓平台接入SDK前,请务必阅读常用指南及参考一文,了解平台接入的注意事项。

1. 必要设置

本指南假设你已经创建了一个Android Studio项目,并且可以用Android NDK构建C/C++代码。如果你还没有设置项目,请参见https://developer.android.com/ndk/guides,了解如何设置。本指南还假设你使用Gradle来构建项目。你也可以使用其他构建工具,但官方对它们不提供支持。

EOS SDK要求 libc++_shared 与你的应用程序捆绑。如果它是你需要的标准模板库(STL),你可以参阅, 了解如何将它捆绑到你的 .apk 或 .aab中。

如果你打算使用其他的STL,你需要为你的NDK发布版本导入相关的 libc++_shared 库。你可以在 ndk 目录下的 sources\cxx-stl\llvm-libc++\libs\{arch}\ 位置找到 .so 文件。你需要用构建工具将它们包含在最终的构建版本中。

2. 将EOS引入Android Studio项目

你从 开发者门户(Developer Portal) 下载的SDK包含了一个压缩文件,其中包含了以下构件:

  • include 文件夹,包含EOS SDK中公开的所有头文件。
  • lib 文件夹,包含EOS SDK的 .so 文件;这些文件是为 arm64-v8aarmeabi-v7a 构建的,可以在构建应用程序时使用。
  • EOSSDK.aar 文件,它会自动将正确的库与你的应用程序捆绑,并将所需的权限和附带的java代码添加到你的项目中。

无论采用何种构建系统,你都需要将 EOSSDK.aar 作为模块引入到你的项目中。为此,你需要完成下列操作:

  1. 点击 文件(File) > 新建(New) > 新建模块(New Module..)

    在文件菜单中选择新建模块
    1. 在选项列表中选择 导入.JAR/.AAR包(Import .JAR/.AAR Package),然后点击 下一步(Next)
    选择导入.JAR/.AAR包
  2. 在解压的文件中选中 .aar 文件。子项目名称(Subproject Name) 应该会自动填充为“EOSSDK”。如果没有,则手动设置或填写另一个名称。EOSSDK 现在应该会作为导入的模块出现在项目中。

    1. 打开应用程序的 build.gradle 文件,它位于EOSSDK目录中。
    EOSSDK出现在项目中
  3. 在依赖项代码中,添加 androidx.security:security-crypto:1.0.0-rc01 以及 implementation project(path: :EOSSDK)

dependencies {
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.security:security-crypto:1.0.0-rc01'
implementation project(':EOSSDK')
}

到这一步,SDK应该已经导入到你的项目中了,并且应该会包含在你的构建版本中! 在构建过程中,.aar文件会自动处理并将正确的.so文件导入进apk/aab。

下列小节介绍了如何将C库直接与SDK集成。

3. 让构建系统包含SDK

你可以使用 CMakendk-build 将EOS SDK添加到你的项目中,官方对这两个构建系统都提供支持,可以与NDK一起使用。本小节将介绍如何使用这些构建系统将SDK导入你的项目。

搭配使用EOS和CMake

如果你已经在项目中使用了CMake,你的项目中应该会有一个 CMakeLists.txt 文件。为了将EOS SDK引入到你的NDK项目中,你需要让CMake知道库的位置。

为此,请在 CMakeLists.txt 中加入下列命令行:

CMakeLists.txt

add_library(EOSSDK SHARED IMPORTED)
set(EOSSDKDIR PUT_PATH_TO_EXPANDED_ZIP_HERE)
set_property(TARGET EOSSDK PROPERTY IMPORTED_LOCATION ${EOSSDKDIR}/lib/${ANDROID_ABI}/libEOSSDK.so)
set_property(TARGET EOSSDK PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${EOSSDKDIR}/include/)

如果你在 CMakeLists.txt 所在的相同目录下展开压缩文件,看起来会像是这样:

CMakeLists.txt

add_library(EOSSDK SHARED IMPORTED)
set(EOSSDKDIR ${CMAKE_SOURCE_DIR})
set_property(TARGET EOSSDK PROPERTY IMPORTED_LOCATION ${EOSSDKDIR}/lib/${ANDROID_ABI}/libEOSSDK.so)
set_property(TARGET EOSSDK PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${EOSSDKDIR}/include/)