构建 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.youkuaiyun.com/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.youkuaiyun.com/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);

本文详细记录了解决SmartCamera项目构建过程中遇到的libgnustl_shared.so缺失问题,涉及NDK版本调整、ninja安装及参数修改等关键步骤。
3万+

被折叠的 条评论
为什么被折叠?



