Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -368,6 +368,7 @@ public Set<Entry<String, Object>> entrySet() {

protected MmkvConfigManagerImpl(@NonNull String name) {
mmkvId = Objects.requireNonNull(name, "name");
// 调用前需要等待模块mmkv初始化完毕
mmkv = MMKV.mmkvWithID(name, MMKV.MULTI_PROCESS_MODE);
file = new File(MMKV.getRootDir(), name);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,8 @@ class WePkgDispatcher : ApiHookItem(), IDexFind {
val v0Var = param.args[1] ?: return@hookBefore
val originalCallback = param.args[2] ?: return@hookBefore

val uri = XposedHelpers.callMethod(v0Var, "getUri") as String
// 有时 getUri 返回 null
val uri = (XposedHelpers.callMethod(v0Var, "getUri") ?: "null") as String
val cgiId = XposedHelpers.callMethod(v0Var, "getType") as Int
try {
val reqWrapper = XposedHelpers.callMethod(v0Var, "getReqObj")
Expand Down
90 changes: 41 additions & 49 deletions app/src/main/java/moe/ouom/wekit/loader/core/NativeCoreBridge.java
Original file line number Diff line number Diff line change
@@ -1,22 +1,17 @@
package moe.ouom.wekit.loader.core;

import static moe.ouom.wekit.util.io.FileUtils.copyFile;

import android.annotation.SuppressLint;
import android.content.Context;
import androidx.annotation.NonNull;
import com.tencent.mmkv.MMKV;
import java.io.File;
import java.io.IOException;

import moe.ouom.wekit.host.HostInfo;
import moe.ouom.wekit.util.io.FileUtils;
import moe.ouom.wekit.util.log.WeLogger;


public class NativeCoreBridge {
static {
// it will be an UnsatisfiedLinkError if first load..
System.loadLibrary("dexkit");
System.loadLibrary("wekit");
}
Expand All @@ -31,69 +26,66 @@ private NativeCoreBridge() {

public static void initNativeCore() {
Context context = HostInfo.getApplication();

// init mmkv
initializeMmkvForPrimaryNativeLibrary(context);
}

/**
* Load native library and initialize MMKV
* 检查本地核心库是否已初始化
* @return true 如果已成功初始化,false 如果未初始化
*/
public static boolean isNativeCoreInitialized() {
return sPrimaryNativeLibraryInitialized;
}

/**
* 设置本地核心库初始化状态
* @param initialized true表示已初始化,false表示未初始化
*/
public static void setNativeCoreInitialized(boolean initialized) {
sPrimaryNativeLibraryInitialized = initialized;
if (initialized) {
WeLogger.i("Native core initialization status set to: initialized");
} else {
WeLogger.w("Native core initialization status set to: not initialized");
}
}

/**
* 加载本地库并初始化MMKV
*
* @param ctx Application context
* @throws LinkageError if failed to load native library
* @param ctx 应用上下文
*/
@SuppressLint("SdCardPath")
public static void initializeMmkvForPrimaryNativeLibrary(@NonNull Context ctx) {
if (sPrimaryNativeLibraryInitialized) {
if (isNativeCoreInitialized()) {
return;
}

File filesDir = null;

File[] externalDirs = ctx.getExternalMediaDirs();
// 获取微信的files目录
File appFilesDir = ctx.getFilesDir();
String packageName = ctx.getPackageName();

if (externalDirs != null && externalDirs.length > 0) {
filesDir = externalDirs[0];
}

if (filesDir == null) {
filesDir = ctx.getFilesDir();
}
WeLogger.i("Initializing NativeCoreBridge for package: " + packageName);

File mmkvDir = new File(filesDir, "wekit_mmkv");
File mmkvDir = new File(appFilesDir, "mmkv");
// 不存在就创建mmkv目录
if (!mmkvDir.exists()) {
mmkvDir.mkdirs();
boolean created = mmkvDir.mkdirs();
WeLogger.i("Created mmkv directory: " + created);
}

// MMKV requires a ".tmp" cache directory, we have to create it manually
File cacheDir = new File(mmkvDir, ".tmp");
if (!cacheDir.exists()) {
cacheDir.mkdir();
}
// 初始化 MMKV
String mmkvRootPath = mmkvDir.getAbsolutePath();
String initializedPath = MMKV.initialize(ctx, mmkvRootPath);

File oldDir = new File(ctx.getFilesDir(), "wekit_mmkv");
if (oldDir.exists() && oldDir.isDirectory()) {
File[] files = oldDir.listFiles();
if (files != null) {
for (File src : files) {
if (!src.isFile()) continue;
File dest = new File(mmkvDir, src.getName());
if (!dest.exists()) {
try {
copyFile(src, dest);
WeLogger.i("Copy config file: " + src.getName());
} catch (IOException e) {
WeLogger.e(e);
}
}
}
}
FileUtils.deleteFile(oldDir);
}
MMKV.initialize(ctx, "/data/data/com.tencent.mm/files/mmkv");
WeLogger.i("MMKV initialized at: " + initializedPath);

// 创建必要的 MMKV 实例
MMKV.mmkvWithID("global_config", MMKV.MULTI_PROCESS_MODE);
MMKV.mmkvWithID("global_cache", MMKV.MULTI_PROCESS_MODE);
sPrimaryNativeLibraryInitialized = true;
}

setNativeCoreInitialized(true);
WeLogger.i("NativeCoreBridge initialization complete");
}
}
3 changes: 2 additions & 1 deletion app/src/main/java/moe/ouom/wekit/util/log/LogUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@

import de.robv.android.xposed.XposedBridge;
import moe.ouom.wekit.config.WeConfig;
import moe.ouom.wekit.loader.core.NativeCoreBridge;
import moe.ouom.wekit.util.io.FileUtils;
import moe.ouom.wekit.util.io.PathTool;

Expand Down Expand Up @@ -99,7 +100,7 @@ public static void addError(String TAG, String Description, Throwable e) {

private static void addLog(String fileName, String Description, Object content, boolean isError) {
try {
if (!WeConfig.getDefaultConfig().getBooleanOrFalse(PrekEnableLog)){
if (NativeCoreBridge.isNativeCoreInitialized() && !WeConfig.getDefaultConfig().getBooleanOrFalse(PrekEnableLog)){
return;
}
} catch (Exception e) {
Expand Down