【Android CameraX】CameraX初始化、预览、销毁源码分析和最佳实践 (一) —— 介绍和CameraX相关配置

一、简介

CameraX作为目前主流的且官方不断维护和推荐使用的相机实现框架,掌握其实现基本原理最佳实践有助于帮助开发者更便捷的使用手机自带的相机能力。

该系列文章主要从初始化、预览、销毁等流程来详细阐述如何使用好CameraX框架提供的相机能力。后续的内容主要按照如下主线来进行:

  1. 代码框架和必要的组建模块
  2. CameraX初始化流程【变量、参数设置】
  3. CameraX预览
  4. CameraX销毁流程

每一块都会从三个层次来递进式阐述,分别为,流程步骤分析,源码解析,最佳实践,从而更系统的来帮助读者搭建一个完善健壮的商业化相机App。

相关文章和链接推荐:

  1. 【文章】Android Camera系列文章目录索引汇总
  2. 【文章】Android CameraX 综述
  3. 【文章】CameraXBasic —— 官方CameraX实例源码分析
  4. 【文章】Camera1初始化销毁流程(一) —— 官方Demo初始化流程分析
  5. 【链接】官方Demo传送门
  6. 【链接】CameraX库发版记录

关注我,随时获取音视频更多相关资讯。

二、模块划分

在进行App开发之前,都有必要对整个代码的框架和模块进行初步设计,如果要搭建一个比较通用的健壮的CameraX实例MVP App,基本需要考虑如下几块:

  1. 项目配置【camerax相关库和build.config】
  2. UI层面【承载预览的View,一些Button,相机设置如闪光灯、缩放、对焦、切换前后置、切换画幅等】
  3. 线程管理【CameraX的相关操作需要在异步线程进行】
  4. CameraXImpl【初始化、参数设置、预览】
  5. 容错和错误处理机制
  6. 同步和锁机制

后续,文章将会按照如上的步骤进行阐述,完成了以上6步,那么可以说基本上能搭建一个90分的CameraX App了。接下来,我们进行第一部分的介绍

三、相关配置【camerax相关库,build.config】

CameraX是一个 Jetpack 库,目标是帮助开发者更轻松地开发相机应用。在此之前有Camera2Camera1库。感兴趣的读者可自行浏览同级目录下有关Camera2Camera1的文章介绍。

CameraX的第一个版本发布在2019年5月7日。我们可以看到Android9.0的发布时间在2018年8月。因此在Android9.0(API 级别 28),包括9.0以前的版本所使用的相机框架还是为Camera2或者Camera1。即使目前CameraX最新的版本为2022 年 9 月 21 日。 并且官方声称CameraX向后兼容 Android 5.0(API 级别 21)。考虑到Android的开源特性,以及大大小小厂商手机兼容性问题,这里还是建议在Android9.0(API 级别 28)以上使用CameraX框架,Android9.0以下使用Camera1或者Camera2

确定了支持的Android SDK,下一件就是确定需要引用的CameraX库,CameraX库发版记录

说明
camera-camera2 必选核心库
camera-core 必选核心库
camera-extensions 可选,扩展功能
camera-lifecycle 可选,生命周期管理库
camera-mlkit-vision 可选,相机与AI能力结合库
camera-video 可选,录制视频库

最新时间:2022 年 9 月 21 日 ;最新版本号:1.2.0-beta02

重点小结:
本小节,我们确定了2个重要的问题

  1. 建议CameraX支持的Android minSDK为28
  2. CameraX最新时间:2022 年 9 月 21 日 ;最新版本号:1.2.0-beta02

其他的build.config和相关支持库和CameraX关联不大,自己可参考第四节具体配置代码,按需引用即可。

四、build.gradle配置代码参考

4.1 官方:Project -> build.gradle

buildscript {
    
    
    // Top-level variables used for versioning
    ext.kotlin_version = '1.5.21'
    ext.java_version = JavaVersion.VERSION_1_8

    repositories {
    
    
        google()
        mavenCentral()
    }
    dependencies {
    
    
        classpath 'com.android.tools.build:gradle:4.2.2'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "androidx.navigation:navigation-safe-args-gradle-plugin:2.3.5"

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    
    
    repositories {
    
    
        google()
        mavenCentral()
    }
}

task clean(type: Delete) {
    
    
    delete rootProject.buildDir
}

4.2 官方:App -> build.gradle

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply plugin: "androidx.navigation.safeargs"

android {
    
    
    compileSdkVersion 30
    defaultConfig {
    
    
		...
        minSdkVersion 21
        targetSdkVersion 30
    }

    compileOptions {
    
    
        sourceCompatibility rootProject.ext.java_version
        targetCompatibility rootProject.ext.java_version
    }

    kotlinOptions {
    
    
        jvmTarget = rootProject.ext.java_version
    }

...
}

dependencies {
    
    
    // Kotlin lang
    implementation 'androidx.core:core-ktx:1.6.0'
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0'
    // CameraX core library
    def camerax_version = '1.1.0-alpha07'
    implementation "androidx.camera:camera-core:$camerax_version"

    // CameraX Camera2 extensions
    implementation "androidx.camera:camera-camera2:$camerax_version"

    // CameraX Lifecycle library
    implementation "androidx.camera:camera-lifecycle:$camerax_version"

    // CameraX View class
    implementation 'androidx.camera:camera-view:1.0.0-alpha27'

    // CameraX Extensions library
    // implementation 'androidx.camera:camera-extensions:1.0.0-alpha27'
    ...
}

本人目前使用的配置如下:

minSdkVersion =  28 //【如果为21,则代码里进行判断9.0才使用CameraX】
kotlin_version = '1.6.10'
camera_lib_version = '1.2.0-beta02'

关注我,获取更多CameraX相关最佳实践。

猜你喜欢

转载自blog.csdn.net/Scott_S/article/details/127287467