方式 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() }