001. 为什么我的 adb 老是断开连接?
开着 Android Studio 连着手机,刷着 logcat,突然就出现:
read: unexpected EOF!
这时候拔插一下手机数据线又恢复了,但老这么拔插也不是办法。根本原因是手机 adb logcat 的缓冲区不够了,解决方法其实很简单,设大一些就可以了:
$ adb logcat -G 20M
查看现在缓冲区多大:
$ adb logcat -g
如果隔断时间被自动恢复了就再设置一次
002. 升级 Android Gradle Plugin 4 后编译不过
在 Android Gradle Plugin 4.0 之前,CMake 里通过 IMPORTED 链接预编译好的 so 文件,只有将这些 so 文件放在 jniLibs 目录里,才能打包到 APK 里,其他路径的 so 将会自动被忽略。
在 Android Gradle Plugin 4.0 之后,只要在 CMake 里 IMPORTED 的 so 都会自动打包到 APK 里。而如果这个 so 又刚好也在 jniLibs 目录里的话,将会出现如下错误:
* What went wrong:
Execution failed for task ':app:mergeDebugNativeLibs'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
> More than one file was found with OS independent path 'lib/armeabi-v7a/libprebuilt.so'
知道了原因后,解决就很简单了,对于在 CMake 中 IMPORTED 的 so:
- 如果 so 需要打包进 APK 里,把 so 放到 jniLibs 之外的目录,或者在 build.gradle 里设置 packFirst
android {
...
packagingOptions {
pickFirst "**/libprebuilt.so"
}
}
- 如果 so 不需要打包进 APK 里,在 build.gradle 里设置 exclude
android {
...
packagingOptions {
exclude "**/libprebuilt.so"
}
}
003. meson.build 文件是什么?
在 Github 上有些工程有 meson.build 文件,表示它使用到是 meson 构建系统。meson 是用 Python 写的构建系统,和 CMake 类似。meson 会生成对应系统的构建配置,比如:GNU/Linux 的 ninja,Windows 的 Visual Studio,MacOS 上的 Xcode。
使用 meson 构建的知名工程:QEMU, systemd,simde, 以及很多 GNOME 项目都支持里 meson。
简单几步编译使用 meson.build 的工程:
- 安装
$ pip install --user meson ninja
安装后按提示将 meson 所在路径加到 PATH 环境变量里。
- 编译 & 测试
$ cd /path/to/source/root
$ meson builddir && cd builddir
$ meson compile
$ meson test
作者:CoderZh
微信关注:hacker-thinking (代码随想)
本文出处:https://blog.coderzh.com/2021/06/05/code-tips-1/
文章版权归本人所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。