Add interface to disable modules log

New method:
XposedBridge.log(String name, String text)
XposedBridge.log(String name, Throwable t)
This commit is contained in:
Jim Wu 2020-01-10 20:52:55 +08:00
parent 96185011cd
commit 2c5c5f8cc8
9 changed files with 62 additions and 22 deletions

View File

@ -23,6 +23,10 @@ public class BaseEdxpConfig implements EdxpConfig {
public boolean isResourcesHookEnabled() {
return ConfigManager.isResourcesHookEnabled();
}
@Override
public boolean isNoModuleLogEnabled() {
return ConfigManager.isNoModuleLogEnabled();
}
@Override
public boolean isBlackWhiteListMode() {

View File

@ -34,6 +34,8 @@ public class ConfigManager {
public static native boolean isDynamicModulesEnabled();
public static native boolean isNoModuleLogEnabled();
public static native boolean isResourcesHookEnabled();
public static native boolean isDeoptBootImageEnabled();

View File

@ -18,8 +18,7 @@ public class InstallerChooser {
Build.VERSION.SDK_INT >= Build.VERSION_CODES.N ? "/data/user_de/0/" : "/data/user/0/";
public static final String PRIMARY_INSTALLER_PACKAGE_NAME = "com.solohsu.android.edxp.manager";
public static final String SECONDARY_INSTALLER_PACKAGE_NAME = "org.meowcat.edxposed.manager";
public static final String PRIMARY_INSTALLER_PACKAGE_NAME = "org.meowcat.edxposed.manager";
public static final String LEGACY_INSTALLER_PACKAGE_NAME = "de.robv.android.xposed.installer";
public static String INSTALLER_PACKAGE_NAME;
@ -42,12 +41,6 @@ public class InstallerChooser {
Utils.logI("using " + PRIMARY_INSTALLER_PACKAGE_NAME + "as installer app");
return;
}
if (checkDataDirValid(dataBaseDir = DATA_DIR_PATH_PREFIX + SECONDARY_INSTALLER_PACKAGE_NAME + "/")) {
INSTALLER_PACKAGE_NAME = SECONDARY_INSTALLER_PACKAGE_NAME;
INSTALLER_DATA_BASE_DIR = dataBaseDir;
Utils.logI("using " + SECONDARY_INSTALLER_PACKAGE_NAME + "as installer app");
return;
}
if (checkDataDirValid(dataBaseDir = DATA_DIR_PATH_PREFIX + LEGACY_INSTALLER_PACKAGE_NAME + "/")) {
INSTALLER_PACKAGE_NAME = LEGACY_INSTALLER_PACKAGE_NAME;
INSTALLER_DATA_BASE_DIR = dataBaseDir;

View File

@ -145,7 +145,7 @@ public abstract class BaseRouter implements Router {
XposedHelpers.findAndHookMethod(OnePlusWorkAroundHooker.className,
classLoader, OnePlusWorkAroundHooker.methodName,
int.class, String.class, new OneplusWorkaround());
} catch (Throwable throwable) {
} catch (Throwable ignored) {
}
} else {
HookMain.doHookDefault(

View File

@ -30,11 +30,6 @@ namespace edxp {
LOGI("using installer %s", kPrimaryInstallerPkgName);
return kPrimaryInstallerPkgName;
}
data_test_path = data_path_prefix_ + kSecondaryInstallerPkgName;
if (access(data_test_path.c_str(), F_OK) == 0) {
LOGI("using installer %s", kSecondaryInstallerPkgName);
return kSecondaryInstallerPkgName;
}
data_test_path = data_path_prefix_ + kLegacyInstallerPkgName;
if (access(data_test_path.c_str(), F_OK) == 0) {
LOGI("using installer %s", kLegacyInstallerPkgName);
@ -87,14 +82,16 @@ namespace edxp {
black_white_list_enabled_ = access(GetConfigPath("blackwhitelist").c_str(), F_OK) == 0;
deopt_boot_image_enabled_ = access(GetConfigPath("deoptbootimage").c_str(), F_OK) == 0;
resources_hook_enabled_ = access(GetConfigPath("disable_resources").c_str(), F_OK) != 0;
no_module_log_enabled_ = access(GetConfigPath("disable_modules_log").c_str(), F_OK) == 0;
// use_white_list snapshot
use_white_list_snapshot_ = access(use_whitelist_path_.c_str(), F_OK) == 0;
LOGI("black/white list mode: %s, using whitelist: %s",
LOGI("application list mode: %s, using whitelist: %s",
BoolToString(black_white_list_enabled_), BoolToString(use_white_list_snapshot_));
LOGI("dynamic modules mode: %s", BoolToString(dynamic_modules_enabled_));
LOGI("resources hook: %s", BoolToString(resources_hook_enabled_));
LOGI("deopt boot image: %s", BoolToString(deopt_boot_image_enabled_));
LOGI("no module log: %s", BoolToString(no_module_log_enabled_));
if (black_white_list_enabled_) {
SnapshotBlackWhiteList();
}
@ -125,7 +122,6 @@ namespace edxp {
}
}
if (strcmp(package_name, kPrimaryInstallerPkgName) == 0
|| strcmp(package_name, kSecondaryInstallerPkgName) == 0
|| strcmp(package_name, kLegacyInstallerPkgName) == 0) {
// always hook installer apps
return true;
@ -164,6 +160,10 @@ namespace edxp {
return dynamic_modules_enabled_;
}
ALWAYS_INLINE bool ConfigManager::IsNoModuleLogEnabled() const {
return no_module_log_enabled_;
}
ALWAYS_INLINE bool ConfigManager::IsResourcesHookEnabled() const {
return resources_hook_enabled_;
}

View File

@ -8,8 +8,7 @@
namespace edxp {
static constexpr const char *kPrimaryInstallerPkgName = "com.solohsu.android.edxp.manager";
static constexpr const char *kSecondaryInstallerPkgName = "org.meowcat.edxposed.manager";
static constexpr const char *kPrimaryInstallerPkgName = "org.meowcat.edxposed.manager";
static constexpr const char *kLegacyInstallerPkgName = "de.robv.android.xposed.installer";
class ConfigManager {
@ -30,6 +29,8 @@ namespace edxp {
bool IsDeoptBootImageEnabled() const;
bool IsNoModuleLogEnabled() const;
std::string GetInstallerPkgName() const;
bool IsAppNeedHook(const std::string &app_data_dir) const;
@ -47,6 +48,7 @@ namespace edxp {
bool black_white_list_enabled_ = false;
bool dynamic_modules_enabled_ = false;
bool deopt_boot_image_enabled_ = false;
bool no_module_log_enabled_ = false;
bool resources_hook_enabled_ = true;
// snapshot at boot
bool use_white_list_snapshot_ = false;

View File

@ -22,6 +22,10 @@ namespace edxp {
return (jboolean) ConfigManager::GetInstance()->IsDeoptBootImageEnabled();
}
static jboolean ConfigManager_isNoModuleLogEnabled(JNI_START) {
return (jboolean) ConfigManager::GetInstance()->IsNoModuleLogEnabled();
}
static jstring ConfigManager_getInstallerPackageName(JNI_START) {
return env->NewStringUTF(ConfigManager::GetInstance()->GetInstallerPkgName().c_str());
}
@ -38,6 +42,7 @@ namespace edxp {
NATIVE_METHOD(ConfigManager, isDynamicModulesEnabled, "()Z"),
NATIVE_METHOD(ConfigManager, isResourcesHookEnabled, "()Z"),
NATIVE_METHOD(ConfigManager, isDeoptBootImageEnabled, "()Z"),
NATIVE_METHOD(ConfigManager, isNoModuleLogEnabled, "()Z"),
NATIVE_METHOD(ConfigManager, getInstallerPackageName, "()Ljava/lang/String;"),
NATIVE_METHOD(ConfigManager, isAppNeedHook, "(Ljava/lang/String;)Z"),
};

View File

@ -8,6 +8,8 @@ public interface EdxpConfig {
boolean isDynamicModulesMode();
boolean isNoModuleLogEnabled();
boolean isResourcesHookEnabled();
boolean isBlackWhiteListMode();

View File

@ -147,7 +147,7 @@ public final class XposedBridge {
}
/**
* Writes a message to the Xposed error log.
* Writes a message to the Xposed modules log.
*
* <p class="warning"><b>DON'T FLOOD THE LOG!!!</b> This is only meant for error logging.
* If you want to write information/debug messages, use logcat.
@ -155,11 +155,14 @@ public final class XposedBridge {
* @param text The log message.
*/
public synchronized static void log(String text) {
Log.i(TAG, text);
if (EdXpConfigGlobal.getConfig().isNoModuleLogEnabled()) {
return;
}
Log.i(TAG, "Module: " + text);
}
/**
* Logs a stack trace to the Xposed error log.
* Logs a stack trace to the Xposed modules log.
*
* <p class="warning"><b>DON'T FLOOD THE LOG!!!</b> This is only meant for error logging.
* If you want to write information/debug messages, use logcat.
@ -167,7 +170,36 @@ public final class XposedBridge {
* @param t The Throwable object for the stack trace.
*/
public synchronized static void log(Throwable t) {
Log.e(TAG, Log.getStackTraceString(t));
Log.e(TAG, "Module: " + Log.getStackTraceString(t));
}
/**
* Writes a message to the Xposed modules log with module's name.
*
* <p class="warning"><b>DON'T FLOOD THE LOG!!!</b> This is only meant for error logging.
* If you want to write information/debug messages, use logcat.
*
* @param name The module's name..
* @param text The log message.
*/
public synchronized static void log(String name, String text) {
if (EdXpConfigGlobal.getConfig().isNoModuleLogEnabled()) {
return;
}
Log.i(TAG, "Module: " + name + ": " + text);
}
/**
* Logs a stack trace to the Xposed modules log with module's name.
*
* <p class="warning"><b>DON'T FLOOD THE LOG!!!</b> This is only meant for error logging.
* If you want to write information/debug messages, use logcat.
*
* @param name The module's name..
* @param t The Throwable object for the stack trace.
*/
public synchronized static void log(String name, Throwable t) {
Log.e(TAG, "Module: " + name + ": " + Log.getStackTraceString(t));
}
/**