Commit 9cac612c authored by mengcuiguang's avatar mengcuiguang

代码优化

parent 715a507f
...@@ -32,10 +32,10 @@ android { ...@@ -32,10 +32,10 @@ android {
} }
dependencies { dependencies {
// implementation fileTree(dir: 'libs', include: ['*.jar','*.aar']) implementation fileTree(dir: 'libs', include: ['*.jar','*.aar'])
implementation fileTree(dir: 'libs', include: ['*.jar']) // implementation fileTree(dir: 'libs', include: ['*.jar'])
api 'com.alipay.sdk:alipaysdk-android:+@aar' // api 'com.alipay.sdk:alipaysdk-android:+@aar'
implementation 'androidx.core:core-ktx:1.3.2' implementation 'androidx.core:core-ktx:1.3.2'
implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'com.google.android.material:material:1.3.0' implementation 'com.google.android.material:material:1.3.0'
......
package com.jobo.content;
import android.annotation.SuppressLint;
import android.content.ComponentName;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.ChangedPackages;
import android.content.pm.FeatureInfo;
import android.content.pm.InstrumentationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageInstaller;
import android.content.pm.PackageManager;
import android.content.pm.PermissionGroupInfo;
import android.content.pm.PermissionInfo;
import android.content.pm.ProviderInfo;
import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
import android.content.pm.SharedLibraryInfo;
import android.content.pm.VersionedPackage;
import android.content.res.Resources;
import android.content.res.XmlResourceParser;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.UserHandle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import java.util.List;
@SuppressWarnings({"deprecation", "SpellCheckingInspection"})
@SuppressLint("NewApi")
public class AbsPackageManager extends PackageManager {
private final PackageManager pm;
public AbsPackageManager(PackageManager basePm) {
this.pm = basePm;
}
@Override
public PackageInfo getPackageInfo(@NonNull String packageName, int flags) throws NameNotFoundException {
return pm.getPackageInfo(packageName, flags);
}
@RequiresApi(api = Build.VERSION_CODES.O)
@Override
public PackageInfo getPackageInfo(@NonNull VersionedPackage versionedPackage, int flags) throws NameNotFoundException {
return pm.getPackageInfo(versionedPackage, flags);
}
@Override
public String[] currentToCanonicalPackageNames(@NonNull String[] packageNames) {
return pm.currentToCanonicalPackageNames(packageNames);
}
@Override
public String[] canonicalToCurrentPackageNames(@NonNull String[] packageNames) {
return pm.canonicalToCurrentPackageNames(packageNames);
}
@Nullable
@Override
public Intent getLaunchIntentForPackage(@NonNull String packageName) {
return pm.getLaunchIntentForPackage(packageName);
}
@Nullable
@Override
public Intent getLeanbackLaunchIntentForPackage(@NonNull String packageName) {
return pm.getLeanbackLaunchIntentForPackage(packageName);
}
@Override
public int[] getPackageGids(@NonNull String packageName) throws NameNotFoundException {
return pm.getPackageGids(packageName);
}
@RequiresApi(api = Build.VERSION_CODES.N)
@Override
public int[] getPackageGids(@NonNull String packageName, int flags) throws NameNotFoundException {
return pm.getPackageGids(packageName, flags);
}
@RequiresApi(api = Build.VERSION_CODES.N)
@Override
public int getPackageUid(@NonNull String packageName, int flags) throws NameNotFoundException {
return pm.getPackageUid(packageName, flags);
}
@Override
public PermissionInfo getPermissionInfo(@NonNull String permissionName, int flags) throws NameNotFoundException {
return pm.getPermissionInfo(permissionName, flags);
}
@NonNull
@Override
public List<PermissionInfo> queryPermissionsByGroup(@NonNull String permissionGroup, int flags) throws NameNotFoundException {
return pm.queryPermissionsByGroup(permissionGroup, flags);
}
@NonNull
@Override
public PermissionGroupInfo getPermissionGroupInfo(@NonNull String permissionName, int flags) throws NameNotFoundException {
return pm.getPermissionGroupInfo(permissionName, flags);
}
@NonNull
@Override
public List<PermissionGroupInfo> getAllPermissionGroups(int flags) {
return pm.getAllPermissionGroups(flags);
}
@NonNull
@Override
public ApplicationInfo getApplicationInfo(@NonNull String packageName, int flags) throws NameNotFoundException {
return pm.getApplicationInfo(packageName, flags);
}
@NonNull
@Override
public ActivityInfo getActivityInfo(@NonNull ComponentName component, int flags) throws NameNotFoundException {
return pm.getActivityInfo(component, flags);
}
@NonNull
@Override
public ActivityInfo getReceiverInfo(@NonNull ComponentName component, int flags) throws NameNotFoundException {
return pm.getReceiverInfo(component, flags);
}
@NonNull
@Override
public ServiceInfo getServiceInfo(@NonNull ComponentName component, int flags) throws NameNotFoundException {
return pm.getServiceInfo(component, flags);
}
@NonNull
@Override
public ProviderInfo getProviderInfo(@NonNull ComponentName component, int flags) throws NameNotFoundException {
return pm.getProviderInfo(component, flags);
}
@NonNull
@Override
public List<PackageInfo> getInstalledPackages(int flags) {
return pm.getInstalledPackages(flags);
}
@NonNull
@Override
public List<PackageInfo> getPackagesHoldingPermissions(@NonNull String[] permissions, int flags) {
return pm.getPackagesHoldingPermissions(permissions, flags);
}
@Override
public int checkPermission(@NonNull String permissionName, @NonNull String packageName) {
return pm.checkPermission(permissionName, packageName);
}
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public boolean isPermissionRevokedByPolicy(@NonNull String permissionName, @NonNull String packageName) {
return pm.isPermissionRevokedByPolicy(permissionName, packageName);
}
@Override
public boolean addPermission(@NonNull PermissionInfo info) {
return pm.addPermission(info);
}
@Override
public boolean addPermissionAsync(@NonNull PermissionInfo info) {
return pm.addPermissionAsync(info);
}
@Override
public void removePermission(@NonNull String permissionName) {
pm.removePermission(permissionName);
}
@Override
public int checkSignatures(@NonNull String packageName1, @NonNull String packageName2) {
return pm.checkSignatures(packageName1, packageName2);
}
@Override
public int checkSignatures(int uid1, int uid2) {
return pm.checkSignatures(uid1, uid2);
}
@Nullable
@Override
public String[] getPackagesForUid(int uid) {
return pm.getPackagesForUid(uid);
}
@Nullable
@Override
public String getNameForUid(int uid) {
return pm.getNameForUid(uid);
}
@NonNull
@Override
public List<ApplicationInfo> getInstalledApplications(int flags) {
return pm.getInstalledApplications(flags);
}
@RequiresApi(api = Build.VERSION_CODES.O)
@Override
public boolean isInstantApp() {
return pm.isInstantApp();
}
@RequiresApi(api = Build.VERSION_CODES.O)
@Override
public boolean isInstantApp(@NonNull String packageName) {
return pm.isInstantApp(packageName);
}
@RequiresApi(api = Build.VERSION_CODES.O)
@Override
public int getInstantAppCookieMaxBytes() {
return pm.getInstantAppCookieMaxBytes();
}
@RequiresApi(api = Build.VERSION_CODES.O)
@NonNull
@Override
public byte[] getInstantAppCookie() {
return pm.getInstantAppCookie();
}
@RequiresApi(api = Build.VERSION_CODES.O)
@Override
public void clearInstantAppCookie() {
pm.clearInstantAppCookie();
}
@RequiresApi(api = Build.VERSION_CODES.O)
@Override
public void updateInstantAppCookie(@Nullable byte[] cookie) {
pm.updateInstantAppCookie(cookie);
}
@Nullable
@Override
public String[] getSystemSharedLibraryNames() {
return pm.getSystemSharedLibraryNames();
}
@RequiresApi(api = Build.VERSION_CODES.O)
@NonNull
@Override
public List<SharedLibraryInfo> getSharedLibraries(int flags) {
return pm.getSharedLibraries(flags);
}
@RequiresApi(api = Build.VERSION_CODES.O)
@Nullable
@Override
public ChangedPackages getChangedPackages(int sequenceNumber) {
return pm.getChangedPackages(sequenceNumber);
}
@NonNull
@Override
public FeatureInfo[] getSystemAvailableFeatures() {
return pm.getSystemAvailableFeatures();
}
@Override
public boolean hasSystemFeature(@NonNull String featureName) {
return pm.hasSystemFeature(featureName);
}
@RequiresApi(api = Build.VERSION_CODES.N)
@Override
public boolean hasSystemFeature(@NonNull String featureName, int version) {
return pm.hasSystemFeature(featureName, version);
}
@Nullable
@Override
public ResolveInfo resolveActivity(@NonNull Intent intent, int flags) {
return pm.resolveActivity(intent, flags);
}
@NonNull
@Override
public List<ResolveInfo> queryIntentActivities(@NonNull Intent intent, int flags) {
return pm.queryIntentActivities(intent, flags);
}
@NonNull
@Override
public List<ResolveInfo> queryIntentActivityOptions(@Nullable ComponentName caller, @Nullable Intent[] specifics, @NonNull Intent intent, int flags) {
return pm.queryIntentActivityOptions(caller, specifics, intent, flags);
}
@NonNull
@Override
public List<ResolveInfo> queryBroadcastReceivers(@NonNull Intent intent, int flags) {
return pm.queryBroadcastReceivers(intent, flags);
}
@Nullable
@Override
public ResolveInfo resolveService(@NonNull Intent intent, int flags) {
return pm.resolveService(intent, flags);
}
@NonNull
@Override
public List<ResolveInfo> queryIntentServices(@NonNull Intent intent, int flags) {
return pm.queryIntentServices(intent, flags);
}
@NonNull
@Override
public List<ResolveInfo> queryIntentContentProviders(@NonNull Intent intent, int flags) {
return pm.queryIntentContentProviders(intent, flags);
}
@Nullable
@Override
public ProviderInfo resolveContentProvider(@NonNull String authority, int flags) {
// if (AliveConfig.DEBUG) Log.v(TAG, "resolveContentProvider() called with: authority = [" + authority + "], flags = [" + flags + "]");
return pm.resolveContentProvider(authority, flags);
}
@NonNull
@Override
public List<ProviderInfo> queryContentProviders(@Nullable String processName, int uid, int flags) {
// if (AliveConfig.DEBUG) Log.v(TAG, "queryContentProviders() called with: processName = [" + processName + "], uid = [" + uid + "], flags = [" + flags + "]");
return pm.queryContentProviders(processName, uid, flags);
}
@NonNull
@Override
public InstrumentationInfo getInstrumentationInfo(@NonNull ComponentName className, int flags) throws NameNotFoundException {
return pm.getInstrumentationInfo(className, flags);
}
@NonNull
@Override
public List<InstrumentationInfo> queryInstrumentation(@NonNull String targetPackage, int flags) {
return pm.queryInstrumentation(targetPackage, flags);
}
@Nullable
@Override
public Drawable getDrawable(@NonNull String packageName, int resid, @Nullable ApplicationInfo appInfo) {
// if (AliveConfig.DEBUG) Log.v(TAG, "getDrawable() called with: packageName = [" + packageName + "], resid = [" + resid + "], appInfo = [" + appInfo + "]");
return pm.getDrawable(packageName, resid, appInfo);
}
@NonNull
@Override
public Drawable getActivityIcon(@NonNull ComponentName activityName) throws NameNotFoundException {
return pm.getActivityIcon(activityName);
}
@NonNull
@Override
public Drawable getActivityIcon(@NonNull Intent intent) throws NameNotFoundException {
return pm.getActivityIcon(intent);
}
@Nullable
@Override
public Drawable getActivityBanner(@NonNull ComponentName activityName) throws NameNotFoundException {
return pm.getActivityBanner(activityName);
}
@Nullable
@Override
public Drawable getActivityBanner(@NonNull Intent intent) throws NameNotFoundException {
return pm.getActivityBanner(intent);
}
@NonNull
@Override
public Drawable getDefaultActivityIcon() {
return pm.getDefaultActivityIcon();
}
@NonNull
@Override
public Drawable getApplicationIcon(@NonNull ApplicationInfo info) {
return pm.getApplicationIcon(info);
}
@NonNull
@Override
public Drawable getApplicationIcon(@NonNull String packageName) throws NameNotFoundException {
return pm.getApplicationIcon(packageName);
}
@Nullable
@Override
public Drawable getApplicationBanner(@NonNull ApplicationInfo info) {
return pm.getApplicationBanner(info);
}
@Nullable
@Override
public Drawable getApplicationBanner(@NonNull String packageName) throws NameNotFoundException {
return pm.getApplicationBanner(packageName);
}
@Nullable
@Override
public Drawable getActivityLogo(@NonNull ComponentName activityName) throws NameNotFoundException {
return pm.getActivityLogo(activityName);
}
@Nullable
@Override
public Drawable getActivityLogo(@NonNull Intent intent) throws NameNotFoundException {
return pm.getActivityLogo(intent);
}
@Nullable
@Override
public Drawable getApplicationLogo(@NonNull ApplicationInfo info) {
return pm.getApplicationBanner(info);
}
@Nullable
@Override
public Drawable getApplicationLogo(@NonNull String packageName) throws NameNotFoundException {
return pm.getApplicationLogo(packageName);
}
@NonNull
@Override
public Drawable getUserBadgedIcon(@NonNull Drawable drawable, @NonNull UserHandle user) {
return pm.getUserBadgedIcon(drawable, user);
}
@NonNull
@Override
public Drawable getUserBadgedDrawableForDensity(@NonNull Drawable drawable, @NonNull UserHandle user, @Nullable Rect badgeLocation, int badgeDensity) {
return pm.getUserBadgedDrawableForDensity(drawable, user, badgeLocation, badgeDensity);
}
@NonNull
@Override
public CharSequence getUserBadgedLabel(@NonNull CharSequence label, @NonNull UserHandle user) {
return pm.getUserBadgedLabel(label, user);
}
@Nullable
@Override
public CharSequence getText(@NonNull String packageName, int resid, @Nullable ApplicationInfo appInfo) {
// if (AliveConfig.DEBUG) Log.v(TAG, "getText() called with: packageName = [" + packageName + "], resid = [" + resid + "], appInfo = [" + appInfo + "]");
return pm.getText(packageName, resid, appInfo);
}
@Nullable
@Override
public XmlResourceParser getXml(@NonNull String packageName, int resid, @Nullable ApplicationInfo appInfo) {
return pm.getXml(packageName, resid, appInfo);
}
@NonNull
@Override
public CharSequence getApplicationLabel(@NonNull ApplicationInfo info) {
return pm.getApplicationLabel(info);
}
@NonNull
@Override
public Resources getResourcesForActivity(@NonNull ComponentName activityName) throws NameNotFoundException {
return pm.getResourcesForActivity(activityName);
}
@NonNull
@Override
public Resources getResourcesForApplication(@NonNull ApplicationInfo app) throws NameNotFoundException {
return pm.getResourcesForApplication(app);
}
@NonNull
@Override
public Resources getResourcesForApplication(@NonNull String packageName) throws NameNotFoundException {
return pm.getResourcesForApplication(packageName);
}
@Override
public void verifyPendingInstall(int id, int verificationCode) {
pm.verifyPendingInstall(id, verificationCode);
}
@Override
public void extendVerificationTimeout(int id, int verificationCodeAtTimeout, long millisecondsToDelay) {
pm.extendVerificationTimeout(id, verificationCodeAtTimeout, millisecondsToDelay);
}
@Override
public void setInstallerPackageName(@NonNull String targetPackage, @Nullable String installerPackageName) {
// if (AliveConfig.DEBUG) Log.v(TAG, "setInstallerPackageName() called with: targetPackage = [" + targetPackage + "], installerPackageName = [" + installerPackageName + "]");
pm.setInstallerPackageName(targetPackage, installerPackageName);
}
@Nullable
@Override
public String getInstallerPackageName(@NonNull String packageName) {
// if (AliveConfig.DEBUG) Log.v(TAG, "getInstallerPackageName() called with: packageName = [" + packageName + "]");
return pm.getInstallerPackageName(packageName);
}
@Override
public void addPackageToPreferred(@NonNull String packageName) {
pm.addPackageToPreferred(packageName);
}
@Override
public void removePackageFromPreferred(@NonNull String packageName) {
pm.removePackageFromPreferred(packageName);
}
@NonNull
@Override
public List<PackageInfo> getPreferredPackages(int flags) {
return pm.getPreferredPackages(flags);
}
@Override
public void addPreferredActivity(@NonNull IntentFilter filter, int match, @Nullable ComponentName[] set, @NonNull ComponentName activity) {
pm.addPreferredActivity(filter, match, set, activity);
}
@Override
public void clearPackagePreferredActivities(@NonNull String packageName) {
pm.clearPackagePreferredActivities(packageName);
}
@Override
public int getPreferredActivities(@NonNull List<IntentFilter> outFilters, @NonNull List<ComponentName> outActivities, @Nullable String packageName) {
return pm.getPreferredActivities(outFilters, outActivities, packageName);
}
@Override
public void setComponentEnabledSetting(@NonNull ComponentName componentName, int newState, int flags) {
pm.setComponentEnabledSetting(componentName, newState , flags);
}
@Override
public int getComponentEnabledSetting(@NonNull ComponentName componentName) {
return pm.getComponentEnabledSetting(componentName);
}
@Override
public void setApplicationEnabledSetting(@NonNull String packageName, int newState, int flags) {
pm.setApplicationEnabledSetting(packageName, newState, flags);
}
@Override
public int getApplicationEnabledSetting(@NonNull String packageName) {
return pm.getApplicationEnabledSetting(packageName);
}
@Override
public boolean isSafeMode() {
return pm.isSafeMode();
}
@RequiresApi(api = Build.VERSION_CODES.O)
@Override
public void setApplicationCategoryHint(@NonNull String packageName, int categoryHint) {
pm.setApplicationCategoryHint(packageName, categoryHint);
}
@NonNull
@Override
public PackageInstaller getPackageInstaller() {
return pm.getPackageInstaller();
}
@RequiresApi(api = Build.VERSION_CODES.O)
@Override
public boolean canRequestPackageInstalls() {
return pm.canRequestPackageInstalls();
}
}
package com.jobo.content;
import android.content.ContentResolver;
import android.content.Context;
import android.content.ContextWrapper;
import android.content.SharedPreferences;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.Signature;
import android.util.Log;
import java.util.Arrays;
class ApplicationContext extends ContextWrapper {
private static final String TAG = ApplicationContext.class.getSimpleName();
final Context base;
final String fakePackageName;
final String fakeLabel;
final String fakeVersionName;
final int fakeVersionCode;
final Signature fakeSignature;
private final PackageManager2 fakePm;
private final String realPackageName;
/**
* 这个奇怪的计数器是用来和C内部的各种检查对抗的,避免出现启动不了的问题,只有第三次调用的时候才需要返回真包名
*/
private int hackIntoCCodeHelperOfCounter = 0;
ApplicationContext(
Context base,
String fakePackageName,
String fakeLabel,
String fakeVersionName,
int fakeVersionCode,
Signature fakeSignature
) {
super(base);
this.base = base;
this.realPackageName = base.getPackageName();
this.fakePackageName = fakePackageName;
this.fakeLabel = fakeLabel;
this.fakeVersionName = fakeVersionName;
this.fakeVersionCode = fakeVersionCode;
this.fakeSignature = fakeSignature;
this.fakePm = new PackageManager2(this, base);
}
@Override
public String getPackageName() {
++hackIntoCCodeHelperOfCounter;
// 这句不是为了DEBUG,千万别删除!!!
RuntimeException runtimeException = new RuntimeException();
if (BuildConfig.IS_DEBUG)
Log.d(TAG, "getPackageName() STACK TRACE! called " + Arrays.toString(runtimeException.getStackTrace()));
/* 破解无奈之举
* 1. 如果是普通情况的getPackageName(),比如从C代码直接调用过来,其实就是判断包名,需要用假的
* 2. 如果是从Intent(Context, Class)调用过来,会调用ComponentName(String packageName, String componentName),此处应该使用真包名
*/
String result = fakePackageName;
StackTraceElement[] stackTrace = runtimeException.getStackTrace();
if (stackTrace.length > 1 &&
(containsIgnoreCase(stackTrace[1].getMethodName(), "component")
|| containsIgnoreCase(stackTrace[1].getClassName(), "component")
|| containsIgnoreCase(stackTrace[1].getClassName(), "intent"))) {
if (BuildConfig.IS_DEBUG)
Log.w(TAG, "getPackageName: MATCH!! on counter = " + hackIntoCCodeHelperOfCounter);
result = realPackageName;
}
if (BuildConfig.IS_DEBUG) Log.i(TAG, "getPackageName() called counter = " + hackIntoCCodeHelperOfCounter + " RESULT = " + result, new RuntimeException());
return result;
}
@Override
public PackageManager getPackageManager() {
if (BuildConfig.IS_DEBUG) Log.d(TAG, "getPackageManager() called", new RuntimeException());
return fakePm;
}
@Override public ApplicationInfo getApplicationInfo() {
if (BuildConfig.IS_DEBUG) Log.d(TAG, "getApplicationInfo() called", new RuntimeException());
return super.getApplicationInfo();
}
@Override public ContentResolver getContentResolver() {
if (BuildConfig.IS_DEBUG) Log.d(TAG, "getContentResolver() called", new RuntimeException());
return super.getContentResolver();
}
@Override public Context getApplicationContext() {
return this;
}
@Override public SharedPreferences getSharedPreferences(String name, int mode) {
if (BuildConfig.IS_DEBUG)
Log.d(TAG, "getSharedPreferences() called with: name = [" + name + "], mode = [" + mode + "]");
return super.getSharedPreferences(name, mode);
}
public static boolean containsIgnoreCase(String origin, String sub) {
return origin.toLowerCase().contains(sub.toLowerCase());
}
}
package com.jobo.content;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.Signature;
import android.util.Log;
public class Context {
private static String pkgName = "com.duben.xixiplaylet";
private static String pkgSign = "308203633082024ba0030201020204181c2ccb300d06092a864886f70d01010b05003062310b3009060355040613027a68310f300d06035504081306636a6474627a310f300d06035504071306636a6474627a310f300d060355040a1306636a6474627a310f300d060355040b1306636a6474627a310f300d06035504031306636a6474627a301e170d3233303331343036343631355a170d3438303330373036343631355a3062310b3009060355040613027a68310f300d06035504081306636a6474627a310f300d06035504071306636a6474627a310f300d060355040a1306636a6474627a310f300d060355040b1306636a6474627a310f300d06035504031306636a6474627a30820122300d06092a864886f70d01010105000382010f003082010a02820101008054bc7f8f0781be915f0da76eb2ded42e382028c7b146894b0fccd0b4fbb306c62b2d050f89e07e0c66b737935c655669f7dec88e51577d778b080cddee5aa90d686509c505f07bdba4bc4020b6fde1372c68602e0de1e7a6bcc1bebfe93f625a3802c6b27bb91532590ff3b2d7142f2f97d8d8d547719fe7bf6a0f0dd74774ac5c2fe6b297573b257e82863a23a8ccd04ac8cdc8fb3c387f6d55369ba42ff835b5c6995bb335536fddee08b69ef5652fc53816228c02e8c669003fed1d07416b46bb86aaaa1300e89767535ff3fa33eee54bad9c50bc69c4489a8406e72ebe8df62353536c524b4d2936de3418e89af954f7912432f01492a861ea08a72c690203010001a321301f301d0603551d0e04160414a98babd6de3e6ae067f9f80135dbca23156feacc300d06092a864886f70d01010b050003820101000e3ace706c29ec48b98d88e042986b182d54f0b704b3e0510e0670f75c380bbdc1ddcc3772d4c569138a070a43b078b6ce14bdd79da15372018679936bca96597da08438cdf133e7a08fd52dfa9890548ed9905044e4cdaad1abaa31cf7741462b68bb1e42ae063e6020b5ec53974d835cf8f79ac29dffe504e8b524564c53a971193d48a782992dc91ddbfb8cb4f36220f1f25692054a4ddf343868142d36e7e192bee6cc7b95dd8996d99b116cd8755aeed2abdb8453670bae7a8c0c0a2324ad25534cacc0934b2ec33b073fdd4fd7bf875bd9a36ed79fbced0cbcecfe0d3cbf5c339fb12f7f82ac179328e47b31995d5094819d6f3c66e8a083cff093d37b";
public static PackageManager getPackageManager(android.content.Context context) {
if (BuildConfig.IS_DEBUG) {
Log.i("kzhu", "11111:getPackageManager执行");
}
return new PackageManager2(createContext(context), context);
}
public static String getPackageName(android.content.Context context){
if (BuildConfig.IS_DEBUG) {
Log.i("kzhu", "11111:getPackageName执行");
}
return pkgName;
}
private static ApplicationContext createContext(android.content.Context context){
return new ApplicationContext(context, getPackageName(context), "", getVersionName(context),
getVersionCode(context), new Signature(pkgSign));
}
private static int getVersionCode(android.content.Context context) {
try {
PackageManager packageManager = context.getPackageManager();
PackageInfo packageInfo = packageManager.getPackageInfo(context.getPackageName(), 0);
return packageInfo.versionCode;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return 0;
}
private static String getVersionName(android.content.Context context) {
try {
PackageManager packageManager = context.getPackageManager();
PackageInfo packageInfo = packageManager.getPackageInfo(context.getPackageName(), 0);
return packageInfo.versionName;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return "";
}
public static void setPkgName(String name) {
pkgName = name;
}
public static void setPkgSign(String sign) {
pkgSign = sign;
}
// @SuppressLint("PackageManagerGetSignatures")
// public static String getSignature(android.content.Context context) {
// try {
// String pkgName = getPackageName(context);
//// String pkgName = context.getPackageName();
// PackageManager manager = context.getPackageManager();
// PackageInfo packageInfo = manager.getPackageInfo(pkgName, PackageManager.GET_SIGNATURES);
// Signature[] signatures = packageInfo.signatures;
//// LogUtil.INSTANCE.i("签名:" + signatures[0].toByteArray());
// String s = signatures[0].toCharsString();
// LogUtil.i("签名:" + s);
// return signatures[0].toCharsString();
// } catch (Exception e) {
// return null;
// }
// }
}
package com.jobo.content;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.Signature;
import android.util.Log;
import org.jetbrains.annotations.NotNull;
class PackageManager2 extends AbsPackageManager {
private static final String TAG = "PackageManager2";
private final ApplicationContext appContextWrapper;
private final Context baseContext;
private final PackageManager basePm;
PackageManager2(ApplicationContext appContextWrapper,
Context baseContext) {
super(appContextWrapper.getPackageManager());
this.appContextWrapper = appContextWrapper;
this.baseContext = baseContext;
this.basePm = baseContext.getPackageManager();
}
@NotNull
@Override
public CharSequence getApplicationLabel(ApplicationInfo info) {
CharSequence result;
if (baseContext.getPackageName().equals(info.packageName)) {
result = appContextWrapper.fakeLabel;
} else {
result = basePm.getApplicationLabel(info);
}
if (BuildConfig.IS_DEBUG)
Log.v(TAG, "getApplicationLabel() returned: " +result, new RuntimeException());
return result;
}
@Override
public PackageInfo getPackageInfo(@NotNull String packageName, int flags)
throws NameNotFoundException {
if (BuildConfig.IS_DEBUG)
Log.v(
TAG,
"getPackageInfo11A() called with: packageName = [" + packageName + "], flags = [" + flags + "], appContextWrapper.fakePackageName = " + appContextWrapper.fakePackageName,
new RuntimeException()
);
if (appContextWrapper.fakePackageName.equals(packageName)) {
if (BuildConfig.IS_DEBUG) Log.e(TAG, "getPackageInfo: FAKING...");
PackageInfo result = basePm.getPackageInfo(baseContext.getPackageName(), flags);
result.packageName = appContextWrapper.fakePackageName;
result.versionName = appContextWrapper.fakeVersionName;
result.versionCode = appContextWrapper.fakeVersionCode;
result.signatures = new Signature[]{appContextWrapper.fakeSignature};
return result;
}
return basePm.getPackageInfo(packageName, flags);
}
@Override
public PackageInfo getPackageArchiveInfo(@NotNull String archiveFilePath, int flags) {
if (BuildConfig.IS_DEBUG) Log.v(
TAG,
"getPackageArchiveInfo() called with: archiveFilePath = [" + archiveFilePath + "], flags = [" + flags + "]",
new RuntimeException()
);
return basePm.getPackageArchiveInfo(archiveFilePath, flags);
}
@NotNull
@Override
public ApplicationInfo getApplicationInfo(@NotNull String packageName, int flags) throws NameNotFoundException {
if (BuildConfig.IS_DEBUG)
Log.d(TAG, "getApplicationInfo() called with: packageName = [" + packageName + "], flags = [" + flags + "]");
return super.getApplicationInfo(packageName, flags);
}
}
\ No newline at end of file
...@@ -228,7 +228,7 @@ dependencies { ...@@ -228,7 +228,7 @@ dependencies {
// 支付 // 支付
api project(':rxpay') api project(':rxpay')
api project(':wxpay') api project(':wxpay')
// api project(':alipay') api project(':alipay')
api project(':oaid') api project(':oaid')
implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.4' implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.4'
// bugly // bugly
......
...@@ -14,8 +14,8 @@ import com.airbnb.lottie.LottieCompositionFactory ...@@ -14,8 +14,8 @@ import com.airbnb.lottie.LottieCompositionFactory
import com.airbnb.lottie.LottieDrawable import com.airbnb.lottie.LottieDrawable
import com.daimajia.androidanimations.library.Techniques import com.daimajia.androidanimations.library.Techniques
import com.daimajia.androidanimations.library.YoYo import com.daimajia.androidanimations.library.YoYo
//import com.jobo.alipay.AliPay import com.jobo.alipay.AliPay
//import com.jobo.alipay.AlipayInfoImpl import com.jobo.alipay.AlipayInfoImpl
import com.jobo.rxpay.RxPay import com.jobo.rxpay.RxPay
import com.jobo.rxpay.callback.IPayCallback import com.jobo.rxpay.callback.IPayCallback
import com.jobo.wxpay.WXPay import com.jobo.wxpay.WXPay
...@@ -417,30 +417,30 @@ class VipActivity : BaseActivity(), VipView, View.OnClickListener, VipAdapter.On ...@@ -417,30 +417,30 @@ class VipActivity : BaseActivity(), VipView, View.OnClickListener, VipAdapter.On
} }
// //实例化支付宝支付策略 //实例化支付宝支付策略
// val aliPay = AliPay() val aliPay = AliPay()
// //构造支付宝订单实体。一般都是由服务端直接返回。 //构造支付宝订单实体。一般都是由服务端直接返回。
// val alipayInfoImpl = AlipayInfoImpl() val alipayInfoImpl = AlipayInfoImpl()
// alipayInfoImpl.setOrderInfo(wxParanBean.params.params) alipayInfoImpl.setOrderInfo(wxParanBean.params.params)
// //策略场景类调起支付方法开始支付,以及接收回调。 //策略场景类调起支付方法开始支付,以及接收回调。
// RxPay.pay(aliPay, this, alipayInfoImpl, object : IPayCallback { RxPay.pay(aliPay, this, alipayInfoImpl, object : IPayCallback {
// override fun success() { override fun success() {
// UserManager.getInstance().vipFlag = true UserManager.getInstance().vipFlag = true
// vipPresenter?.queryVipOrder(wxParanBean.tid.toString(), true) vipPresenter?.queryVipOrder(wxParanBean.tid.toString(), true)
// } }
//
// override fun failed(code: Int, message: String?) { override fun failed(code: Int, message: String?) {
// vipPresenter?.payError(code) vipPresenter?.payError(code)
// if (!TextUtils.isEmpty(message)) { if (!TextUtils.isEmpty(message)) {
// showToast(message) showToast(message)
// } }
// } }
//
// override fun cancel() { override fun cancel() {
// vipPresenter?.queryVipOrder(wxParanBean.tid.toString(), false) vipPresenter?.queryVipOrder(wxParanBean.tid.toString(), false)
//
// } }
// }) })
} }
/** /**
......
include ':app' include ':app'
include ':oaid' include ':oaid'
include ':rxpay' include ':rxpay'
//include ':alipay' include ':alipay'
include ':wxpay' include ':wxpay'
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment