From 5199b18353f76ba9fc04d8d7745d97dba5eeb089 Mon Sep 17 00:00:00 2001 From: GuhDoy Date: Thu, 30 Nov 2023 15:15:10 +0800 Subject: [PATCH] remove redirect_image --- app/build.gradle | 12 +-- .../java/gm/tieba/tabswitch/XposedInit.java | 2 - .../tieba/tabswitch/hooker/TSPreference.java | 1 - .../hooker/deobfuscation/Deobfuscation.java | 2 +- .../tabswitch/hooker/extra/RedirectImage.java | 89 ------------------- settings.gradle | 4 +- 6 files changed, 9 insertions(+), 101 deletions(-) delete mode 100644 app/src/main/java/gm/tieba/tabswitch/hooker/extra/RedirectImage.java diff --git a/app/build.gradle b/app/build.gradle index 054c0551..a8b195f9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -5,12 +5,12 @@ plugins { } def gitCommitCount = Integer.parseInt('git rev-list --count HEAD'.execute([], project.rootDir).text.trim()) -def sdk = 33 +def sdk = 34 android { compileSdk sdk - buildToolsVersion = '33.0.2' - ndkVersion '25.2.9519653' + buildToolsVersion = '34.0.0' + ndkVersion '26.0.10792818' defaultConfig { applicationId 'gm.tieba.tabswitch' @@ -67,16 +67,16 @@ android { dependencies { compileOnly 'de.robv.android.xposed:api:82' api 'androidx.annotation:annotation:1.7.0' - def roomVersion = '2.5.2' + def roomVersion = '2.6.0' implementation "androidx.room:room-runtime:$roomVersion" annotationProcessor "androidx.room:room-compiler:$roomVersion" implementation "androidx.room:room-ktx:$roomVersion" ksp "androidx.room:room-compiler:$roomVersion" implementation 'io.reactivex.rxjava3:rxjava:3.1.7' - implementation 'org.luckypray:dexkit:2.0.0-rc3' + implementation 'org.luckypray:dexkit:2.0.0-rc8' // https://stackoverflow.com/questions/61195038/excluding-dependency-from-implementation-files implementation files('apktool_2.7.0.jar') - implementation 'com.squareup.okhttp3:okhttp:4.11.0' + implementation 'com.squareup.okhttp3:okhttp:4.12.0' implementation 'dev.rikka.ndk.thirdparty:cxx:1.2.0' } diff --git a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java index 2d6a9983..335efc69 100644 --- a/app/src/main/java/gm/tieba/tabswitch/XposedInit.java +++ b/app/src/main/java/gm/tieba/tabswitch/XposedInit.java @@ -53,7 +53,6 @@ import gm.tieba.tabswitch.hooker.eliminate.SwitchManager; import gm.tieba.tabswitch.hooker.extra.ForbidGesture; import gm.tieba.tabswitch.hooker.extra.Hide; -import gm.tieba.tabswitch.hooker.extra.RedirectImage; import gm.tieba.tabswitch.hooker.extra.StackTrace; import gm.tieba.tabswitch.util.DisplayUtils; import gm.tieba.tabswitch.widget.TbDialog; @@ -100,7 +99,6 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable { new AutoSign(), new OpenSign(), new OriginSrc(), - new RedirectImage(), new ForbidGesture(), new AgreeNum(), new FrsTab(), diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java index 6ce702d6..425bbc11 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/TSPreference.java @@ -234,7 +234,6 @@ private LinearLayout createRootPreference(final Activity activity) { preferenceLayout.addView(new SwitchButtonHolder(activity, "自动查看原图", "origin_src", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(TSPreferenceHelper.createTextView(isPurgeEnabled ? "奇怪怪" : "其它")); - preferenceLayout.addView(new SwitchButtonHolder(activity, "使用媒体存储保存图片", "redirect_image", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "禁用帖子手势", "forbid_gesture", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(new SwitchButtonHolder(activity, "用赞踩差数代替赞数", "agree_num", SwitchButtonHolder.TYPE_SWITCH)); preferenceLayout.addView(TSPreferenceHelper.createButton(TRACE, "希望有一天不再需要贴吧TS", true, v -> { diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java index e3984781..d43a5894 100644 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java +++ b/app/src/main/java/gm/tieba/tabswitch/hooker/deobfuscation/Deobfuscation.java @@ -4,8 +4,8 @@ import org.luckypray.dexkit.DexKitBridge; import org.luckypray.dexkit.query.FindMethod; -import org.luckypray.dexkit.query.MethodDataList; import org.luckypray.dexkit.query.matchers.MethodMatcher; +import org.luckypray.dexkit.result.MethodDataList; import java.io.IOException; import java.util.ArrayList; diff --git a/app/src/main/java/gm/tieba/tabswitch/hooker/extra/RedirectImage.java b/app/src/main/java/gm/tieba/tabswitch/hooker/extra/RedirectImage.java deleted file mode 100644 index 208caf6e..00000000 --- a/app/src/main/java/gm/tieba/tabswitch/hooker/extra/RedirectImage.java +++ /dev/null @@ -1,89 +0,0 @@ -package gm.tieba.tabswitch.hooker.extra; - -import android.content.ContentValues; -import android.content.Context; -import android.os.Build; -import android.os.Environment; -import android.provider.MediaStore; - -import androidx.annotation.NonNull; - -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.Arrays; - -import de.robv.android.xposed.XC_MethodReplacement; -import de.robv.android.xposed.XposedBridge; -import de.robv.android.xposed.XposedHelpers; -import gm.tieba.tabswitch.XposedContext; -import gm.tieba.tabswitch.hooker.IHooker; -import gm.tieba.tabswitch.util.FileUtils; - -public class RedirectImage extends XposedContext implements IHooker { - - @NonNull - @Override - public String key() { - return "redirect_image"; - } - - @Override - public void hook() throws Throwable { - // 0x4197d783fc000000L - for (final var md : XposedHelpers.findClass("com.baidu.tbadk.core.util.FileHelper", sClassLoader).getDeclaredMethods()) { - switch (Arrays.toString(md.getParameterTypes())) { - case "[class java.lang.String, class [B, class android.content.Context]": - XposedBridge.hookMethod(md, new XC_MethodReplacement() { - @Override - protected Object replaceHookedMethod(final MethodHookParam param) throws Throwable { - return saveImage((String) param.args[0], new ByteArrayInputStream( - (byte[]) param.args[1]), (Context) param.args[2]); - } - }); - break; - case "[class java.lang.String, class java.lang.String, class android.content.Context]": - XposedBridge.hookMethod(md, new XC_MethodReplacement() { - @Override - protected Object replaceHookedMethod(final MethodHookParam param) throws Throwable { - return saveImage((String) param.args[1], new FileInputStream( - (String) param.args[0]), (Context) param.args[2]); - } - }); - break; - } - } - } - - private int saveImage(final String url, final InputStream is, final Context context) { - final var appContext = context.getApplicationContext(); - final var fileName = url.substring(url.lastIndexOf("/") + 1, url.lastIndexOf(".")); - try { - final var bb = FileUtils.toByteBuffer(is); - final var imageDetails = new ContentValues(); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { - imageDetails.put(MediaStore.MediaColumns.RELATIVE_PATH, - Environment.DIRECTORY_PICTURES + File.separator + "tieba"); - } else { - final var path = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), - "tieba"); - path.mkdirs(); - imageDetails.put(MediaStore.MediaColumns.DATA, path + File.separator - + fileName + "." + FileUtils.getExtension(bb)); - } - imageDetails.put(MediaStore.MediaColumns.DISPLAY_NAME, fileName); - imageDetails.put(MediaStore.MediaColumns.MIME_TYPE, "image/" + FileUtils.getExtension(bb)); - final var resolver = appContext.getContentResolver(); - final var imageUri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, imageDetails); - final var descriptor = resolver.openFileDescriptor(imageUri, "w"); - FileUtils.copy(bb, descriptor.getFileDescriptor()); - is.close(); - return 0; - } catch (final IOException | NullPointerException e) { - XposedBridge.log(e); - return -1; - } - } -} diff --git a/settings.gradle b/settings.gradle index f511fde2..149890c2 100644 --- a/settings.gradle +++ b/settings.gradle @@ -5,8 +5,8 @@ pluginManagement { mavenCentral() } plugins { - id 'com.android.application' version '8.1.1' - id 'com.android.library' version '8.1.1' + id 'com.android.application' version '8.1.4' + id 'com.android.library' version '8.1.4' id 'org.jetbrains.kotlin.android' version '1.9.0' id 'com.google.devtools.ksp' version '1.9.0-1.0.13' apply false }