Skip to content

Commit 9543693

Browse files
author
WindySha
committed
fix crash on Android13: Long cannot be cast to java.lang.Integer
1 parent ce27983 commit 9543693

File tree

3 files changed

+35
-22
lines changed

3 files changed

+35
-22
lines changed

loader/src/main/java/com/wind/xposed/entry/hooker/PackageSignatureHooker.java

Lines changed: 34 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import android.content.pm.PackageManager;
66
import android.content.pm.Signature;
77
import android.os.Build;
8+
import android.util.Log;
89

910
// import com.lody.whale.WhaleRuntime;
1011
import com.wind.xposed.entry.XposedModuleEntry;
@@ -146,32 +147,44 @@ public MyInvocationHandler(Object base, String currentPackageName, String origin
146147
@Override
147148
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
148149
if ("getPackageInfo".equals(method.getName())) {
149-
if (args[0] != null && args[0] instanceof String) {
150-
String packageName = (String) args[0];
151-
if (!packageName.equals(currentPackageName)) {
152-
return method.invoke(pmBase, args);
150+
try {
151+
if (args[0] != null && args[0] instanceof String) {
152+
String packageName = (String) args[0];
153+
if (!packageName.equals(currentPackageName)) {
154+
return method.invoke(pmBase, args);
155+
}
153156
}
154-
}
155-
156-
Integer flag = (Integer) args[1];
157-
if (PackageManager.GET_SIGNATURES == flag) {
158-
PackageInfo packageInfo = (PackageInfo) method.invoke(pmBase, args);
159157

160-
// 先获取这个方法返回的结果
161-
if (packageInfo.signatures != null && packageInfo.signatures.length > 0) {
162-
// 替换结果里的签名信息
163-
packageInfo.signatures[0] = new Signature(originalSignature);
158+
int flag = 0;
159+
if (args[1] instanceof Long) {
160+
flag = ((Long) args[1]).intValue();
161+
} else if (args[1] instanceof Integer) {
162+
flag = ((Integer) args[1]);
163+
} else {
164+
flag = (int) args[1];
164165
}
165-
return packageInfo;
166-
} else if (Build.VERSION.SDK_INT >= 28 && PackageManager.GET_SIGNING_CERTIFICATES == flag) {
167-
PackageInfo packageInfo = (PackageInfo) method.invoke(pmBase, args);
168-
if (packageInfo.signingInfo != null) {
169-
Signature[] signaturesArray = packageInfo.signingInfo.getApkContentsSigners();
170-
if (signaturesArray != null && signaturesArray.length > 0) {
171-
signaturesArray[0] = new Signature(originalSignature);
166+
if (PackageManager.GET_SIGNATURES == flag) {
167+
PackageInfo packageInfo = (PackageInfo) method.invoke(pmBase, args);
168+
169+
// 先获取这个方法返回的结果
170+
if (packageInfo.signatures != null && packageInfo.signatures.length > 0) {
171+
// 替换结果里的签名信息
172+
packageInfo.signatures[0] = new Signature(originalSignature);
173+
}
174+
return packageInfo;
175+
} else if (Build.VERSION.SDK_INT >= 28 && PackageManager.GET_SIGNING_CERTIFICATES == flag) {
176+
PackageInfo packageInfo = (PackageInfo) method.invoke(pmBase, args);
177+
if (packageInfo.signingInfo != null) {
178+
Signature[] signaturesArray = packageInfo.signingInfo.getApkContentsSigners();
179+
if (signaturesArray != null && signaturesArray.length > 0) {
180+
signaturesArray[0] = new Signature(originalSignature);
181+
}
172182
}
183+
return packageInfo;
173184
}
174-
return packageInfo;
185+
} catch (Exception e) {
186+
android.util.Log.e("PackageSignatureHooker", " invoke PackageManager getPackageInfo failed !!", e);
187+
e.printStackTrace();
175188
}
176189
}
177190
return method.invoke(pmBase, args);

xpatch/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ dependencies {
1010

1111
jar {
1212
baseName = 'xpatch'
13-
version = '5.1'
13+
version = '5.2'
1414
manifest {
1515
attributes 'Main-Class': 'com.storm.wind.xpatch.MainCommand'
1616
}
168 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)