记录遇到过的 bug。
# 打开 monitor.bat 时报错:An error occured。
jdk 版本太高了,改成了 1.8 版本顺利运行。
# 夜神模拟器无法自动连接 Android Studio。
切换到夜神模拟器安装目录下的 bin 文件夹,执行以下指令:
1 | $ adb connect 127.0.0.1:62001 |
# 使用 Android Killer 重打包失败
更换成最新的 apktool。
# 找不到 ddms
ddms 已经更名成 monitor,并且使用前最好将 java 版本降为 javaSE1.8,否则可能报错。
# 使用 ddms 查看不了夜神模拟器的日志输出
换成雷神模拟器。
# 使用 Android Studio 时代码补全功能消失
- 关闭省电模式。
- 重新进行以便 Grald Sync
# 在 Android studio 中加载动态库时提示找不到动态库
在 build.gralde 中的 android {} 里添加以下代码。
1 | $ sourceSets { |
# 提示在动态库中找不到函数
确定动态库已经加载,检查.so 文件,发现其中没有我自己编写的代码。查看 ndk-build 的 log,发现虽然没报错且正常生成.so 文件,但是没有编译.c 文件的步骤。检查 Android.mk 文件,发现 LOCAL_SRC_FILES 标签少写了最后的 S,导致 ndk-build 没有编译指定文件。
# 使用 ndk-build 编译时提示 JNIEXPORT 后面缺少;符号
自动生成的.h 文件中,函数定义末尾少了;符号,加上就不报错了。
# 使用 Frida-dexdump 脱壳时报错:script has been destroyed
可能是框架问题,但在本次实践中是由于 app 不稳定崩溃导致的。
# 使用 class 结构时,发现该结构实际长度比其中的数据长度长
因为编译器按照 4 字节对 class 进行对齐,不足的补 0,可以在代码开头加上以下声明来取消对齐。
1 | # pragma pack (1) // 按照 1 字节对齐,等于没对齐。 |
# 使用 malloc 分配空间后,向其中写入 char,但是发现 cout 时后续跟了许多脏字符
如果 malloc 申请的空间长度等于需要写入的字符长度,那么 cout 时在字符末尾找不到终止符,会继续读,直到遇见终止符为止。建议使用 calloc 来分配空间,该函数能将分配的空间初始化为 0,并且申请的空间长度应该为字符长度 + 1。