From b300541ce958cef6a37611aed2d82993127b1764 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=80=81=E7=9A=AE?= <14840170+lao-pi123@user.noreply.gitee.com> Date: Tue, 24 Sep 2024 18:20:38 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E5=88=A0=E9=99=A4=E6=89=93=E5=8C=85x?= =?UTF-8?q?86=E6=9E=B6=E6=9E=84=E7=9A=84=E9=85=8D=E7=BD=AE=202=E3=80=81?= =?UTF-8?q?=E5=A3=B0=E7=BD=91SO=E4=B8=8D=E5=81=9A=E5=8A=A8=E6=80=81?= =?UTF-8?q?=E5=8A=A0=E8=BD=BD=203=E3=80=81=E7=BE=8E=E9=A2=9Cso=E5=8A=A8?= =?UTF-8?q?=E6=80=81=E5=8A=A0=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FaceUnity/build.gradle | 3 +- app/build.gradle | 65 +++++++++++++++--- .../phonelive/activity/LauncherActivity.java | 27 ++++---- lib_faceunity/build.gradle | 11 +-- .../faceunity/agora/SWAuManager.java | 25 +++---- .../beautyapi/faceunity/agora/SWManager.java | 12 ++-- .../live/activity/LiveSwAnchorActivity.java | 9 +++ main/build.gradle | 3 +- .../yunbao/main/activity/MainActivity.java | 9 +++ .../main/res/mipmap-xxxhdpi/login_twitter.png | Bin 6068 -> 0 bytes .../res/mipmap-xxxhdpi/login_twitter.webp | Bin 4200 -> 2150 bytes 11 files changed, 109 insertions(+), 55 deletions(-) delete mode 100644 main/src/main/res/mipmap-xxxhdpi/login_twitter.png diff --git a/FaceUnity/build.gradle b/FaceUnity/build.gradle index b3c1d111c..a41a68ebd 100644 --- a/FaceUnity/build.gradle +++ b/FaceUnity/build.gradle @@ -33,7 +33,8 @@ android { versionName rootProject.ext.android.versionName manifestPlaceholders = rootProject.ext.manifestPlaceholders ndk { - abiFilters "armeabi-v7a", "arm64-v8a","x86","x86_64" + abiFilters "armeabi-v7a", "arm64-v8a" +// abiFilters "armeabi-v7a", "arm64-v8a","x86","x86_64" } } aaptOptions { diff --git a/app/build.gradle b/app/build.gradle index 602e39f27..f1636771b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -68,18 +68,67 @@ android { exclude 'lib/armeabi-v7a/libMNN_CL.so' exclude 'lib/armeabi-v7a/libMNN_Express.so' - // 链接包剔除相心美颜SO if (rootProject.ext.manifestPlaceholders.isGooglePlay == 0) { + // 链接包剔除相心美颜SO exclude 'lib/armeabi-v7a/libCNamaSDK.so' - exclude 'lib/arm64-v8a/libCNamaSDK.so' - exclude 'lib/x86_64/libCNamaSDK.so' - exclude 'lib/x86/libCNamaSDK.so' exclude 'lib/armeabi-v7a/libfuai.so' + + exclude 'lib/arm64-v8a/libCNamaSDK.so' exclude 'lib/arm64-v8a/libfuai.so' - exclude 'lib/x86_64/libfuai.so' - exclude 'lib/x86/libfuai.so' + + /* // 剔除声网X86架构的so + exclude 'lib/x86/libagora-core.so' + exclude 'lib/x86/libagora-ffmpeg.so' + exclude 'lib/x86/libagora-fdkaac.so' + exclude 'lib/x86/libagora-soundtouch.so' + exclude 'lib/x86/libagora-rtc-sdk.so' + + *//* exclude 'lib/x86/libagora_ai_echo_cancellation_extension.so' + exclude 'lib/x86/libagora_ai_noise_suppression_extension.so' + exclude 'lib/x86/libagora_audio_beauty_extension.so' + exclude 'lib/x86/libagora_clear_vision_extension.so' + exclude 'lib/x86/libagora_content_inspect_extension.so' + exclude 'lib/x86/libagora_face_detection_extension.so' + exclude 'lib/x86/libagora_face_capture_extension.so' + exclude 'lib/x86/libagora_lip_sync_extension.so' + exclude 'lib/x86/libagora_screen_capture_extension.so' + exclude 'lib/x86/libagora_segmentation_extension.so' + exclude 'lib/x86/libagora_spatial_audio_extension.so' + exclude 'lib/x86/libagora_video_av1_decoder_extension.so' + exclude 'lib/x86/libagora_video_decoder_extension.so' + exclude 'lib/x86/libagora_video_encoder_extension.so' + exclude 'lib/x86/libagora_video_quality_analyzer_extension.so' + exclude 'lib/x86/libagora_video_dec.so' + exclude 'lib/x86/libagora_video_enc.so'*//* + + exclude 'lib/x86_64/libagora-core.so' + exclude 'lib/x86_64/libagora-ffmpeg.so' + exclude 'lib/x86_64/libagora-fdkaac.so' + exclude 'lib/x86_64/libagora-soundtouch.so' + exclude 'lib/x86_64/libagora-rtc-sdk.so' + + *//* exclude 'lib/x86_64/libagora_clear_vision_extension.so' + exclude 'lib/x86_64/libagora_segmentation_extension.so' + exclude 'lib/x86_64/libagora_screen_capture_extension.so' + exclude 'lib/x86_64/libagora_audio_beauty_extension.so' + exclude 'lib/x86_64/libagora_spatial_audio_extension.so' + exclude 'lib/x86_64/libagora_video_decoder_extension.so' + exclude 'lib/x86_64/libagora_video_encoder_extension.so' + exclude 'lib/x86_64/libagora_video_av1_decoder_extension.so' + exclude 'lib/x86_64/libagora_content_inspect_extension.so' + exclude 'lib/x86_64/libagora_video_quality_analyzer_extension.so' + exclude 'lib/x86_64/libagora_face_detection_extension.so' + exclude 'lib/x86_64/libagora_face_capture_extension.so' + exclude 'lib/x86_64/libagora_ai_noise_suppression_extension.so' + exclude 'lib/x86_64/libagora_ai_echo_cancellation_extension.so' + exclude 'lib/x86_64/libagora_lip_sync_extension.so' + exclude 'lib/x86_64/libagora_video_dec.so' + exclude 'lib/x86_64/libagora_video_enc.so'*/ + + } } + compileOptions { sourceCompatibility JavaVersion.VERSION_18 targetCompatibility JavaVersion.VERSION_18 @@ -258,8 +307,8 @@ android { println("处理ndk 版本 = " + tskReqStr) def isLink = tskReqStr.contains("Link") if (isLink) {//移除32位so库可以有效降低包体大小,等需要时再弄 - abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64" -// abiFilters "arm64-v8a", "x86_64" +// abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64" + abiFilters "armeabi-v7a", "arm64-v8a" println("打包ndk 链接") } else { abiFilters "armeabi-v7a", "arm64-v8a" diff --git a/app/src/main/java/com/shayu/phonelive/activity/LauncherActivity.java b/app/src/main/java/com/shayu/phonelive/activity/LauncherActivity.java index 0e8409a16..0ea9f193a 100644 --- a/app/src/main/java/com/shayu/phonelive/activity/LauncherActivity.java +++ b/app/src/main/java/com/shayu/phonelive/activity/LauncherActivity.java @@ -159,22 +159,22 @@ public class LauncherActivity extends AppCompatActivity implements View.OnClickL e.printStackTrace(); } SpUtil.getInstance().setBooleanValue("NOTIFICATION", NotificationManagerCompat.from(this).areNotificationsEnabled()); + Log.i("downLoad","架构: " + Build.CPU_ABI); - if(CommonAppConfig.IS_GOOGLE_PLAY != 0){ - //渠道包 - mHandler.sendEmptyMessageDelayed(WHAT_GET_CONFIG, 1000); - }else { + if(CommonAppConfig.IS_GOOGLE_PLAY == 0){ //链接包 下载so库 checkFaceUnitySOFile(); - checkAgoraSOFile(); +// checkAgoraSOFile(); + }else { + //渠道包 + mHandler.sendEmptyMessageDelayed(WHAT_GET_CONFIG, 1000); } } private void checkFaceUnitySOFile() { File outputDir = new File(mContext.getDir("lib", Context.MODE_PRIVATE).getAbsoluteFile(), Constants.DOWNLOAD_FaceUnity_SO); - String cpuAbi = ""; - cpuAbi = Build.CPU_ABI; + String cpuAbi = Build.CPU_ABI; if (!outputDir.exists()) { outputDir.mkdirs(); } @@ -190,30 +190,29 @@ public class LauncherActivity extends AppCompatActivity implements View.OnClickL Log.i("download", soUrl); if (!fileSo.exists()) { - downloadSo(outputDir.getAbsolutePath(), soUrl,Constants.FaceUnity_SO_Name,false); + downloadSo(outputDir.getAbsolutePath(), soUrl,Constants.FaceUnity_SO_Name,true); }else if (fileSo.exists() && getFileCount(outputDir.getAbsolutePath()) < 3) { fileSo.delete(); - downloadSo(outputDir.getAbsolutePath(), soUrl,Constants.FaceUnity_SO_Name,false); + downloadSo(outputDir.getAbsolutePath(), soUrl,Constants.FaceUnity_SO_Name,true); } } private void checkAgoraSOFile() { //存储路径 //检查是否下载过 File outputDir = new File(mContext.getDir("lib", Context.MODE_PRIVATE).getAbsoluteFile(), Constants.DOWNLOAD_Agora_SO); - Log.i("downLoad", "outputDir.getAbsolutePath() = " + outputDir.getAbsolutePath()); + Log.i("downLoad", "outputDir.getAbsolutePath() 1 = " + outputDir.getAbsolutePath()); - String cpuAbi = ""; - cpuAbi = Build.CPU_ABI; + String cpuAbi = Build.CPU_ABI; if (!outputDir.exists()) { Log.e("downLoad", "outputDir:>>>" + outputDir.exists()); outputDir.mkdirs(); } File fileSo = new File(outputDir, Constants.Agora_SO_Name); - Log.i("downLoad", "fileSo.getAbsolutePath() = " + fileSo.getAbsolutePath()); + Log.i("downLoad", "fileSo.getAbsolutePath() 2 = " + fileSo.getAbsolutePath()); File fileSoList = new File(outputDir, cpuAbi); - Log.i("downLoad", "fileSoList.getAbsolutePath() = " + fileSoList.getAbsolutePath()); + Log.i("downLoad", "fileSoList.getAbsolutePath() 3 = " + fileSoList.getAbsolutePath()); //解压后的文件数量必须要有22个 //如果文件存在,解压后 文件数量一致,直接进入下一步 diff --git a/lib_faceunity/build.gradle b/lib_faceunity/build.gradle index 1c00bb7c4..5ddde0cb1 100644 --- a/lib_faceunity/build.gradle +++ b/lib_faceunity/build.gradle @@ -35,13 +35,7 @@ dependencies { testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' - /*if (new File("$AGORA_RTC_SDK").exists()) { - api fileTree(dir: "${AGORA_RTC_SDK}", include: ['*.jar', '*.aar']) - } else { - api "$AGORA_RTC_SDK" - }*/ - - if (rootProject.ext.manifestPlaceholders.isGooglePlay != 0) { + /* if (rootProject.ext.manifestPlaceholders.isGooglePlay != 0) { println("isGooglePlayyes " + rootProject.manifestPlaceholders.isGooglePlay) println('应用市场安装包,使用远程依赖声网SDK') api "$AGORA_RTC_SDK" @@ -49,7 +43,8 @@ dependencies { println("isGooglePlay 链接包:>>> " + rootProject.ext.manifestPlaceholders.isGooglePlay) println('链接包,使用本地声网Jar + 下载SO') api files('../libs/agora-rtc-sdk.jar') - } + }*/ + api "$AGORA_RTC_SDK" api project(path: ':FaceUnity') api project(path: ':common') } diff --git a/lib_faceunity/src/main/java/io/agora/beautyapi/faceunity/agora/SWAuManager.java b/lib_faceunity/src/main/java/io/agora/beautyapi/faceunity/agora/SWAuManager.java index b3c2aa8c1..4a4f28770 100644 --- a/lib_faceunity/src/main/java/io/agora/beautyapi/faceunity/agora/SWAuManager.java +++ b/lib_faceunity/src/main/java/io/agora/beautyapi/faceunity/agora/SWAuManager.java @@ -93,19 +93,12 @@ public class SWAuManager extends BaseCacheManager { config.mAppId = CommonAppConfig.getSwAppId(); config.mEventHandler = mRtcEventHandler; - if(CommonAppConfig.IS_GOOGLE_PLAY == 0){ + /*if(CommonAppConfig.IS_GOOGLE_PLAY == 0){ //链接包,声网加载下载的 So文件 - String cpuAbi = ""; - cpuAbi = Build.CPU_ABI; - File file = new File(mContext.getDir("lib", Context.MODE_PRIVATE).getAbsoluteFile(), com.yunbao.common.Constants.DOWNLOAD_Agora_SO + File.separator + cpuAbi); + File file = new File(mContext.getDir("lib", Context.MODE_PRIVATE).getAbsoluteFile(), com.yunbao.common.Constants.DOWNLOAD_Agora_SO + File.separator + Build.CPU_ABI); config.mNativeLibPath = file.getAbsolutePath(); - Log.i("downLoad", "声网 SO Path = " + config.mNativeLibPath); - - // 美颜SO设置 - File file_FaceUnity = new File(mContext.getDir("lib", Context.MODE_PRIVATE).getAbsoluteFile(), com.yunbao.common.Constants.DOWNLOAD_FaceUnity_SO + File.separator + cpuAbi); - faceunity.LoadConfig.loadLibrary(file_FaceUnity.getAbsolutePath()); - Log.i("downLoad", "美颜SO Path = " + file_FaceUnity.getAbsolutePath()); - } + Log.i("downLoad", "声网 SO Path 1 = " + config.mNativeLibPath); + }*/ // 创建并初始化 RtcEngine mRtcEngine = (RtcEngineEx) RtcEngineEx.create(config); @@ -129,14 +122,12 @@ public class SWAuManager extends BaseCacheManager { config.mContext = mContext; config.mAppId = CommonAppConfig.getSwAppId(); config.mEventHandler = mEventHandler; - if(CommonAppConfig.IS_GOOGLE_PLAY == 0){ + /* if(CommonAppConfig.IS_GOOGLE_PLAY == 0){ //链接包,声网加载下载的 So文件 - String cpuAbi = ""; - cpuAbi = Build.CPU_ABI; - File file = new File(mContext.getDir("lib", Context.MODE_PRIVATE).getAbsoluteFile(), com.yunbao.common.Constants.DOWNLOAD_Agora_SO + File.separator + cpuAbi); + File file = new File(mContext.getDir("lib", Context.MODE_PRIVATE).getAbsoluteFile(), com.yunbao.common.Constants.DOWNLOAD_Agora_SO + File.separator + Build.CPU_ABI); config.mNativeLibPath = file.getAbsolutePath(); - Log.i("downLoad", "config.mNativeLibPath 2 = " + config.mNativeLibPath); - } + Log.i("downLoad", "声网 SO Path 2 = " + config.mNativeLibPath); + }*/ // 创建并初始化 RtcEngine mRtcEngine = (RtcEngineEx) RtcEngineEx.create(config); } diff --git a/lib_faceunity/src/main/java/io/agora/beautyapi/faceunity/agora/SWManager.java b/lib_faceunity/src/main/java/io/agora/beautyapi/faceunity/agora/SWManager.java index 8422f61fe..80f408758 100644 --- a/lib_faceunity/src/main/java/io/agora/beautyapi/faceunity/agora/SWManager.java +++ b/lib_faceunity/src/main/java/io/agora/beautyapi/faceunity/agora/SWManager.java @@ -1,6 +1,7 @@ package io.agora.beautyapi.faceunity.agora; import android.app.Activity; +import android.app.LauncherActivity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; @@ -131,14 +132,13 @@ public class SWManager extends BaseCacheManager { config.mContext = mContext; config.mAppId = CommonAppConfig.getSwAppId(); config.mEventHandler = mRtcEventHandler; - if(CommonAppConfig.IS_GOOGLE_PLAY == 0){ + /*if(CommonAppConfig.IS_GOOGLE_PLAY == 0){ //链接包,声网加载下载的 So文件 - String cpuAbi = ""; - cpuAbi = Build.CPU_ABI; - File file = new File(mContext.getDir("lib", Context.MODE_PRIVATE).getAbsoluteFile(), com.yunbao.common.Constants.DOWNLOAD_Agora_SO + File.separator + cpuAbi); + File file = new File(mContext.getDir("lib", Context.MODE_PRIVATE).getAbsoluteFile(), com.yunbao.common.Constants.DOWNLOAD_Agora_SO + File.separator + Build.CPU_ABI); config.mNativeLibPath = file.getAbsolutePath(); - Log.i("downLoad", "config.mNativeLibPath 2 = " + config.mNativeLibPath); - } + Log.i("downLoad", "声网 SO Path 3 = " + config.mNativeLibPath); + + }*/ // 创建并初始化 RtcEngine mRtcEngine = (RtcEngineEx) RtcEngineEx.create(config); diff --git a/live/src/main/java/com/yunbao/live/activity/LiveSwAnchorActivity.java b/live/src/main/java/com/yunbao/live/activity/LiveSwAnchorActivity.java index 1a323b749..4c0e13fc7 100644 --- a/live/src/main/java/com/yunbao/live/activity/LiveSwAnchorActivity.java +++ b/live/src/main/java/com/yunbao/live/activity/LiveSwAnchorActivity.java @@ -13,6 +13,7 @@ import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.drawable.Drawable; +import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.text.TextUtils; @@ -33,6 +34,7 @@ import com.blankj.utilcode.util.GsonUtils; import com.bumptech.glide.Glide; import com.bumptech.glide.request.target.CustomTarget; import com.bumptech.glide.request.transition.Transition; +import com.faceunity.wrapper.faceunity; import com.lxj.xpopup.XPopup; import com.lxj.xpopup.core.BasePopupView; import com.lxj.xpopup.interfaces.XPopupCallback; @@ -216,6 +218,13 @@ public class LiveSwAnchorActivity extends LiveActivity implements LiveFunctionCl super.main(); Bus.getOn(this); Intent intent = getIntent(); + if(CommonAppConfig.IS_GOOGLE_PLAY == 0){ + // 美颜SO设置 + File file_FaceUnity = new File(mContext.getDir("lib", Context.MODE_PRIVATE).getAbsoluteFile(), com.yunbao.common.Constants.DOWNLOAD_FaceUnity_SO + File.separator + Build.CPU_ABI); + faceunity.LoadConfig.loadLibrary(file_FaceUnity.getAbsolutePath()); + Log.i("downLoad", "美颜SO Path = " + file_FaceUnity.getAbsolutePath()); + } + initFaceManager(); leave_img = findViewById(R.id.leave_img); mLiveSDK = intent.getIntExtra(Constants.LIVE_SDK, Constants.LIVE_SDK_KSY); diff --git a/main/build.gradle b/main/build.gradle index cd4cb7565..cb03b99fa 100644 --- a/main/build.gradle +++ b/main/build.gradle @@ -33,7 +33,8 @@ android { ndk { // abiFilters "armeabi-v7a", "arm64-v8a","x86","x86_64" if (rootProject.ext.manifestPlaceholders.isGooglePlay == 0) { - abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64" +// abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64" + abiFilters "armeabi-v7a", "arm64-v8a" } else { abiFilters "armeabi-v7a", "arm64-v8a" } diff --git a/main/src/main/java/com/yunbao/main/activity/MainActivity.java b/main/src/main/java/com/yunbao/main/activity/MainActivity.java index 6777f15e9..95e3c30c5 100644 --- a/main/src/main/java/com/yunbao/main/activity/MainActivity.java +++ b/main/src/main/java/com/yunbao/main/activity/MainActivity.java @@ -210,6 +210,7 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene private View floatWarOrder;//战令浮窗 private List startListNotifyList = new ArrayList<>(); + private String[] libNameList = new String[]{"agora-core", "agora-ffmpeg", "agora-fdkaac", "agora-soundtouch","agora-rtc-sdk"}; @Override @@ -239,6 +240,14 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene ); ToastUtil.showDebug("打包时间:"+CommonAppConfig.BUILD_TIME+"\n系统语言:"+IMLoginManager.get(CommonAppContext.sInstance).getLocaleLanguage()); + /* File file = new File(getDir("lib", Context.MODE_PRIVATE).getAbsoluteFile(), com.yunbao.common.Constants.DOWNLOAD_Agora_SO + File.separator + Build.CPU_ABI); + String path = file.getAbsolutePath(); + + for (String s : libNameList) { + Log.i("downLoad", "System.load 加载so path = " + path + File.separator + "lib" + s + ".so"); + System.load(path + File.separator + "lib" + s + ".so"); + }*/ + //初始化声网 SWAuManager.get().initRtcEngine(this); ActivityCompat.postponeEnterTransition(this); diff --git a/main/src/main/res/mipmap-xxxhdpi/login_twitter.png b/main/src/main/res/mipmap-xxxhdpi/login_twitter.png deleted file mode 100644 index 4ae6abcf116663407744fa38df22c772819cb778..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6068 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 diff --git a/main/src/main/res/mipmap-xxxhdpi/login_twitter.webp b/main/src/main/res/mipmap-xxxhdpi/login_twitter.webp index e732791f80029a5d662d9b3931efdff93cfa8576..8f310a91f09c869ef83d760c8829961f69cbb45d 100644 GIT binary patch literal 2150 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