方式 1:登录 Android Studio 官网 下载并安装 Android Studio 及其相关的 SDK Tools。由于国内运营商网络限制等原因,开发者需要确保本机能连接该网站,若无法访问建议选择“方式 2”。
方式 2:使用搜索引擎搜索 “Android Studio 下载”、“Android Studio 安装” 和 “Android Studio SDK Tools 安装”,查找可下载的源网站,并安装相关软件和工具。
2、必要信息配置:
联系相芯相关人员获取自己的证书(authpack.java 文件)
联系相芯相关人员获取云平台配置信息。
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() }}gradle7.0以下:
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及以上:
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' }
}
}依赖整合库
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语音驱动组件
=33后文件读写权限换成如下-->
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)//动态申请权限、
/**
* 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" }
}/**
* 初始化生成组件
*/
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")
}
}
}val glView = GLSurfaceView(this@RenderActivity) mBinding.root.addView(glView)
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()
}