diff --git a/app/build.gradle b/app/build.gradle
index 1586aec..3a46911 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -14,6 +14,13 @@ android {
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+
+ // 指定支持的 ABI 类型(如果需要限制支持的 ABI)
+ externalNativeBuild {
+ cmake {
+ arguments "-DANDROID_ABI=arm64-v8a"
+ }
+ }
}
buildTypes {
@@ -21,15 +28,28 @@ android {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
+ debug {
+ // 禁用符号剥离
+ ndk {
+ debugSymbolLevel 'none'
+ }
+ }
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
}
+
+ // 添加 CMake 支持
+ externalNativeBuild {
+ cmake {
+ // 指定 CMakeLists.txt 的路径
+ path file("src/main/cpp/CMakeLists.txt")
+ }
+ }
}
dependencies {
-
implementation libs.appcompat
implementation libs.material
implementation libs.activity
@@ -37,6 +57,7 @@ dependencies {
testImplementation libs.junit
androidTestImplementation libs.ext.junit
androidTestImplementation libs.espresso.core
+
// Retrofit 核心库
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
@@ -45,5 +66,4 @@ dependencies {
// 如果需要 RxJava 支持(可选)
implementation 'com.squareup.retrofit2:adapter-rxjava3:2.9.0'
-
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index e72fe2a..d15518c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -13,6 +13,7 @@
+
diff --git a/app/src/main/cpp/CMakeLists.txt b/app/src/main/cpp/CMakeLists.txt
new file mode 100644
index 0000000..8b523d0
--- /dev/null
+++ b/app/src/main/cpp/CMakeLists.txt
@@ -0,0 +1,28 @@
+ cmake_minimum_required(VERSION 3.10.2) # 指定最低版本
+ project("native_lib") # 定义项目名称
+
+ # 设置源文件列表
+ set(SOURCE_FILES
+ infoct.cpp # 确保路径正确
+ )
+ set(CMAKE_ANDROID_ARCH_ABI arm64-v8a)
+ set(CMAKE_BUILD_TYPE Debug) # 确保构建为 Debug 模式
+ set(CMAKE_NO_STRIP ON) # 禁止符号剥离
+ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/../jniLibs/${ANDROID_ABI})
+
+
+ # 包含头文件目录
+ include_directories(${CMAKE_SOURCE_DIR})# 确保 fk_common_struct.h 可用
+
+ # 生成共享库
+ add_library( # 设置生成的库名称
+ native
+ SHARED
+ ${SOURCE_FILES}
+ )
+
+ # 链接系统库(例如 log 日志和 libc 等)
+ target_link_libraries(
+ native
+ log # 用于 __android_log_print
+ )
\ No newline at end of file
diff --git a/app/src/main/cpp/fk_common_struct.h b/app/src/main/cpp/fk_common_struct.h
new file mode 100644
index 0000000..049f8b2
--- /dev/null
+++ b/app/src/main/cpp/fk_common_struct.h
@@ -0,0 +1,67 @@
+//
+
+#define CMD_BASE 0xCBAABC10
+
+#define FK_ADD_UID (CMD_BASE + 1)
+#define FK_REMOVE_UID (CMD_BASE + 2)
+#define FK_REMOVE_ALL_UID (CMD_BASE + 3)
+#define FK_SET_ANTI_DEBUG_STATUS (CMD_BASE + 4)
+
+#define FK_GET_POWER (CMD_BASE + 10)
+#define FK_GET_POWER2 (CMD_BASE + 12)
+#define FK_RELEASE_POWER2 (CMD_BASE + 13)
+
+
+#define FK_HAS_POWER (CMD_BASE + 20)
+
+#define FK_SET_CURRENT_NS_BOOT_ID (CMD_BASE + 30)
+#define FK_SET_CURRENT_UNAME (CMD_BASE + 31)
+
+#define FK_SET_CURRENT_RAMSIZE (CMD_BASE + 51)
+#define FK_SET_CURRENT_SYSTEM_UPTIME_OFFSET (CMD_BASE + 52)
+#define FK_SET_CURRENT_DISK_INFO (CMD_BASE + 53)
+
+
+#define FK_RESET_IO_REDIRECT (CMD_BASE + 100)
+#define FK_ADD_REDIRECT_ITEM (CMD_BASE + 101)
+#define FK_REMOVE_REDIRECT_ITEM (CMD_BASE + 102)
+
+#define FK_RESET_FILE_PATH_MOCK (CMD_BASE + 110)
+#define FK_ADD_FILE_PATH_MOCK (CMD_BASE + 111)
+
+#define FK_CMD_MAX_VAL (CMD_BASE + 10000)
+
+#define FK_OP_SUCCESS 0
+#define FK_OP_FAILED 1000
+
+#define ARRAY_LENGTH(x) (sizeof(x) / sizeof(x[0]))
+
+//
+#define FILE_PATH_MOCK_INFO_MAX 32
+struct file_path_mock_info {
+ char filepath[256];
+ int status; // 0
+ long atime;
+ long mtime;
+ long ctime;
+ long long rom_size;
+ long long free_size;
+ long long avail_size;
+};
+
+#define FK_DISK_INFO_MAX 8
+struct fk_disk_info {
+ long long rom_size;
+ long long free_size;
+ long long avail_size;
+};
+
+#define BLACK_UID_MAX 32
+
+
+#define REDIRECT_ITEM_MAX 32
+struct io_redirect_item {
+ int status; // 0 for not used, 1 for used
+ char key[PATH_MAX];
+ char value[PATH_MAX];
+};
\ No newline at end of file
diff --git a/app/src/main/cpp/infoct.cpp b/app/src/main/cpp/infoct.cpp
new file mode 100644
index 0000000..54158e2
--- /dev/null
+++ b/app/src/main/cpp/infoct.cpp
@@ -0,0 +1,305 @@
+#include
+#include
+#include
+#include
+#include
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include "fk_common_struct.h"
+
+#define MY_LOG_TAG "DeviceTool-native"
+
+#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, MY_LOG_TAG,__VA_ARGS__) // 定义LOGE类型
+
+
+extern "C"
+JNIEXPORT jlongArray
+
+JNICALL
+Java_com_android_devicetool_Native_getSysInfo(JNIEnv *env, jclass clazz) {
+ struct sysinfo s_info;
+ sysinfo(&s_info);
+
+ jlongArray ret = env->NewLongArray(6);
+ jlong sysInfoArr[6] = {0};
+
+ sysInfoArr[0] = s_info.totalram * s_info.mem_unit;
+ sysInfoArr[1] = s_info.freeram * s_info.mem_unit;
+ sysInfoArr[2] = s_info.sharedram * s_info.mem_unit;
+ sysInfoArr[3] = s_info.bufferram * s_info.mem_unit;
+ sysInfoArr[4] = s_info.totalswap * s_info.mem_unit;
+ sysInfoArr[5] = s_info.freeswap * s_info.mem_unit;
+
+ env->SetLongArrayRegion(ret, 0, 6, (jlong *) sysInfoArr);
+
+ return ret;
+}
+
+
+extern "C"
+JNIEXPORT void JNICALL
+Java_com_android_devicetool_Native_getPower(JNIEnv
+*env,
+jclass clazz
+) {
+prctl(FK_GET_POWER, 0, 0, 0);
+}
+
+
+static unsigned char hexCharToByte(char high, char low) {
+ unsigned char highValue, lowValue;
+
+ if (isdigit(high)) {
+ highValue = high - '0';
+ } else {
+ highValue = toupper(high) - 'A' + 10;
+ }
+
+ if (isdigit(low)) {
+ lowValue = low - '0';
+ } else {
+ lowValue = toupper(low) - 'A' + 10;
+ }
+
+ return (highValue << 4) | lowValue;
+}
+
+// 函数实现
+static size_t hexStrToByteArray(const char *hexStr, unsigned char *byteArray) {
+ size_t len = strlen(hexStr);
+
+ if (len % 2 != 0) {
+ return 0; // 输入长度无效
+ }
+
+ size_t byteArraySize = len / 2;
+
+ for (size_t i = 0; i < byteArraySize; i++) {
+ byteArray[i] = hexCharToByte(hexStr[2 * i], hexStr[2 * i + 1]);
+ }
+
+ return byteArraySize;
+}
+
+extern "C"
+JNIEXPORT void JNICALL
+Java_com_example_studyapp_device_Native_setBootId(JNIEnv
+*env,
+jclass clazz, jstring
+boot_id_hex_str) {
+if (boot_id_hex_str == NULL) {
+env->
+ThrowNew(env
+->FindClass("java/lang/IllegalArgumentException"), "boot_id_hex_str is NULL");
+return;
+}
+
+const char *c_boot_id_hex_str = env->GetStringUTFChars(boot_id_hex_str, 0);
+if (c_boot_id_hex_str == NULL) {
+env->
+ThrowNew(env
+->FindClass("java/lang/OutOfMemoryError"), "Unable to allocate memory for string.");
+return;
+}
+
+size_t length = strlen(c_boot_id_hex_str);
+if (length != 32) {
+env->
+ReleaseStringUTFChars(boot_id_hex_str, c_boot_id_hex_str
+);
+env->
+ThrowNew(env
+->FindClass("java/lang/IllegalArgumentException"), "Invalid boot_id length, expected 32.");
+return;
+}
+
+unsigned char boot_id[16] = {0};
+if (!
+hexStrToByteArray(c_boot_id_hex_str, boot_id
+)) {
+env->
+ReleaseStringUTFChars(boot_id_hex_str, c_boot_id_hex_str
+);
+env->
+ThrowNew(env
+->FindClass("java/lang/IllegalArgumentException"), "hexStrToByteArray failed.");
+return;
+}
+
+if (prctl(FK_SET_CURRENT_NS_BOOT_ID, boot_id, 0, 0) != 0) {
+env->
+ReleaseStringUTFChars(boot_id_hex_str, c_boot_id_hex_str
+);
+env->
+ThrowNew(env
+->FindClass("java/lang/RuntimeException"), "prctl call failed.");
+return;
+}
+
+env->
+ReleaseStringUTFChars(boot_id_hex_str, c_boot_id_hex_str
+);
+}
+
+extern "C"
+JNIEXPORT void JNICALL
+Java_com_android_devicetool_Native_deviceInfoChange(JNIEnv
+*env,
+jclass clazz
+) {
+
+
+prctl(FK_RESET_IO_REDIRECT);
+prctl(FK_RESET_FILE_PATH_MOCK);
+prctl(FK_REMOVE_ALL_UID);
+
+prctl(FK_ADD_UID,
+
+getuid()
+
+);
+prctl(FK_ADD_UID, 2000);
+
+struct new_utsname my_utsname = {
+ .sysname = "Linux",
+ .nodename = "localhost",
+ .release = "5.9.0-42",
+ .version = "#46-Ubuntu SMP Fri Jul 10 00:24:02 UTC 2020",
+ .machine = "aarch64",
+ .domainname = "(none)"
+};
+
+struct sysinfo s_info;
+sysinfo(&s_info);
+//4179690496
+// 990355536
+prctl(FK_SET_CURRENT_UNAME, my_utsname);
+
+long long my_ramsize = 4179690496l * s_info.mem_unit;
+prctl(FK_SET_CURRENT_RAMSIZE, &my_ramsize);
+prctl(FK_SET_CURRENT_SYSTEM_UPTIME_OFFSET, 1000);
+
+
+struct fk_disk_info tmp_disk_info = {
+ .avail_size = 110735782912,
+ .free_size = 100752560128,
+ .rom_size = 130041423872l
+};
+// 修改磁盘大小
+// statfs "/data"
+// statfs "/sdcard"
+
+prctl(FK_SET_CURRENT_DISK_INFO, tmp_disk_info);
+
+
+struct file_path_mock_info tmp_file_path_mock_info = {
+ .filepath = "/proc/cpuinfo",
+ .atime = 0,
+ .ctime = 0,
+ .mtime = 0
+};
+
+// 修改文件时间
+int tmpret = prctl(FK_ADD_FILE_PATH_MOCK, tmp_file_path_mock_info);
+LOGE("FK_ADD_FILE_PATH_MOCK tmpret : %d", tmpret);
+
+// 路径重定向
+tmpret = prctl(FK_ADD_REDIRECT_ITEM, "/proc/cpuinfo", "/proc/meminfo");
+LOGE("FK_ADD_REDIRECT_ITEM tmpret : %d", tmpret);
+
+}
+
+extern "C"
+JNIEXPORT jboolean
+JNICALL
+ Java_com_android_devicetool_Native_cpuInfoChange(JNIEnv * env, jclass, jstring
+redirectPath) {
+prctl(FK_RESET_IO_REDIRECT);
+prctl(FK_RESET_FILE_PATH_MOCK);
+prctl(FK_REMOVE_ALL_UID);
+
+prctl(FK_ADD_UID, 2000);
+
+struct file_path_mock_info tmp_file_path_mock_info = {
+ .filepath = "/proc/cpuinfo",
+ .atime = 0,
+ .ctime = 0,
+ .mtime = 0
+};
+const char *newPath = env->GetStringUTFChars(redirectPath, nullptr);
+LOGE("cpuinfo(newPath) : %s", newPath);
+
+int ret = prctl(FK_ADD_FILE_PATH_MOCK, tmp_file_path_mock_info);
+if (ret == -1)
+return false;
+
+ret = prctl(FK_ADD_REDIRECT_ITEM, "/proc/cpuinfo", newPath);
+
+return ret != -1;
+}
+
+extern "C"
+JNIEXPORT void JNICALL
+Java_com_android_devicetool_Native_deviceInfoShow(JNIEnv
+*env,
+jclass clazz
+) {
+struct sysinfo s_info;
+sysinfo(&s_info);
+
+LOGE("s_info.totalram %ld", s_info.totalram);
+LOGE("s_info.freeram %ld", s_info.freeram);
+LOGE("s_info.sharedram %ld", s_info.sharedram);
+LOGE("s_info.bufferram %ld", s_info.bufferram);
+LOGE("s_info.mem_unit %ld", s_info.mem_unit);
+LOGE("s_info.uptime %ld", s_info.uptime);
+
+struct statfs my_data;
+statfs("/data", &my_data);
+
+LOGE("/data rom_size %ld", my_data.f_blocks * my_data.f_bsize);
+LOGE("/data free_size %ld", my_data.f_bfree * my_data.f_bsize);
+LOGE("/data avail_size %ld", my_data.f_bavail * my_data.f_bsize);
+
+
+struct stat64 mystat;
+int stat_ret = stat64("/proc/cpuinfo", &mystat);
+LOGE("stat64 /proc/cpuinfo %d", stat_ret);
+LOGE("/proc/cpuinfo st_atim %ld", mystat.st_atim.tv_sec);
+LOGE("/proc/cpuinfo st_mtim %ld", mystat.st_mtim.tv_sec);
+LOGE("/proc/cpuinfo st_ctim %ld", mystat.st_ctim.tv_sec);
+
+
+}
+extern "C"
+JNIEXPORT void JNICALL
+Java_com_android_devicetool_Native_deviceInfoReset(JNIEnv
+*env,
+jclass clazz
+) {
+prctl(FK_RESET_IO_REDIRECT);
+prctl(FK_RESET_FILE_PATH_MOCK);
+prctl(FK_REMOVE_ALL_UID);
+
+prctl(FK_SET_CURRENT_UNAME, 0);
+prctl(FK_SET_CURRENT_RAMSIZE, 0);
+prctl(FK_SET_CURRENT_SYSTEM_UPTIME_OFFSET, 0);
+prctl(FK_SET_CURRENT_DISK_INFO, NULL);
+}
+extern "C"
+JNIEXPORT void JNICALL
+Java_com_android_devicetool_Native_enableBypassAntiDebug(JNIEnv
+*env,
+jclass clazz, jint
+uid) {
+prctl(FK_REMOVE_ALL_UID);
+prctl(FK_ADD_UID, uid);
+prctl(FK_SET_ANTI_DEBUG_STATUS, 1);
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/studyapp/MainActivity.java b/app/src/main/java/com/example/studyapp/MainActivity.java
index 3946452..31f8262 100644
--- a/app/src/main/java/com/example/studyapp/MainActivity.java
+++ b/app/src/main/java/com/example/studyapp/MainActivity.java
@@ -30,6 +30,7 @@ import androidx.core.content.ContextCompat;
import androidx.appcompat.app.AppCompatActivity;
import com.example.studyapp.autoJS.AutoJsUtil;
+import com.example.studyapp.device.ChangeDeviceInfo;
import com.example.studyapp.proxy.CustomVpnService;
import com.example.studyapp.utils.ReflectionHelper;
@@ -94,6 +95,20 @@ public class MainActivity extends AppCompatActivity {
Toast.makeText(this, "Disconnect button not found", Toast.LENGTH_SHORT).show();
}
+ Button modifyDeviceInfoButton = findViewById(R.id.modifyDeviceInfoButton);
+ if (modifyDeviceInfoButton != null) {
+ modifyDeviceInfoButton.setOnClickListener(v -> ChangeDeviceInfo.changeDeviceInfo(getPackageName(),this));
+ } else {
+ Toast.makeText(this, "modifyDeviceInfo button not found", Toast.LENGTH_SHORT).show();
+ }
+
+ Button resetDeviceInfoButton = findViewById(R.id.resetDeviceInfoButton);
+ if (resetDeviceInfoButton != null) {
+ resetDeviceInfoButton.setOnClickListener(v -> ChangeDeviceInfo.resetChangedDeviceInfo(getPackageName(),this));
+ } else {
+ Toast.makeText(this, "resetDeviceInfo button not found", Toast.LENGTH_SHORT).show();
+ }
+
}
private void startProxyVpn(Context context) {
diff --git a/app/src/main/java/com/example/studyapp/device/ChangeDeviceInfo.java b/app/src/main/java/com/example/studyapp/device/ChangeDeviceInfo.java
index 78d39c7..80d365d 100644
--- a/app/src/main/java/com/example/studyapp/device/ChangeDeviceInfo.java
+++ b/app/src/main/java/com/example/studyapp/device/ChangeDeviceInfo.java
@@ -20,7 +20,7 @@ import java.lang.reflect.Method;
public class ChangeDeviceInfo {
- public void changeDeviceInfo(String current_pkg_name,Context context) {
+ public static void changeDeviceInfo(String current_pkg_name,Context context) {
// 指定包名优先级高于全局
callVCloudSettings_put(current_pkg_name + "_android_id", "my123456",context);
callVCloudSettings_put(current_pkg_name + "_screen_brightness", "100",context);
@@ -118,26 +118,36 @@ public class ChangeDeviceInfo {
}
- private void callVCloudSettings_put(String key, String value, Context context) {
+ private static void callVCloudSettings_put(String key, String value, Context context) {
if (context == null) {
throw new IllegalArgumentException("Context cannot be null");
}
try {
+ // 获取类对象
Class> clazz = Class.forName("android.provider.VCloudSettings$Global");
Method putStringMethod = clazz.getDeclaredMethod("putString", ContentResolver.class, String.class, String.class);
putStringMethod.setAccessible(true);
+
+ // 调用方法
putStringMethod.invoke(null, context.getContentResolver(), key, value);
+ Log.d("Debug", "putString executed successfully.");
} catch (ClassNotFoundException e) {
- throw new RuntimeException("Class VCloudSettings$Global not found", e);
+ Log.e("Reflection Error", "Class not found", e);
} catch (NoSuchMethodException e) {
- throw new RuntimeException("Method putString not found", e);
- } catch (IllegalAccessException | InvocationTargetException e) {
- throw new RuntimeException("Failed to invoke putString via reflection", e);
+ Log.e("Reflection Error", "Method not found", e);
+ } catch (InvocationTargetException e) {
+ Throwable cause = e.getTargetException(); // 获取异常的根原因
+ if (cause instanceof SecurityException) {
+ Log.e("Reflection Error", "SecurityException: Permission denied. You need WRITE_SECURE_SETTINGS.", cause);
+ } else {
+ Log.e("Reflection Error", "InvocationTargetException during putString invocation", e);
+ }
+ } catch (Exception e) {
+ Log.e("Reflection Error", "Unexpected error during putString invocation", e);
}
}
-
- private void resetChangedDeviceInfo(String current_pkg_name,Context context) {
+ public static void resetChangedDeviceInfo(String current_pkg_name,Context context) {
try {
Native.setBootId("00000000000000000000000000000000");
} catch (Exception e) {
diff --git a/app/src/main/jniLibs/arm64-v8a/libnative.so b/app/src/main/jniLibs/arm64-v8a/libnative.so
new file mode 100644
index 0000000..255178e
Binary files /dev/null and b/app/src/main/jniLibs/arm64-v8a/libnative.so differ
diff --git a/err.log b/err.log
index 44e5434..70a54f7 100644
--- a/err.log
+++ b/err.log
@@ -1,14 +1,72 @@
-2025-05-29 15:19:05.558 65246-65246 AndroidRuntime com.example.studyapp D Shutting down VM
-2025-05-29 15:19:05.559 65246-65246 AndroidRuntime com.example.studyapp E FATAL EXCEPTION: main (Ask Gemini)
- Process: com.example.studyapp, PID: 65246
- java.lang.IllegalArgumentException: Service not registered: com.example.studyapp.MainActivity$1@992d8bc
- at android.app.LoadedApk.forgetServiceDispatcher(LoadedApk.java:2015)
- at android.app.ContextImpl.unbindService(ContextImpl.java:2076)
- at android.content.ContextWrapper.unbindService(ContextWrapper.java:889)
- at android.content.ContextWrapper.unbindService(ContextWrapper.java:889)
- at com.example.studyapp.MainActivity.stopProxy(MainActivity.java:186)
- at com.example.studyapp.MainActivity.lambda$onCreate$2$com-example-studyapp-MainActivity(MainActivity.java:94)
- at com.example.studyapp.MainActivity$$ExternalSyntheticLambda5.onClick(D8$$SyntheticClass:0)
+2025-05-29 18:31:01.362 12214-12253 OpenGLRenderer com.example.studyapp I Davey! duration=9184238016ms; Flags=0, FrameTimelineVsyncId=72708, IntendedVsync=4113925334671, Vsync=4113925334671, InputEventId=-1041137076, HandleInputStart=4113926523074, AnimationStart=4113931604430, PerformTraversalsStart=4113931816166, DrawStart=4113932196473, FrameDeadline=9188320516271553, FrameInterval=4113926504409, FrameStartTime=16666667, SyncQueued=4113937541186, SyncStart=4113937854706, IssueDrawCommandsStart=4113937950366, SwapBuffers=4113939236526, FrameCompleted=9188351942323312, DequeueBufferDuration=23040, QueueBufferDuration=465177, GpuCompleted=9188351942323312, SwapBuffersCompleted=4113940226083, DisplayPresentTime=0, CommandSubmissionCompleted=4113939236526,
+2025-05-29 18:31:02.682 12214-12233 OpenGLRenderer com.example.studyapp I Davey! duration=9184238019ms; Flags=0, FrameTimelineVsyncId=72966, IntendedVsync=4115242001364, Vsync=4115242001364, InputEventId=-866436489, HandleInputStart=4115243018485, AnimationStart=4115247485342, PerformTraversalsStart=4115247717785, DrawStart=4115248097217, FrameDeadline=9188352142352764, FrameInterval=4115243003028, FrameStartTime=16666667, SyncQueued=4115258519494, SyncStart=4115258606988, IssueDrawCommandsStart=4115258749020, SwapBuffers=4115260557520, FrameCompleted=9188353261370630, DequeueBufferDuration=18082, QueueBufferDuration=241775, GpuCompleted=9188353261370630, SwapBuffersCompleted=4115261043694, DisplayPresentTime=0, CommandSubmissionCompleted=4115260557520,
+2025-05-29 18:31:02.750 12214-12228 xample.studyapp com.example.studyapp I Compiler allocated 4413KB to compile void android.view.ViewRootImpl.performTraversals()
+2025-05-29 18:31:02.831 12214-12233 OpenGLRenderer com.example.studyapp I Davey! duration=9184238017ms; Flags=0, FrameTimelineVsyncId=73029, IntendedVsync=4115392001367, Vsync=4115392001367, InputEventId=-471849332, HandleInputStart=4115392772438, AnimationStart=4115398737358, PerformTraversalsStart=4115398960759, DrawStart=4115399244823, FrameDeadline=9188353392352789, FrameInterval=4115392759023, FrameStartTime=16666667, SyncQueued=4115407484419, SyncStart=4115407640741, IssueDrawCommandsStart=4115407725318, SwapBuffers=4115409246546, FrameCompleted=9188353409823715, DequeueBufferDuration=18082, QueueBufferDuration=240608, GpuCompleted=9188353409823715, SwapBuffersCompleted=4115409741762, DisplayPresentTime=0, CommandSubmissionCompleted=4115409246546,
+2025-05-29 18:31:03.812 1922-2017 MemInfoService com.android.expansiontools D memScan: [MemEntity(id=null, pid=12214, user=u0_a103, name=Script helper, pkg=com.example.studyapp, res=187, time=0, total=5083, ts=1748514663424, pr=10, ni=-10, virt=14336, shr=102, s=S, cpu=0.0, mem=5.6, args=com.example.studyapp)]
+2025-05-29 18:31:04.312 12214-12253 OpenGLRenderer com.example.studyapp I Davey! duration=9184238014ms; Flags=0, FrameTimelineVsyncId=73190, IntendedVsync=4116892001397, Vsync=4116892001397, InputEventId=-382612953, HandleInputStart=4116893008865, AnimationStart=4116893016156, PerformTraversalsStart=4116893021114, DrawStart=4116893357966, FrameDeadline=9188353542352792, FrameInterval=4116892979992, FrameStartTime=16666667, SyncQueued=4116903203825, SyncStart=4116903234739, IssueDrawCommandsStart=4116903293069, SwapBuffers=4116906054086, FrameCompleted=9188354906737413, DequeueBufferDuration=12832, QueueBufferDuration=189279, GpuCompleted=9188354906737413, SwapBuffersCompleted=4116906448392, DisplayPresentTime=0, CommandSubmissionCompleted=4116906054086,
+2025-05-29 18:31:04.352 12214-12214 Debug com.example.studyapp D putString executed successfully.
+2025-05-29 18:31:04.353 12214-12214 Debug com.example.studyapp D putString executed successfully.
+2025-05-29 18:31:04.354 12214-12214 Debug com.example.studyapp D putString executed successfully.
+2025-05-29 18:31:04.354 12214-12214 Debug com.example.studyapp D putString executed successfully.
+2025-05-29 18:31:04.355 12214-12214 Debug com.example.studyapp D putString executed successfully.
+2025-05-29 18:31:04.356 12214-12214 Debug com.example.studyapp D putString executed successfully.
+2025-05-29 18:31:04.356 12214-12214 Debug com.example.studyapp D putString executed successfully.
+2025-05-29 18:31:04.357 12214-12214 Debug com.example.studyapp D putString executed successfully.
+2025-05-29 18:31:04.358 12214-12214 Debug com.example.studyapp D putString executed successfully.
+2025-05-29 18:31:04.358 12214-12214 Debug com.example.studyapp D putString executed successfully.
+2025-05-29 18:31:04.359 12214-12214 Debug com.example.studyapp D putString executed successfully.
+2025-05-29 18:31:04.360 12214-12214 Debug com.example.studyapp D putString executed successfully.
+2025-05-29 18:31:04.360 12214-12214 Debug com.example.studyapp D putString executed successfully.
+2025-05-29 18:31:04.361 12214-12214 Debug com.example.studyapp D putString executed successfully.
+2025-05-29 18:31:04.361 12214-12214 Debug com.example.studyapp D putString executed successfully.
+2025-05-29 18:31:04.362 12214-12214 Debug com.example.studyapp D putString executed successfully.
+2025-05-29 18:31:04.363 12214-12214 Debug com.example.studyapp D putString executed successfully.
+2025-05-29 18:31:04.363 12214-12214 Debug com.example.studyapp D putString executed successfully.
+2025-05-29 18:31:04.364 12214-12214 Debug com.example.studyapp D putString executed successfully.
+2025-05-29 18:31:04.365 12214-12214 Debug com.example.studyapp D putString executed successfully.
+2025-05-29 18:31:04.366 12214-12214 Debug com.example.studyapp D putString executed successfully.
+2025-05-29 18:31:04.366 12214-12214 Debug com.example.studyapp D putString executed successfully.
+2025-05-29 18:31:04.367 12214-12214 Debug com.example.studyapp D putString executed successfully.
+2025-05-29 18:31:04.377 12214-12214 ShellUtils com.example.studyapp D Executing command: setprop ro.product.brand google
+2025-05-29 18:31:04.394 12214-12214 ShellUtils com.example.studyapp D Executing command: setprop ro.product.model raven
+2025-05-29 18:31:04.406 12214-12214 ShellUtils com.example.studyapp D Executing command: setprop ro.product.manufacturer google
+2025-05-29 18:31:04.425 12214-12214 ShellUtils com.example.studyapp D Executing command: setprop ro.product.device raven
+2025-05-29 18:31:04.455 12214-12214 ShellUtils com.example.studyapp D Executing command: setprop ro.product.name raven
+2025-05-29 18:31:04.468 12214-12214 ShellUtils com.example.studyapp D Executing command: setprop ro.build.version.incremental 9325679
+2025-05-29 18:31:04.477 12214-12214 ShellUtils com.example.studyapp E Unsafe command, aborting.
+2025-05-29 18:31:04.478 12214-12214 ShellUtils com.example.studyapp D Executing command: setprop ro.board.platform acr980m
+2025-05-29 18:31:04.488 12214-12214 System.err com.example.studyapp W java.lang.UnsatisfiedLinkError: dlopen failed: library "libnative.so" not found
+2025-05-29 18:31:04.489 12214-12214 System.err com.example.studyapp W at java.lang.Runtime.loadLibrary0(Runtime.java:1077)
+2025-05-29 18:31:04.489 12214-12214 System.err com.example.studyapp W at java.lang.Runtime.loadLibrary0(Runtime.java:998)
+2025-05-29 18:31:04.489 12214-12214 System.err com.example.studyapp W at java.lang.System.loadLibrary(System.java:1670)
+2025-05-29 18:31:04.489 12214-12214 System.err com.example.studyapp W at com.example.studyapp.device.Native.(Native.java:6)
+2025-05-29 18:31:04.489 12214-12214 System.err com.example.studyapp W at com.example.studyapp.device.Native.setBootId(Native Method)
+2025-05-29 18:31:04.489 12214-12214 System.err com.example.studyapp W at com.example.studyapp.device.ChangeDeviceInfo.changeDeviceInfo(ChangeDeviceInfo.java:103)
+2025-05-29 18:31:04.489 12214-12214 System.err com.example.studyapp W at com.example.studyapp.MainActivity.lambda$onCreate$3$com-example-studyapp-MainActivity(MainActivity.java:100)
+2025-05-29 18:31:04.489 12214-12214 System.err com.example.studyapp W at com.example.studyapp.MainActivity$$ExternalSyntheticLambda7.onClick(D8$$SyntheticClass:0)
+2025-05-29 18:31:04.489 12214-12214 System.err com.example.studyapp W at android.view.View.performClick(View.java:7542)
+2025-05-29 18:31:04.489 12214-12214 System.err com.example.studyapp W at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1218)
+2025-05-29 18:31:04.489 12214-12214 System.err com.example.studyapp W at android.view.View.performClickInternal(View.java:7519)
+2025-05-29 18:31:04.489 12214-12214 System.err com.example.studyapp W at android.view.View.-$$Nest$mperformClickInternal(Unknown Source:0)
+2025-05-29 18:31:04.489 12214-12214 System.err com.example.studyapp W at android.view.View$PerformClick.run(View.java:29476)
+2025-05-29 18:31:04.489 12214-12214 System.err com.example.studyapp W at android.os.Handler.handleCallback(Handler.java:942)
+2025-05-29 18:31:04.489 12214-12214 System.err com.example.studyapp W at android.os.Handler.dispatchMessage(Handler.java:99)
+2025-05-29 18:31:04.489 12214-12214 System.err com.example.studyapp W at android.os.Looper.loopOnce(Looper.java:201)
+2025-05-29 18:31:04.489 12214-12214 System.err com.example.studyapp W at android.os.Looper.loop(Looper.java:288)
+2025-05-29 18:31:04.489 12214-12214 System.err com.example.studyapp W at android.app.ActivityThread.main(ActivityThread.java:7930)
+2025-05-29 18:31:04.489 12214-12214 System.err com.example.studyapp W at java.lang.reflect.Method.invoke(Native Method)
+2025-05-29 18:31:04.489 12214-12214 System.err com.example.studyapp W at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
+2025-05-29 18:31:04.489 12214-12214 System.err com.example.studyapp W at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
+2025-05-29 18:31:04.489 12214-12214 xample.studyapp com.example.studyapp E No implementation found for void com.example.studyapp.device.Native.setBootId(java.lang.String) (tried Java_com_example_studyapp_device_Native_setBootId and Java_com_example_studyapp_device_Native_setBootId__Ljava_lang_String_2)
+--------- beginning of crash
+2025-05-29 18:31:04.489 12214-12214 AndroidRuntime com.example.studyapp D Shutting down VM
+2025-05-29 18:31:04.489 12214-12214 AndroidRuntime com.example.studyapp E FATAL EXCEPTION: main (Ask Gemini)
+ Process: com.example.studyapp, PID: 12214
+ java.lang.UnsatisfiedLinkError: No implementation found for void com.example.studyapp.device.Native.setBootId(java.lang.String) (tried Java_com_example_studyapp_device_Native_setBootId and Java_com_example_studyapp_device_Native_setBootId__Ljava_lang_String_2)
+ at com.example.studyapp.device.Native.setBootId(Native Method)
+ at com.example.studyapp.device.ChangeDeviceInfo.changeDeviceInfo(ChangeDeviceInfo.java:103)
+ at com.example.studyapp.MainActivity.lambda$onCreate$3$com-example-studyapp-MainActivity(MainActivity.java:100)
+ at com.example.studyapp.MainActivity$$ExternalSyntheticLambda7.onClick(D8$$SyntheticClass:0)
at android.view.View.performClick(View.java:7542)
at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1218)
at android.view.View.performClickInternal(View.java:7519)
@@ -22,85 +80,17 @@
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
-2025-05-29 15:19:05.560 301-56098 ActivityTaskManager system_server W Force finishing activity com.example.studyapp/.MainActivity
-2025-05-29 15:19:05.566 65246-65246 Process com.example.studyapp I Sending signal. PID: 65246 SIG: 9
----------------------------- PROCESS ENDED (65246) for package com.example.studyapp ----------------------------
-2025-05-29 15:19:05.600 301-317 ActivityManager system_server W Exception when unbinding service com.example.studyapp/.proxy.CustomVpnService (Ask Gemini)
- android.os.DeadObjectException
- at android.os.BinderProxy.transactNative(Native Method)
- at android.os.BinderProxy.transact(BinderProxy.java:584)
- at android.app.IApplicationThread$Stub$Proxy.scheduleUnbindService(IApplicationThread.java:1346)
- at com.android.server.am.ActiveServices.removeConnectionLocked(ActiveServices.java:4923)
- at com.android.server.am.ActiveServices.unbindServiceLocked(ActiveServices.java:3173)
- at com.android.server.am.ActivityManagerService.unbindService(ActivityManagerService.java:12798)
- at android.app.ContextImpl.unbindService(ContextImpl.java:2079)
- at com.android.server.connectivity.Vpn$1.interfaceRemoved(Vpn.java:2076)
- at com.android.server.NetworkManagementService.lambda$notifyInterfaceRemoved$3(NetworkManagementService.java:353)
- at com.android.server.NetworkManagementService$$ExternalSyntheticLambda6.sendCallback(Unknown Source:2)
- at com.android.server.NetworkManagementService.invokeForAllObservers(NetworkManagementService.java:314)
- at com.android.server.NetworkManagementService.notifyInterfaceRemoved(NetworkManagementService.java:353)
- at com.android.server.NetworkManagementService.-$$Nest$mnotifyInterfaceRemoved(Unknown Source:0)
- at com.android.server.NetworkManagementService$NetdUnsolicitedEventListener.lambda$onInterfaceRemoved$6$com-android-server-NetworkManagementService$NetdUnsolicitedEventListener(NetworkManagementService.java:620)
- at com.android.server.NetworkManagementService$NetdUnsolicitedEventListener$$ExternalSyntheticLambda0.run(Unknown Source:4)
- at android.os.Handler.handleCallback(Handler.java:942)
- at android.os.Handler.dispatchMessage(Handler.java:99)
- at android.os.Looper.loopOnce(Looper.java:201)
- at android.os.Looper.loop(Looper.java:288)
- at android.os.HandlerThread.run(HandlerThread.java:67)
- at com.android.server.ServiceThread.run(ServiceThread.java:44)
-2025-05-29 15:19:05.600 301-317 ActivityManager system_server W Bringing down service while still waiting for start foreground: ServiceRecord{7871f79 u0 com.example.studyapp/.proxy.CustomVpnService}
-2025-05-29 15:19:05.623 301-326 ActivityManager system_server W Failed to update http proxy for: com.example.studyapp
-2025-05-29 15:19:05.637 301-1242 ActivityManager system_server I app.info.packageName:com.example.studyapp app.setKilled(true)
-2025-05-29 15:19:05.637 301-1242 ActivityManager system_server I Process com.example.studyapp (pid 65246) has died: fg +50 TOP
-2025-05-29 15:19:05.637 301-986 WindowManager system_server I WIN DEATH: Window{d550fa0 u0 com.example.studyapp/com.example.studyapp.MainActivity}
-2025-05-29 15:19:05.637 301-986 InputManager-JNI system_server W Input channel object 'd550fa0 com.example.studyapp/com.example.studyapp.MainActivity (client)' was disposed without first being removed with the input manager!
-2025-05-29 15:19:05.660 301-321 WindowManager system_server W Failed to deliver inset state change to w=Window{d550fa0 u0 com.example.studyapp/com.example.studyapp.MainActivity EXITING} (Ask Gemini)
- android.os.DeadObjectException
- at android.os.BinderProxy.transactNative(Native Method)
- at android.os.BinderProxy.transact(BinderProxy.java:584)
- at android.view.IWindow$Stub$Proxy.insetsControlChanged(IWindow.java:473)
- at com.android.server.wm.WindowState.notifyInsetsControlChanged(WindowState.java:4015)
- at com.android.server.wm.InsetsStateController.lambda$notifyPendingInsetsControlChanged$4$com-android-server-wm-InsetsStateController(InsetsStateController.java:351)
- at com.android.server.wm.InsetsStateController$$ExternalSyntheticLambda2.run(Unknown Source:2)
- at com.android.server.wm.WindowAnimator.executeAfterPrepareSurfacesRunnables(WindowAnimator.java:345)
- at com.android.server.wm.RootWindowContainer.performSurfacePlacementNoTrace(RootWindowContainer.java:832)
- at com.android.server.wm.RootWindowContainer.performSurfacePlacement(RootWindowContainer.java:777)
- at com.android.server.wm.WindowSurfacePlacer.performSurfacePlacementLoop(WindowSurfacePlacer.java:177)
- at com.android.server.wm.WindowSurfacePlacer.performSurfacePlacement(WindowSurfacePlacer.java:126)
- at com.android.server.wm.WindowSurfacePlacer.performSurfacePlacement(WindowSurfacePlacer.java:115)
- at com.android.server.wm.WindowSurfacePlacer$Traverser.run(WindowSurfacePlacer.java:57)
- at android.os.Handler.handleCallback(Handler.java:942)
- at android.os.Handler.dispatchMessage(Handler.java:99)
- at android.os.Looper.loopOnce(Looper.java:201)
- at android.os.Looper.loop(Looper.java:288)
- at android.os.HandlerThread.run(HandlerThread.java:67)
- at com.android.server.ServiceThread.run(ServiceThread.java:44)
-2025-05-29 15:19:05.661 301-321 WindowManager system_server W Exception thrown during dispatchAppVisibility Window{d550fa0 u0 com.example.studyapp/com.example.studyapp.MainActivity EXITING} (Ask Gemini)
- android.os.DeadObjectException
- at android.os.BinderProxy.transactNative(Native Method)
- at android.os.BinderProxy.transact(BinderProxy.java:584)
- at android.view.IWindow$Stub$Proxy.dispatchAppVisibility(IWindow.java:536)
- at com.android.server.wm.WindowState.sendAppVisibilityToClients(WindowState.java:3478)
- at com.android.server.wm.WindowContainer.sendAppVisibilityToClients(WindowContainer.java:1234)
- at com.android.server.wm.WindowToken.setClientVisible(WindowToken.java:392)
- at com.android.server.wm.ActivityRecord.setClientVisible(ActivityRecord.java:6865)
- at com.android.server.wm.ActivityRecord.onAnimationFinished(ActivityRecord.java:7687)
- at com.android.server.wm.ActivityRecord.postApplyAnimation(ActivityRecord.java:5512)
- at com.android.server.wm.ActivityRecord.commitVisibility(ActivityRecord.java:5472)
- at com.android.server.wm.ActivityRecord.commitVisibility(ActivityRecord.java:5476)
- at com.android.server.wm.AppTransitionController.handleClosingApps(AppTransitionController.java:1194)
- at com.android.server.wm.AppTransitionController.handleAppTransitionReady(AppTransitionController.java:304)
- at com.android.server.wm.RootWindowContainer.checkAppTransitionReady(RootWindowContainer.java:970)
- at com.android.server.wm.RootWindowContainer.performSurfacePlacementNoTrace(RootWindowContainer.java:834)
- at com.android.server.wm.RootWindowContainer.performSurfacePlacement(RootWindowContainer.java:777)
- at com.android.server.wm.WindowSurfacePlacer.performSurfacePlacementLoop(WindowSurfacePlacer.java:177)
- at com.android.server.wm.WindowSurfacePlacer.performSurfacePlacement(WindowSurfacePlacer.java:126)
- at com.android.server.wm.WindowSurfacePlacer.performSurfacePlacement(WindowSurfacePlacer.java:115)
- at com.android.server.wm.WindowSurfacePlacer$Traverser.run(WindowSurfacePlacer.java:57)
- at android.os.Handler.handleCallback(Handler.java:942)
- at android.os.Handler.dispatchMessage(Handler.java:99)
- at android.os.Looper.loopOnce(Looper.java:201)
- at android.os.Looper.loop(Looper.java:288)
- at android.os.HandlerThread.run(HandlerThread.java:67)
- at com.android.server.ServiceThread.run(ServiceThread.java:44)
-2025-05-29 15:19:06.061 301-320 ActivityTaskManager system_server W Activity top resumed state loss timeout for ActivityRecord{e2942a u0 com.example.studyapp/.MainActivity} t-1 f}}
+2025-05-29 18:31:04.491 300-11157 ActivityTaskManager system_server W Force finishing activity com.example.studyapp/.MainActivity
+2025-05-29 18:31:04.498 300-316 ActivityManager system_server I Showing crash dialog for package com.example.studyapp u0
+2025-05-29 18:31:04.514 300-316 CoreBackPreview system_server D Window{a2bd234 u0 Application Error: com.example.studyapp}: Setting back callback OnBackInvokedCallbackInfo{mCallback=android.window.WindowOnBackInvokedDispatcher$OnBackInvokedCallbackWrapper@77359ff, mPriority=0}
+2025-05-29 18:31:04.992 300-318 ActivityTaskManager system_server W Activity top resumed state loss timeout for ActivityRecord{ff3be4e u0 com.example.studyapp/.MainActivity} t118 f}}
+2025-05-29 18:31:04.996 300-318 ActivityTaskManager system_server W Activity pause timeout for ActivityRecord{ff3be4e u0 com.example.studyapp/.MainActivity} t118 f}}
+2025-05-29 18:31:09.354 300-384 InputDispatcher system_server W Window fd7dd4f com.example.studyapp/com.example.studyapp.MainActivity (server) is unresponsive: fd7dd4f com.example.studyapp/com.example.studyapp.MainActivity (server) is not responding. Waited 5002ms for MotionEvent
+2025-05-29 18:31:09.354 300-384 InputDispatcher system_server W Canceling events for fd7dd4f com.example.studyapp/com.example.studyapp.MainActivity (server) because it is unresponsive
+2025-05-29 18:31:09.354 300-384 WindowManager system_server I ANR in Window{fd7dd4f u0 com.example.studyapp/com.example.studyapp.MainActivity}. Reason:fd7dd4f com.example.studyapp/com.example.studyapp.MainActivity (server) is not responding. Waited 5002ms for MotionEvent
+2025-05-29 18:31:09.395 300-12566 ActivityManager system_server I Crashing app skipping ANR: com.android.server.am.ProcessErrorStateRecord@d90e124 Input dispatching timed out (fd7dd4f com.example.studyapp/com.example.studyapp.MainActivity (server) is not responding. Waited 5002ms for MotionEvent)
+2025-05-29 18:31:09.395 300-12566 ActivityManager system_server D Completed ANR of com.example.studyapp in 8ms, latency 0ms
+2025-05-29 18:31:14.378 1922-2017 MemInfoService com.android.expansiontools D memScan: [MemEntity(id=null, pid=12214, user=u0_a103, name=Script helper, pkg=com.example.studyapp, res=183, time=3, total=5178, ts=1748514674151, pr=20, ni=0, virt=14336, shr=102, s=S, cpu=0.0, mem=5.5, args=com.example.studyapp)]
+2025-05-29 18:31:15.031 300-318 ActivityTaskManager system_server W Activity destroy timeout for ActivityRecord{ff3be4e u0 com.example.studyapp/.MainActivity} t118 f}}
+2025-05-29 18:31:15.031 300-318 InputManager-JNI system_server W Input channel object 'fd7dd4f com.example.studyapp/com.example.studyapp.MainActivity (client)' was disposed without first being removed with the input manager!
+2025-05-29 18:31:24.950 1922-2017 MemInfoService com.android.expansiontools D memScan: [MemEntity(id=null, pid=12214, user=u0_a103, name=Script helper, pkg=com.example.studyapp, res=183, time=3, total=5119, ts=1748514684704, pr=20, ni=0, virt=14336, shr=102, s=S, cpu=0.0, mem=5.5, args=com.example.studyapp)]
diff --git a/gradle.properties b/gradle.properties
index 4387edc..d97a91d 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -18,4 +18,5 @@ android.useAndroidX=true
# Enables namespacing of each library's R class so that its R class includes only the
# resources declared in the library itself and none from the library's dependencies,
# thereby reducing the size of the R class for that library
-android.nonTransitiveRClass=true
\ No newline at end of file
+android.nonTransitiveRClass=true
+org.gradle.java.home=C:/Program Files/Java/jdk-21
\ No newline at end of file