快速跑通

1、安装Android studio,准备好Android studio运行环境,下载demo工程

在开发电脑上安装Android studio的方式:

  • 方式 1:登录 Android Studio 官网 下载并安装 Android Studio 及其相关的 SDK Tools。由于国内运营商网络限制等原因,开发者需要确保本机能连接该网站,若无法访问建议选择“方式 2”。

  • 方式 2:使用搜索引擎搜索 “Android Studio 下载”、“Android Studio 安装” 和 “Android Studio SDK Tools 安装”,查找可下载的源网站,并安装相关软件和工具。

demo下载:

https://www.faceunity.com/demodownloadptag.html



2、必要信息配置:

    • 联系相芯相关人员获取自己的证书(authpack.java 文件)

    • 联系相芯相关人员获取云平台配置信息。

    • 将获取到的证书和云端配置添加到FuEmptyDevBuilder中
      • class FuEmptyDevBuilder: IDevBuilder {    override fun isNotLimitFps(): Boolean {        return false    }    override fun appVersion(): String {        return  "v2.1"    }    override fun sdkVersion(): String {        return "2.1.0"    }    override fun getDefaultCloudConfig(): FUCloudConfig {        return  FUCloudConfig(            "请联系相芯获取云端地址",            "请联系相芯获取apiKey",            "请联系相芯获取apiSecret",            "请联系相芯获取appId"        )    }    override fun getDefaultMosCloudUrl(): String {        return "请联系相芯获取Mos云端地址"    }    override fun getDefaultWebCloudUrl(): String {        return "请联系相芯获取云渲染Web地址"    }    override fun getDefaultCloudTtsConfig(): CloudTtsConfig {        return CloudTtsConfig(            "请联系相芯获取", "Ali", "请联系相芯获取", "v2"        )    }    override fun getAuthPack(): ByteArray {        return "请联系相芯获取证书".toByteArray()    }}

3、环境和配置完成后,运行demo即可


SDK 集成

1、gradle依赖配置

  • gradle7.0以下:

    app工程下build.gradle增加maven仓库配置
    buildscript {
        repositories {
            google()
            mavenCentral()
            maven {
                url 'http://maven.faceunity.com/repository/maven-public/'
                allowInsecureProtocol true
            }
            maven { url 'https://jitpack.io' }
        }
      
    }
    allprojects {
        repositories {
            maven {
                url 'http://maven.faceunity.com/repository/maven-public/'
                allowInsecureProtocol true
            }
            maven { url 'https://jitpack.io' }
        }
    }
  • gradle7.0及以上:

    app工程下settings.gradle增加maven仓库配置
    pluginManagement {
        repositories {
            maven {
                url 'http://maven.faceunity.com/repository/maven-public/'
                allowInsecureProtocol true
            }
            google()
            mavenCentral()
            gradlePluginPortal()
            maven { url 'https://jitpack.io' }
        }
    }
    dependencyResolutionManagement {
        repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
        repositories {
            maven {
                url 'http://maven.faceunity.com/repository/maven-public/'
                allowInsecureProtocol true
            }
            google()
            mavenCentral()
            maven { url 'https://jitpack.io' }
        }
    }

    2、添加库依赖

    • 依赖整合库

    implementation "com.faceunity.gpb:avatarx-sdk:2.0.2"//avatarX-SDK,包含如下所有组件依赖
    • 按需依赖库
      • implementation "com.faceunity.gpb:render:1.8.2-beta-1"//渲染组件
        implementation "com.faceunity.gpb:toolbox:1.7.7"//工具组件
        implementation "com.faceunity.gpb:widget:1.0.2"//surfaceView控件组件
        implementation "com.faceunity.gpb:resource:1.0.1"//资源管理组件
        implementation "com.faceunity.gpb:http:1.0.2"//网络请求组件
        implementation "com.faceunity.gpb:cloud:1.0.2-alpha-6"//云端资源接口组件
        implementation "com.faceunity.gpb:builder:1.0.1"//形象生成组件
        implementation "com.faceunity.gpb:avatar-edit:1.0.1"//形象编辑组件
        implementation "com.faceunity.gpb:sta:1.1.4"//sta语音驱动组件

    3、导入资源

      将demo中,assets目录下engine、model、sta、graph文件夹拷贝到工程assets下

4、权限申请

根据实际应用需要,设置应用所需权限
进入 “app/src/main” 目录,打开 “AndroidManifest.xml” 文件,添加权限。
            =33后文件读写权限换成如下-->
