From 0aa1e78f416950ae04c3db1197210a12b43640b6 Mon Sep 17 00:00:00 2001 From: w2016561536 Date: Sat, 4 Dec 2021 23:58:22 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E5=BC=80=E6=9C=BA=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5=E9=97=AE=E9=A2=98=EF=BC=88=E5=8F=AF=E8=83=BD=EF=BC=89?= =?UTF-8?q?=20=E6=8D=95=E6=8D=89toast.show=E7=9A=84=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Resolve boot failure (possible) Catch the error of toast.show --- app/build.gradle | 6 +- app/release/app-release.apk | Bin 69010 -> 86916 bytes app/release/output-metadata.json | 4 +- .../main/java/com/example/vcam/HookMain.java | 252 +++++++++++------- 4 files changed, 160 insertions(+), 102 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 67ce5fb..6a5f732 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -8,9 +8,9 @@ android { defaultConfig { applicationId "com.example.vcam" minSdk 21 - targetSdk 29 - versionCode 21 - versionName "3.8" + targetSdk 27 + versionCode 22 + versionName "3.9" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } diff --git a/app/release/app-release.apk b/app/release/app-release.apk index d17d37b75eb09b5167aba89f6a167a73b7807984..22b12fb50e11c72ddae3b98974323eb9e32f0a9b 100644 GIT binary patch delta 21635 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 delta 21070 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 Build.VERSION_CODES.M) { try { auth_statue += (toast_content.checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) + 1); - } catch (Exception ignored) { - + } catch (Exception ee) { + XposedBridge.log("【VCAM】[permission-check]" + ee.toString()); } try { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { auth_statue += (toast_content.checkSelfPermission(Manifest.permission.MANAGE_EXTERNAL_STORAGE) + 1); } - } catch (Exception ignored) { + } catch (Exception ee) { + XposedBridge.log("【VCAM】[permission-check]" + ee.toString()); + } + } + + File DCIM_dic = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/DCIM/"); + if ((!DCIM_dic.canRead()) && auth_statue < 1) { + auth_statue = -1; + } + if (auth_statue < 1) { + File shown_file = new File(toast_content.getExternalFilesDir(null).getAbsolutePath() + "/Camera1/"); + if ((!shown_file.isDirectory()) && shown_file.exists()) { + shown_file.delete(); } - }else { - File DCIM_dic = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/DCIM/"); - if (!DCIM_dic.canRead()){ - auth_statue = -1; + if (!shown_file.exists()) { + shown_file.mkdir(); } - } - if ( auth_statue < 1 ){ - File shown_file = new File(toast_content.getExternalFilesDir(null).getAbsolutePath() + "/Camera1/"); - if ((!shown_file.isDirectory()) && shown_file.exists()){ - shown_file.delete(); - } - if (!shown_file.exists()){ - shown_file.mkdir(); - } - shown_file = new File(toast_content.getExternalFilesDir(null).getAbsolutePath() + "/Camera1/"+ "has_shown"); - if (!(lpparam.packageName.equals(BuildConfig.APPLICATION_ID) || shown_file.exists())) { + shown_file = new File(toast_content.getExternalFilesDir(null).getAbsolutePath() + "/Camera1/" + "has_shown"); + if (!(lpparam.packageName.equals(BuildConfig.APPLICATION_ID) || shown_file.exists())) { + try { Toast.makeText(toast_content, "未授予读取本地目录权限,请检查权限\nCamera1目前重定向为 " + toast_content.getExternalFilesDir(null).getAbsolutePath() + "/Camera1/", Toast.LENGTH_LONG).show(); - try { - FileOutputStream fos = new FileOutputStream(toast_content.getExternalFilesDir(null).getAbsolutePath() + "/Camera1/" + "has_shown"); - String info = "shown"; - fos.write(info.getBytes()); - fos.flush(); - fos.close(); - } catch (Exception e) { - XposedBridge.log("【VCAM】"+ e.toString()); - } + FileOutputStream fos = new FileOutputStream(toast_content.getExternalFilesDir(null).getAbsolutePath() + "/Camera1/" + "has_shown"); + String info = "shown"; + fos.write(info.getBytes()); + fos.flush(); + fos.close(); + } catch (Exception e) { + XposedBridge.log("【VCAM】[switch-dir]" + e.toString()); } - video_path = toast_content.getExternalFilesDir(null).getAbsolutePath() + "/Camera1/"; - }else { - video_path = Environment.getExternalStorageDirectory().getPath() + "/DCIM/Camera1/"; } - }else { + video_path = toast_content.getExternalFilesDir(null).getAbsolutePath() + "/Camera1/"; + } else { + video_path = Environment.getExternalStorageDirectory().getPath() + "/DCIM/Camera1/"; + } + } else { video_path = Environment.getExternalStorageDirectory().getPath() + "/DCIM/Camera1/"; File uni_DCIM_path = new File(Environment.getExternalStorageDirectory().getPath() + "/DCIM/"); - if (uni_DCIM_path.canWrite()){ + if (uni_DCIM_path.canWrite()) { File uni_Camera1_path = new File(video_path); - if ((!uni_Camera1_path.isDirectory()) && uni_Camera1_path.exists()){ - //uni_Camera1_path.delete(); - } - if (!uni_Camera1_path.exists()){ + if (!uni_Camera1_path.exists()) { uni_Camera1_path.mkdir(); } } @@ -357,7 +353,11 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { File file = new File(video_path + "virtual.mp4"); if (!file.exists()) { if (toast_content != null) { - Toast.makeText(toast_content, "不存在替换视频", Toast.LENGTH_SHORT).show(); + try { + Toast.makeText(toast_content, "不存在替换视频\n当前路径:" + video_path, Toast.LENGTH_SHORT).show(); + } catch (Exception ee) { + XposedBridge.log("【VCAM】[toast]" + ee.toString()); + } return; } } @@ -401,7 +401,7 @@ public void onPrepared(MediaPlayer mp) { mplayer1.setDataSource(video_path + "virtual.mp4"); mplayer1.prepare(); } catch (IOException e) { - XposedBridge.log("【VCAM】"+e.toString()); + XposedBridge.log("【VCAM】" + e.toString()); } } @@ -456,7 +456,11 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { File file = new File(video_path + "virtual.mp4"); if (!file.exists()) { if (toast_content != null) { - Toast.makeText(toast_content, "不存在替换视频", Toast.LENGTH_SHORT).show(); + try { + Toast.makeText(toast_content, "不存在替换视频\n当前路径:" + video_path, Toast.LENGTH_SHORT).show(); + } catch (Exception ee) { + XposedBridge.log("【VCAM】[toast]" + ee.toString()); + } return; } } @@ -494,9 +498,20 @@ protected void beforeHookedMethod(MethodHookParam param) { if (param.args[0] == null) { return; } - if (param.thisObject == null){ + if (param.thisObject == null) { return; } + File file = new File(video_path + "virtual.mp4"); + if (!file.exists()) { + if (toast_content != null) { + try { + Toast.makeText(toast_content, "不存在替换视频\n当前路径:" + video_path, Toast.LENGTH_SHORT).show(); + } catch (Exception ee) { + XposedBridge.log("【VCAM】[toast]" + ee.toString()); + } + return; + } + } File control_file = new File(video_path + "disable.jpg"); if (control_file.exists()) { return; @@ -532,24 +547,35 @@ protected void beforeHookedMethod(MethodHookParam param) { if (param.args[0] == null) { return; } - if (param.thisObject == null){ + if (param.thisObject == null) { return; } + File file = new File(video_path + "virtual.mp4"); + if (!file.exists()) { + if (toast_content != null) { + try { + Toast.makeText(toast_content, "不存在替换视频\n当前路径:" + video_path, Toast.LENGTH_SHORT).show(); + } catch (Exception ee) { + XposedBridge.log("【VCAM】[toast]" + ee.toString()); + } + return; + } + } File control_file = new File(video_path + "disable.jpg"); if (control_file.exists()) { return; } Surface rm_surf = (Surface) param.args[0]; - if (rm_surf.equals(c2_preview_Surfcae)){ - c2_preview_Surfcae= null; + if (rm_surf.equals(c2_preview_Surfcae)) { + c2_preview_Surfcae = null; } - if (rm_surf.equals(c2_preview_Surfcae_1)){ + if (rm_surf.equals(c2_preview_Surfcae_1)) { c2_preview_Surfcae_1 = null; } - if (rm_surf.equals(c2_reader_Surfcae_1)){ + if (rm_surf.equals(c2_reader_Surfcae_1)) { c2_reader_Surfcae_1 = null; } - if (rm_surf.equals(c2_reader_Surfcae)){ + if (rm_surf.equals(c2_reader_Surfcae)) { c2_reader_Surfcae = null; } @@ -560,13 +586,24 @@ protected void beforeHookedMethod(MethodHookParam param) { XposedHelpers.findAndHookMethod("android.hardware.camera2.CaptureRequest.Builder", lpparam.classLoader, "build", new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - if (param.thisObject == null){ + if (param.thisObject == null) { return; } - if (param.thisObject.equals(c2_builder)){ + if (param.thisObject.equals(c2_builder)) { return; } c2_builder = (CaptureRequest.Builder) param.thisObject; + File file = new File(video_path + "virtual.mp4"); + if (!file.exists()) { + if (toast_content != null) { + try { + Toast.makeText(toast_content, "不存在替换视频\n当前路径:" + video_path, Toast.LENGTH_SHORT).show(); + } catch (Exception ee) { + XposedBridge.log("【VCAM】[toast]" + ee.toString()); + } + return; + } + } File control_file = new File(video_path + "disable.jpg"); if (control_file.exists()) { @@ -607,7 +644,11 @@ protected void beforeHookedMethod(MethodHookParam param) { c2_ori_height = (int) param.args[1]; Imagereader_format = (int) param.args[2]; if (toast_content != null) { - Toast.makeText(toast_content, "应用创建了渲染器:\n宽:" + param.args[0] + "\n高:" + param.args[1] + "\n一般只需要宽高比与视频相同", Toast.LENGTH_LONG).show(); + try { + Toast.makeText(toast_content, "应用创建了渲染器:\n宽:" + param.args[0] + "\n高:" + param.args[1] + "\n一般只需要宽高比与视频相同", Toast.LENGTH_LONG).show(); + } catch (Exception e) { + XposedBridge.log("【VCAM】[toast]" + e.toString()); + } } } }); @@ -641,7 +682,7 @@ public void process_camera2_play() { c2_hw_decode_obj.set_surfcae(c2_reader_Surfcae); c2_hw_decode_obj.decode(video_path + "virtual.mp4"); } catch (Throwable throwable) { - XposedBridge.log("【VCAM】"+throwable.toString()); + XposedBridge.log("【VCAM】" + throwable.toString()); } } @@ -689,7 +730,7 @@ public void onPrepared(MediaPlayer mp) { c2_player.setDataSource(video_path + "virtual.mp4"); c2_player.prepare(); } catch (Exception e) { - XposedBridge.log("【VCAM】[c2player][" + c2_preview_Surfcae.toString() +"]"+e.toString()); + XposedBridge.log("【VCAM】[c2player][" + c2_preview_Surfcae.toString() + "]" + e.toString()); } } @@ -716,7 +757,7 @@ public void onPrepared(MediaPlayer mp) { c2_player_1.setDataSource(video_path + "virtual.mp4"); c2_player_1.prepare(); } catch (Exception e) { - XposedBridge.log("【VCAM】[c2player1]"+"[ " + c2_preview_Surfcae_1.toString() + "]"+e.toString()); + XposedBridge.log("【VCAM】[c2player1]" + "[ " + c2_preview_Surfcae_1.toString() + "]" + e.toString()); } } XposedBridge.log("【VCAM】处理过程完全执行"); @@ -870,7 +911,7 @@ public void process_a_shot_jpeg(XC_MethodHook.MethodHookParam param, int index) try { XposedBridge.log("【VCAM】第二个jpeg:" + param.args[index].toString()); } catch (Exception eee) { - XposedBridge.log("【VCAM】"+eee.toString()); + XposedBridge.log("【VCAM】" + eee.toString()); } Class callback = param.args[index].getClass(); @@ -884,19 +925,24 @@ protected void beforeHookedMethod(MethodHookParam paramd) throws Throwable { onemhight = loaclcam.getParameters().getPreviewSize().height; XposedBridge.log("【VCAM】JPEG拍照回调初始化:宽:" + onemwidth + "高:" + onemhight + "对应的类:" + loaclcam.toString()); if (toast_content != null) { - Toast.makeText(toast_content, "发现拍照\n宽:" + onemwidth + "\n高:" + onemhight + "\n格式:JPEG", Toast.LENGTH_LONG).show(); + try { + Toast.makeText(toast_content, "发现拍照\n宽:" + onemwidth + "\n高:" + onemhight + "\n格式:JPEG", Toast.LENGTH_LONG).show(); + } catch (Exception e) { + XposedBridge.log("【VCAM】[toast]" + e.toString()); + } } File control_file = new File(video_path + "disable.jpg"); if (control_file.exists()) { return; } + Bitmap pict = getBMP(video_path + "1000.bmp"); ByteArrayOutputStream temp_array = new ByteArrayOutputStream(); pict.compress(Bitmap.CompressFormat.JPEG, 100, temp_array); byte[] jpeg_data = temp_array.toByteArray(); paramd.args[0] = jpeg_data; } catch (Exception ee) { - XposedBridge.log("【VCAM】"+ee.toString()); + XposedBridge.log("【VCAM】" + ee.toString()); } } }); @@ -906,7 +952,7 @@ public void process_a_shot_YUV(XC_MethodHook.MethodHookParam param) { try { XposedBridge.log("【VCAM】发现拍照YUV:" + param.args[1].toString()); } catch (Exception eee) { - XposedBridge.log("【VCAM】"+eee.toString()); + XposedBridge.log("【VCAM】" + eee.toString()); } Class callback = param.args[1].getClass(); XposedHelpers.findAndHookMethod(callback, "onPictureTaken", byte[].class, android.hardware.Camera.class, new XC_MethodHook() { @@ -918,7 +964,11 @@ protected void beforeHookedMethod(MethodHookParam paramd) throws Throwable { onemhight = loaclcam.getParameters().getPreviewSize().height; XposedBridge.log("【VCAM】YUV拍照回调初始化:宽:" + onemwidth + "高:" + onemhight + "对应的类:" + loaclcam.toString()); if (toast_content != null) { - Toast.makeText(toast_content, "发现拍照\n宽:" + onemwidth + "\n高:" + onemhight + "\n格式:YUV_420_888" , Toast.LENGTH_LONG).show(); + try { + Toast.makeText(toast_content, "发现拍照\n宽:" + onemwidth + "\n高:" + onemhight + "\n格式:YUV_420_888", Toast.LENGTH_LONG).show(); + } catch (Exception ee) { + XposedBridge.log("【VCAM】[toast]" + ee.toString()); + } } File control_file = new File(video_path + "disable.jpg"); if (control_file.exists()) { @@ -927,7 +977,7 @@ protected void beforeHookedMethod(MethodHookParam paramd) throws Throwable { input = getYUVByBitmap(getBMP(video_path + "1000.bmp")); paramd.args[0] = input; } catch (Exception ee) { - XposedBridge.log("【VCAM】"+ee.toString()); + XposedBridge.log("【VCAM】" + ee.toString()); } } }); @@ -943,7 +993,11 @@ public void process_callback(XC_MethodHook.MethodHookParam param) { File file = new File(video_path + "virtual.mp4"); if (!file.exists()) { if (toast_content != null) { - Toast.makeText(toast_content, "不存在替换视频", Toast.LENGTH_SHORT).show(); + try { + Toast.makeText(toast_content, "不存在替换视频\n当前路径:" + video_path, Toast.LENGTH_SHORT).show(); + } catch (Exception ee) { + XposedBridge.log("【VCAM】[toast]" + ee.toString()); + } need_stop = 1; } } @@ -964,9 +1018,13 @@ protected void beforeHookedMethod(MethodHookParam paramd) throws Throwable { int frame_Rate = data_camera.getParameters().getPreviewFrameRate(); XposedBridge.log("【VCAM】帧预览回调初始化:宽:" + mwidth + " 高:" + mhight + " 帧率:" + frame_Rate); if (toast_content != null) { - Toast.makeText(toast_content, "发现预览\n宽:" + mwidth + "\n高:" + mhight + "\n" + "需要视频分辨率与其完全相同", Toast.LENGTH_LONG).show(); + try { + Toast.makeText(toast_content, "发现预览\n宽:" + mwidth + "\n高:" + mhight + "\n" + "需要视频分辨率与其完全相同", Toast.LENGTH_LONG).show(); + } catch (Exception ee) { + XposedBridge.log("【VCAM】[toast]" + ee.toString()); + } } - if (finalNeed_stop == 1){ + if (finalNeed_stop == 1) { return; } if (hw_decode_obj != null) { @@ -1123,10 +1181,10 @@ public void videoDecode(String videoFilePath) throws IOException { showSupportedColorFormat(decoder.getCodecInfo().getCapabilitiesForType(mime)); if (isColorFormatSupported(decodeColorFormat, decoder.getCodecInfo().getCapabilitiesForType(mime))) { mediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT, decodeColorFormat); - XposedBridge.log( "【VCAM】【decoder】set decode color format to type " + String.valueOf(decodeColorFormat)); + XposedBridge.log("【VCAM】【decoder】set decode color format to type " + decodeColorFormat); } else { Log.i(TAG, "unable to set decode color format, color format type " + decodeColorFormat + " not supported"); - XposedBridge.log("【VCAM】【decoder】unable to set decode color format, color format type " + String.valueOf(decodeColorFormat) + " not supported"); + XposedBridge.log("【VCAM】【decoder】unable to set decode color format, color format type " + decodeColorFormat + " not supported"); } decodeFramesToImage(decoder, extractor, mediaFormat); decoder.stop(); @@ -1216,7 +1274,7 @@ private void decodeFramesToImage(MediaCodec decoder, MediaExtractor extractor, M try { mQueue.put(arr); } catch (InterruptedException e) { - XposedBridge.log("【VCAM】"+e.toString()); + XposedBridge.log("【VCAM】" + e.toString()); } } if (outputImageFormat != null) { @@ -1229,7 +1287,7 @@ private void decodeFramesToImage(MediaCodec decoder, MediaExtractor extractor, M try { Thread.sleep(sleepTime); } catch (InterruptedException e) { - XposedBridge.log("【VCAM】"+e.toString()); + XposedBridge.log("【VCAM】" + e.toString()); XposedBridge.log("【VCAM】线程延迟出错"); } }