构建 SmartCamera 项目提示找不到 libgnustl_shared.so 这个包.
根据官方 issue
中作者的回答: https://github.com/pqpo/SmartCamera/issues/7#issuecomment-422299389
将 arguments '-DANDROID_STL=gnustl_shared'
这句注释掉后重新构建又报了这个错误
SIMPLE: Error configuring
没啥具体的信息, 很难判断, 于是我去官方 issue
提问(这是我的提问). 这几天过年没人回答我, 后来我估计是我用的 NDK
版本不同的原因, 因为下载的是最新的 r19
版本. 不过我暂时不打算降级, 而是准备解决下这个问题.
PS: 2019年4月24日 更新, 还是降级到r17c版本吧. 脸好疼
到这个链接下载 r17c
版本: https://developer.android.com/ndk/downloads/older_releases.html
解压到 SDK
目录: C:\android\sdk\
(替换成你的 sdk
路径.)
在项目中, 使用快捷键: Ctrl + Shift + Alt + S
打开 Project Structure
在界面上的 Android NDK Location
下设置 r17c
版本的目录, 接着 apply
确定并关闭窗口.
通过搜索问题, 得到了下面两个答案:
第一个是说通过下面这个命令可以在终端中得到报错的详细信息.
gradlew build --stacktrace
(其实在该问题页面的第三个回答已经点出我的问题所在: https://stackoverflow.com/a/54138701/8920453)
于是我在打开了 SmartCamera
项目的 Android Studio
的 Terminal
控制台中输入上面的命令构建. 结果又报了
cmake cannot find the build tool "ninja"
这个错误在上面的第二个答案也可以得到验证.
于是, 开始安装 ninja
这个包.
参考两个链接:
- https://blog.csdn.net/darren2015zdc/article/details/74504917
- https://github.com/ninja-build/ninja/blob/master/HACKING.md (官方英文)
下面是我的执行步骤:
-
打开命令行窗口
-
cd
进入workspace
(Android
项目工作目录) 使用下面两个命令把ninja
项目从github
上拉下来.git clone git://github.com/ninja-build/ninja.git && cd ninja git checkout release
-
接着点击开始菜单搜索
VS2015 x86 x64 兼容工具命令提示符
然后右键以管理员身份运行
-
使用下面的两个命令配置
ninja
, 第二个命令需要先 cd 到workspace
里的ninja
项目目录中去执行"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x64 python configure.py --bootstrap
-
配置好用下面这个命令测试下是否正常.
ninja --help
-
没问题的话就把
ninja
的项目目录放到环境变量PATH
中.
装完后发现换了另外一个异常了.
Build command failed.
...
/operations.hpp:74:16: fatal error: 'ext/atomicity.h' file not found
#include <ext/atomicity.h>
^~~~~~~~~~~~~~~~~
1 error generated.
通过搜索, 又换了另一个参数, 参考: https://blog.csdn.net/luozhuang/article/details/36418229
arguments '-DANDROID_STL=gnustl_static'
使用上面这个参数, 不要 build
, 直接 run
项目到测试机上, 总算不再报错了. 不过此时出现了另一个异常, 如下图(这是我自己项目中的, 官方Demo
也有同样的问题, 是兼容问题, 出现的机子品牌是魅族
, Nexus
没有这问题).
排查了下发现原来是因为这个Activity要全屏展示扫描窗口, 所以在 onCreate 里加了下面使全屏的代码, 才导致了奇怪的问题.
// 去除状态栏
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
而且哪怕修改为使用 xml 文件里改 theme 的方式设置全屏也会导致同样的问题.
之后我用延时的方式设置就正常了.
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
// 去除状态栏
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
}, 1000);