返回

Gradle 编译改造之旅:赋予 Google Camera2 新生

Android

在移动摄影领域,Google Camera2 凭借其卓越的性能和可定制性备受推崇。然而,作为 AOSP 的一部分,Camera2 源码是使用 Android.mk 编译的,这就限制了开发人员使用 Android Studio 进行编译和调试。为了克服这一限制,我踏上了将 Camera2 迁移为 Gradle 编译的旅程,现在我将与大家分享这趟充满技术挑战和突破的经历。

源码下载

第一步是获取 Camera2 的源码。前往 AOSP 代码库并下载与您的 Android 设备兼容的版本。注意,您需要使用 repo 命令行工具进行下载。

repo init -u https://android.googlesource.com/repo -b master
repo sync

迁移为 Gradle

下载源代码后,就可以开始将其迁移到 Gradle 编译系统了。按照以下步骤进行操作:

  1. 创建 Gradle 项目: 在您选择的工作目录中,创建新的 Android Gradle 项目。
  2. 复制源码: 将 Camera2 源码复制到新项目的 src/main/cpp 目录中。
  3. 创建 build.gradle 文件: 在项目的根目录中创建 build.gradle 文件,并添加以下内容:
apply plugin: 'com.android.library'

android {
    compileSdkVersion 33
    buildToolsVersion "33.0.2"

    defaultConfig {
        minSdkVersion 21
        targetSdkVersion 33
        externalNativeBuild {
            cmake {
                cppFlags "-std=c++17"
            }
        }
    }

    externalNativeBuild {
        cmake {
            path "CMakeLists.txt"
        }
    }
}
  1. 创建 CMakeLists.txt 文件:src/main/cpp 目录中创建 CMakeLists.txt 文件,并添加以下内容:
cmake_minimum_required(VERSION 3.10.2)

add_library(
        camera2
        SHARED
        camera2_api.cpp
        camera2_buffer.cpp
        ...
)

target_link_libraries(
        camera2
        ...
)
  1. 编译并运行: 运行 ./gradlew assembleDebug 命令进行编译。如果一切顺利,您应该会在 build/intermediates/cmake/debug/obj 目录中看到已编译的库文件。

享受 Gradle 编译的优势

将 Camera2 迁移为 Gradle 编译后,您就可以享受以下优势:

  • 轻松集成: 使用 Android Studio 进行编译和调试变得轻而易举。
  • 模块化开发: Gradle 使得以模块化的方式开发 Camera2 应用程序变得更加容易。
  • 依赖管理: Gradle 可以帮助管理 Camera2 的依赖项。
  • 持续集成: Gradle 与持续集成工具(如 Jenkins)集成得很好。

结论

将 Google Camera2 迁移为 Gradle 编译是一种有益的体验,它为我打开了 Android Studio 编译和调试的大门。这一过程需要耐心和对 Gradle 构建系统的了解。但是,最终的结果是值得的:一个现代化、可扩展的 Camera2 应用程序,可以更轻松、更有效地进行开发。