From b2ec85ddb94dcd6ff63ff68dc278ed02422574a1 Mon Sep 17 00:00:00 2001 From: yjj38 Date: Thu, 29 May 2025 22:05:49 +0800 Subject: [PATCH] Add native methods to manipulate system and device info This commit introduces multiple native methods, written in C++, to interact with system and device info such as RAM, CPU, disk, and uptime. It also includes mechanisms to modify or reset system properties, bypass anti-debugging, and handle file path redirection. Additionally, ensures proper JNI bindings to avoid runtime errors like `UnsatisfiedLinkError`. --- app/build.gradle | 24 +- app/src/main/AndroidManifest.xml | 1 + app/src/main/cpp/CMakeLists.txt | 28 ++ app/src/main/cpp/fk_common_struct.h | 67 ++++ app/src/main/cpp/infoct.cpp | 305 ++++++++++++++++++ .../com/example/studyapp/MainActivity.java | 15 + .../studyapp/device/ChangeDeviceInfo.java | 26 +- app/src/main/jniLibs/arm64-v8a/libnative.so | Bin 0 -> 81368 bytes err.log | 176 +++++----- gradle.properties | 3 +- 10 files changed, 541 insertions(+), 104 deletions(-) create mode 100644 app/src/main/cpp/CMakeLists.txt create mode 100644 app/src/main/cpp/fk_common_struct.h create mode 100644 app/src/main/cpp/infoct.cpp create mode 100644 app/src/main/jniLibs/arm64-v8a/libnative.so 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 0000000000000000000000000000000000000000..255178e5a941063338fa9ceb9a89871dad6efba8 GIT binary patch literal 81368 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.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