动态权限申请:因为 Android 6.0 在一些比较重要的权限上要求必须申请动态权限,不能只通过 “AndroidMainfest.xml” 文件申请静态权限。因此还需要参考执行如下代码,其中 “requestPermissions” 是 “Activity” 的方法。
private val needPermission = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
    mutableSetOf(
        Manifest.permission.CAMERA,
        Manifest.permission.RECORD_AUDIO,
        Manifest.permission.READ_MEDIA_IMAGES
    )
} else {
    mutableSetOf(
        Manifest.permission.CAMERA,
        Manifest.permission.RECORD_AUDIO,
        Manifest.permission.WRITE_EXTERNAL_STORAGE,
        Manifest.permission.READ_EXTERNAL_STORAGE
    )
}
requestPermissions(needPermission.toTypedArray(), 10086)//动态申请权限
    注意:targetSdkVersion>30以后需要在AndroidManifest.xml文件中增加如下配置
      
            、


环境初始化

1、SDK 鉴权初始化

         /**
         * renderKit渲染引擎的上下文、鉴权初始化
         */
        private fun initEngine() {
            FURenderManager.registerFURenderInternalCheck(FUDevHelper.getInstance().getAuthPack()) //render离线鉴权
    //        FURenderManager.registerFURender(FUDevHelper.getInstance().getAuthPack()) //render在线鉴权
            FUStaManager.registerStaInternalCheck(FUDevHelper.getInstance().getAuthPack())//sta鉴权
            FURenderKit.getInstance().setStorageCacheDirectory(FUFileUtils.getExternalCacheFileDir().absolutePath)//配置本地缓存路径
            FUFileUtils.readByteArrayByPath("engine/EngineAssets.bundle")?.let {//读取引擎文件
                FURenderManager.createRenderContext(it)//初始化上下文
                FULogger.i(TAG) { "initEngine success" }
            }
        }
        /**
     * 日志系统初始化
     */
    private fun initLog() {
        FURenderManager.setKitDebug(FULogger.LogLevel.VERBOSE)//SDK日志等级
        FURenderManager.setCoreDebug(FULogger.LogLevel.INFO)//图形 C++ 层日志等级
        FULogger.i(TAG) { "initLog success" }
    }

2、组件初始化

初始化形象生成组件

/**
 * 初始化生成组件
 */
private fun initBuilder() {
    FUBuilderManager.setAIFaceProcessBundle(faceProcessBundlePath)//设置人脸驱动bundle
}

初始化资源管理组件

  /**
     * 初始化资源管理组件
     */
    private fun initResource() {
//        FUResourceHelper.setResourceType(FUResourceHelper.ResourceType.LOCAL)
        FUResourceManager.setAvatarSourceDir(null, DemoConstants.avatarLocalDir)//设置avatar列表目录
        FUResourceManager.setSourceFactory(FuResourceFactoryImpl())//设置资源访问工厂实现
        FULogger.i(TAG) { "initResource success" }
    }

初始化云服务组件

/**
 * 初始化云平台
 */
private fun initCloud() {
    FUCloudManager.setCloudConfig(FUDevHelper.getInstance().getDefaultCloudConfig())//设置云服务环境配置
    FUCloudManager.setSdkVersion(FUDevHelper.getInstance().sdkVersion())//设置SDK版本
    FUCloudManager.setProductVersion(FUDevHelper.getInstance().appVersion())//设置app版本
    FUCloudManager.switchDebug(true)//设置是否开启日志调试
    GlobalScope.launch {
        FUCloudKit.getInstance().initTokenAndItemSource().collect {//获取token和云端资源配置表,改逻辑可放在欢迎页或者loading页
            FULogger.i(TAG, "initTokenAndItemSource :$it")
        }
    }
}

    3、渲染GLView创建

    • xml创建

    • 动态创建
      • val glView = GLSurfaceView(this@RenderActivity)
        mBinding.root.addView(glView)
widget组件提供了surfaceView和textureView两种GLView,客户可参考demo和组件源码,根据需要决定使用哪一种。GLView的创建是形象渲染到屏幕的必要前提,GLView创建完成后需要为GLView绑定render,并在OnGLRendererListener的回调中初始化renderKit和释放renderKit
mCustomRenderer = FUEmptySurfaceRenderer().apply {
    bindGLSurfaceView(mBinding.glSurfaceView)//绑定render
    bindListener(mOnFUGlRendererListener)//设置OnGLRendererListener生命周期监听
}
/**
 * Renderer 业务回调
 */
private val mOnFUGlRendererListener = object : OnGLRendererListener {
    override fun onSurfaceCreated() {
        initRendererKit()//初始化renderKit
    }

    override fun onGLContextDestroy() {
        releaseRenderKit()//释放renderKit
    }
}
/**
 * 初始化renderKit
 */
fun initRendererKit() {
    FURenderKit.getInstance().bindGLThread()//绑定GL线程
    FURenderKit.getInstance().createGraphicDevice()//初始化渲染引擎
}
/**
 * 释放renderKit
 */
fun releaseRenderKit() {
    FURenderKit.getInstance().release()
}


< 上一页: iOS端
下一页: 基础功能 >