1、声网jar + 下载so开发 基本完成

This commit is contained in:
laopi 2024-09-03 17:16:37 +08:00
parent f5d8b7fed1
commit 09395b152e
5 changed files with 43 additions and 38 deletions

View File

@ -11,10 +11,12 @@ import android.content.Intent;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.content.res.Resources; import android.content.res.Resources;
import android.net.Uri;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.os.Message; import android.os.Message;
import android.provider.Settings;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log; import android.util.Log;
import android.view.Display; import android.view.Display;
@ -41,6 +43,7 @@ import androidx.core.content.ContextCompat;
import com.alibaba.android.arouter.facade.annotation.Route; import com.alibaba.android.arouter.facade.annotation.Route;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.lxj.xpopup.XPopup;
import com.shayu.phonelive.AppContext; import com.shayu.phonelive.AppContext;
import com.tencent.rtmp.ITXLivePlayListener; import com.tencent.rtmp.ITXLivePlayListener;
import com.tencent.rtmp.TXLiveBase; import com.tencent.rtmp.TXLiveBase;
@ -175,67 +178,44 @@ public class LauncherActivity extends AppCompatActivity implements View.OnClickL
mHandler.sendEmptyMessageDelayed(WHAT_GET_CONFIG, 1000); mHandler.sendEmptyMessageDelayed(WHAT_GET_CONFIG, 1000);
}else { }else {
//链接包 下载so库 //链接包 下载so库
String permission1 = Manifest.permission.READ_EXTERNAL_STORAGE;
String permission2 = Manifest.permission.WRITE_EXTERNAL_STORAGE;
int isPermission1 = ContextCompat.checkSelfPermission(mContext, permission1);
int isPermission2 = ContextCompat.checkSelfPermission(mContext, permission2);
if (isPermission1 == PackageManager.PERMISSION_GRANTED && isPermission2 == PackageManager.PERMISSION_GRANTED) {
downLoadSo(); downLoadSo();
} else {
//申请权限
ActivityCompat.requestPermissions(LauncherActivity.this, new String[]{permission1,
permission2}, PERMISSION_REQUEST_CODE);
}
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == PERMISSION_REQUEST_CODE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED) {
downLoadSo();
Log.e("downLoad", "outputDir:>>>" + grantResults[0]);
Log.e("downLoad", "grantResults[0]:>>>" + grantResults[1]);
} else {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}, PERMISSION_REQUEST_CODE);
Toast.makeText(this, "需要您的手機存儲權限!", Toast.LENGTH_SHORT).show();
}
} }
} }
private void downLoadSo() { private void downLoadSo() {
//存储路径 //检查是否下载过 //存储路径 //检查是否下载过
File outputDir = new File(getApplicationInfo().dataDir, Constants.DOWNLOAD_SO); File outputDir = new File(mContext.getDir("lib", Context.MODE_PRIVATE).getAbsoluteFile(), Constants.DOWNLOAD_SO);
Log.i("downLoad", "outputDir.getAbsolutePath() = " + outputDir.getAbsolutePath());
String cpuAbi = "";
cpuAbi = Build.CPU_ABI;
if (!outputDir.exists()) { if (!outputDir.exists()) {
Log.e("downLoad", "outputDir:>>>" + outputDir.exists()); Log.e("downLoad", "outputDir:>>>" + outputDir.exists());
outputDir.mkdirs(); outputDir.mkdirs();
} }
File fileSo = new File(outputDir, "soKuZip.zip"); File fileSo = new File(outputDir, "soKuZip.zip");
Log.i("downLoad", "fileSo.getAbsolutePath() = " + fileSo.getAbsolutePath());
File fileSoList = new File(outputDir, cpuAbi);
Log.i("downLoad", "fileSoList.getAbsolutePath() = " + fileSoList.getAbsolutePath());
//解压后的文件数量必须要有22个 //解压后的文件数量必须要有22个
//如果文件存在解压后 文件数量一致直接进入下一步 //如果文件存在解压后 文件数量一致直接进入下一步
if (fileSo.exists() && getFileCount(outputDir.getAbsolutePath()) == 23){ if (fileSo.exists() && getFileCount(fileSoList.getAbsolutePath()) == 22){
mHandler.sendEmptyMessageDelayed(WHAT_GET_CONFIG, 1000); mHandler.sendEmptyMessageDelayed(WHAT_GET_CONFIG, 1000);
return; return;
} }
Log.i("download", cpuAbi);
//如果沒下載需要清楚之前的登錄信息這樣用戶就有時間去下載so庫 //如果沒下載需要清楚之前的登錄信息這樣用戶就有時間去下載so庫
//根據手機cup 架構類型去下載支持不同類型的so //根據手機cup 架構類型去下載支持不同類型的so
String cpuAbi = "";
cpuAbi = Build.CPU_ABI;
Log.i("download", cpuAbi);
//2开始下载 //2开始下载
//检查压缩包是否已经下载过 //检查压缩包是否已经下载过
Log.i("download", "permission WRITE_EXTERNAL_STORAGE.." + ContextCompat.checkSelfPermission(LauncherActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)); Log.i("download", "permission WRITE_EXTERNAL_STORAGE.." + ContextCompat.checkSelfPermission(LauncherActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE));
Log.i("download", "permission READ_EXTERNAL_STORAGE .." + ContextCompat.checkSelfPermission(LauncherActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE)); Log.i("download", "permission READ_EXTERNAL_STORAGE .." + ContextCompat.checkSelfPermission(LauncherActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE));
String soUrl = String.format("https://downs.yaoulive.com/%s.zip", cpuAbi); String soUrl = String.format("https://downs.yaoulive.com/so-%s.zip", cpuAbi);
Log.i("download", soUrl); Log.i("download", soUrl);
if (!fileSo.exists()) { if (!fileSo.exists()) {

View File

@ -316,6 +316,6 @@ public class Constants {
public static int firstInto = 0;// public static int firstInto = 0;//
// 声网so // 声网so
public static final String DOWNLOAD_SO = "agora-lib"; public static final String DOWNLOAD_SO = "agora_lib";
} }

View File

@ -8,6 +8,7 @@ import android.opengl.EGLContext;
import android.opengl.EGLDisplay; import android.opengl.EGLDisplay;
import android.opengl.EGLSurface; import android.opengl.EGLSurface;
import android.opengl.GLES20; import android.opengl.GLES20;
import android.os.Build;
import android.util.Log; import android.util.Log;
import android.view.Surface; import android.view.Surface;
import android.view.TextureView; import android.view.TextureView;
@ -117,8 +118,11 @@ public class SWAuManager extends BaseCacheManager {
if(CommonAppConfig.IS_GOOGLE_PLAY == 0){ if(CommonAppConfig.IS_GOOGLE_PLAY == 0){
//链接包声网加载下载的 So文件 //链接包声网加载下载的 So文件
File file = new File(mContext.getApplicationInfo().dataDir, com.yunbao.common.Constants.DOWNLOAD_SO); String cpuAbi = "";
cpuAbi = Build.CPU_ABI;
File file = new File(mContext.getDir("lib", Context.MODE_PRIVATE).getAbsoluteFile(), com.yunbao.common.Constants.DOWNLOAD_SO + File.separator + cpuAbi);
config.mNativeLibPath = file.getAbsolutePath(); config.mNativeLibPath = file.getAbsolutePath();
Log.i("downLoad", "config.mNativeLibPath 1 = " + config.mNativeLibPath);
} }
// 创建并初始化 RtcEngine // 创建并初始化 RtcEngine
@ -143,6 +147,14 @@ public class SWAuManager extends BaseCacheManager {
config.mContext = mContext; config.mContext = mContext;
config.mAppId = CommonAppConfig.getSwAppId(); config.mAppId = CommonAppConfig.getSwAppId();
config.mEventHandler = mEventHandler; config.mEventHandler = mEventHandler;
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_SO + File.separator + cpuAbi);
config.mNativeLibPath = file.getAbsolutePath();
Log.i("downLoad", "config.mNativeLibPath 2 = " + config.mNativeLibPath);
}
// 创建并初始化 RtcEngine // 创建并初始化 RtcEngine
mRtcEngine = (RtcEngineEx) RtcEngineEx.create(config); mRtcEngine = (RtcEngineEx) RtcEngineEx.create(config);
} }

View File

@ -6,7 +6,9 @@ import android.content.Context;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.BitmapDrawable;
import android.net.Uri; import android.net.Uri;
import android.os.Build;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log;
import android.view.SurfaceView; import android.view.SurfaceView;
import android.widget.FrameLayout; import android.widget.FrameLayout;
@ -128,6 +130,16 @@ public class SWManager extends BaseCacheManager {
config.mContext = mContext; config.mContext = mContext;
config.mAppId = CommonAppConfig.getSwAppId(); config.mAppId = CommonAppConfig.getSwAppId();
config.mEventHandler = mRtcEventHandler; config.mEventHandler = mRtcEventHandler;
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_SO + File.separator + cpuAbi);
config.mNativeLibPath = file.getAbsolutePath();
Log.i("downLoad", "config.mNativeLibPath 2 = " + config.mNativeLibPath);
}
// 创建并初始化 RtcEngine // 创建并初始化 RtcEngine
mRtcEngine = (RtcEngineEx) RtcEngineEx.create(config); mRtcEngine = (RtcEngineEx) RtcEngineEx.create(config);
} }

View File

@ -239,6 +239,7 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene
"测试文本:"+getString(R.string.hot) "测试文本:"+getString(R.string.hot)
); );
ToastUtil.showDebug("打包时间:"+CommonAppConfig.BUILD_TIME+"\n系统语言:"+IMLoginManager.get(CommonAppContext.sInstance).getLocaleLanguage()); ToastUtil.showDebug("打包时间:"+CommonAppConfig.BUILD_TIME+"\n系统语言:"+IMLoginManager.get(CommonAppContext.sInstance).getLocaleLanguage());
//初始化声网 //初始化声网
SWAuManager.get().initRtcEngine(this); SWAuManager.get().initRtcEngine(this);
ActivityCompat.postponeEnterTransition(this); ActivityCompat.postponeEnterTransition(this);