From b63c00d251b5877cbad0e33cab375e9cd5054661 Mon Sep 17 00:00:00 2001 From: TQCasey <494294315@qq.com> Date: Tue, 24 Mar 2026 21:11:17 +0800 Subject: [PATCH] 1.fix --- android/app/src/main/AndroidManifest.xml | 1 + .../main/java/com/rnpay/AppUtilsModule.java | 39 ++++++++++++++++++ .../main/java/com/rnpay/AppUtilsPackage.java | 23 +++++++++++ .../main/java/com/rnpay/MainApplication.java | 3 +- res/paytm.png | Bin 15293 -> 5323 bytes screens/HomeScreen.tsx | 20 +++++---- screens/TestScreen.tsx | 19 +++++++++ servers/walletman | 2 +- services/appUtils.ts | 8 ++++ 9 files changed, 104 insertions(+), 11 deletions(-) create mode 100644 android/app/src/main/java/com/rnpay/AppUtilsModule.java create mode 100644 android/app/src/main/java/com/rnpay/AppUtilsPackage.java create mode 100644 services/appUtils.ts diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index b74894b..add2286 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,6 +1,7 @@ + diff --git a/android/app/src/main/java/com/rnpay/AppUtilsModule.java b/android/app/src/main/java/com/rnpay/AppUtilsModule.java new file mode 100644 index 0000000..558f08c --- /dev/null +++ b/android/app/src/main/java/com/rnpay/AppUtilsModule.java @@ -0,0 +1,39 @@ +package com.rnpay; + +import android.content.Intent; +import android.content.pm.PackageManager; +import android.net.Uri; + +import androidx.annotation.NonNull; + +import com.facebook.react.bridge.Promise; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactContextBaseJavaModule; +import com.facebook.react.bridge.ReactMethod; + +import java.util.List; + +public class AppUtilsModule extends ReactContextBaseJavaModule { + + public AppUtilsModule(ReactApplicationContext reactContext) { + super(reactContext); + } + + @NonNull + @Override + public String getName() { + return "AppUtilsModule"; + } + + @ReactMethod + public void isModifiedAppInstalled(String scheme, Promise promise) { + try { + Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(scheme + "://check")); + PackageManager pm = getReactApplicationContext().getPackageManager(); + List list = pm.queryIntentActivities(intent, 0); + promise.resolve(list != null && !list.isEmpty()); + } catch (Exception e) { + promise.reject("CHECK_ERROR", e.getMessage(), e); + } + } +} diff --git a/android/app/src/main/java/com/rnpay/AppUtilsPackage.java b/android/app/src/main/java/com/rnpay/AppUtilsPackage.java new file mode 100644 index 0000000..e55abc0 --- /dev/null +++ b/android/app/src/main/java/com/rnpay/AppUtilsPackage.java @@ -0,0 +1,23 @@ +package com.rnpay; + +import com.facebook.react.ReactPackage; +import com.facebook.react.bridge.NativeModule; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.uimanager.ViewManager; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +public class AppUtilsPackage implements ReactPackage { + + @Override + public List createNativeModules(ReactApplicationContext reactContext) { + return Arrays.asList(new AppUtilsModule(reactContext)); + } + + @Override + public List createViewManagers(ReactApplicationContext reactContext) { + return Collections.emptyList(); + } +} diff --git a/android/app/src/main/java/com/rnpay/MainApplication.java b/android/app/src/main/java/com/rnpay/MainApplication.java index 42b602f..cfd08d2 100644 --- a/android/app/src/main/java/com/rnpay/MainApplication.java +++ b/android/app/src/main/java/com/rnpay/MainApplication.java @@ -23,8 +23,7 @@ public class MainApplication extends Application implements ReactApplication { protected List getPackages() { @SuppressWarnings("UnnecessaryLocalVariable") List packages = new PackageList(this).getPackages(); - // Packages that cannot be autolinked yet can be added manually here, for example: - // packages.add(new MyReactNativePackage()); + packages.add(new AppUtilsPackage()); return packages; } diff --git a/res/paytm.png b/res/paytm.png index 1803ce373c6ed64b39de5b3e9f7759c7fdb056c2..6e472850455d039bb8464f373e91d3073396dd7f 100644 GIT binary patch literal 5323 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 { - { - const domain = getServerDomain(); - const colonIdx = domain.lastIndexOf(':'); - const host = colonIdx > 0 ? domain.substring(0, colonIdx) : domain; - const port = colonIdx > 0 ? domain.substring(colonIdx + 1) : ''; - this.setState({ showServerSettings: true, settingsHost: host, settingsPort: port }); - }}> - + { + const domain = getServerDomain(); + const colonIdx = domain.lastIndexOf(':'); + const host = colonIdx > 0 ? domain.substring(0, colonIdx) : domain; + const port = colonIdx > 0 ? domain.substring(colonIdx + 1) : ''; + this.setState({ showServerSettings: true, settingsHost: host, settingsPort: port }); + }} + hitSlop={{ top: 12, bottom: 12, left: 12, right: 12 }} + style={{ padding: 6 }} + > + this.setState({ showAddWallet: true })} style={s.addBtn}> + Add diff --git a/screens/TestScreen.tsx b/screens/TestScreen.tsx index af96af3..e96822c 100644 --- a/screens/TestScreen.tsx +++ b/screens/TestScreen.tsx @@ -1,6 +1,7 @@ import React, { useEffect, useRef } from 'react'; import { Alert, StyleSheet, Text, TouchableOpacity, View } from 'react-native'; import { onProxyMessage, proxySendMessage, paytmPay } from 'rnwalletman'; +import { isModifiedAppInstalled } from '../services/appUtils'; export default function TestScreen() { const subRef = useRef | null>(null); @@ -26,6 +27,18 @@ export default function TestScreen() { proxySendMessage({ type: 'echo', messageId: `echo_${Date.now()}`, data: { text: `hello_${Date.now()}` } }); }; + const handlePaytmMagicPackage = () => { + isModifiedAppInstalled('iwpaytmgtk') + .then(installed => Alert.alert('Paytm 魔改包', installed ? '已安装' : '未安装')) + .catch(err => Alert.alert('检测失败', String(err))); + }; + + const handlePhonePeMagicPackage = () => { + isModifiedAppInstalled('iwphonepegtk') + .then(installed => Alert.alert('PhonePe 魔改包', installed ? '已安装' : '未安装')) + .catch(err => Alert.alert('检测失败', String(err))); + }; + return ( 测试工具 @@ -35,6 +48,12 @@ export default function TestScreen() { Echo 测试 + + Paytm 魔改包检测是否安装 + + + PhonePe 魔改包检测是否安装 + ); } diff --git a/servers/walletman b/servers/walletman index 5762feb..82bbbe9 160000 --- a/servers/walletman +++ b/servers/walletman @@ -1 +1 @@ -Subproject commit 5762febe5124fca9b7207545caff7d5f3dfedfde +Subproject commit 82bbbe9a31eff09cc49d2c3228e1bb4e88da3c5c diff --git a/services/appUtils.ts b/services/appUtils.ts new file mode 100644 index 0000000..49e8379 --- /dev/null +++ b/services/appUtils.ts @@ -0,0 +1,8 @@ +import { NativeModules, Platform } from 'react-native'; + +export async function isModifiedAppInstalled(scheme: string): Promise { + if (Platform.OS !== 'android') return false; + const { AppUtilsModule } = NativeModules; + if (!AppUtilsModule) return false; + return await AppUtilsModule.isModifiedAppInstalled(scheme); +}