macOS Mojave (10.14.3) Android Studio 3.3.1 NDK 19.1.5304403 导入并构建Vuh项目

以前在 Android Studio 3.2.1上vuh库使用的例子 中实现了一个使用 vuh 库的例子。 那个例子中的 vuh 库是我们编译好 libvuh.so 之后直接引用的,我们下面实现通过直接编译代码实现整合。

尝试过使用 ExternalProject_addinclude 的方式包含 vuh 库,但是都不是很成功。

其中 ExternalProject_add 导入的项目只能编译一次,即使指定 BUILD_ALWAYS 1 也没用,这个应该是 Ninja 导致的问题,导致当出现多个 ABI 或者 vuh 库代码变动之后,不能重新编译,出现各种编译错误。

使用 include 包含的项目会导致路径信息不正确,无法找到源代码文件。

最后使用 add_subdirectory实现。

修改之后的几个关键文件如下:

注意: VUH_ROOT_DIR 这个变量中指定 vuh 库代码的位置

注意:由于 vuh 库需要 CMake 3.8 。因此,我们需要手工指定CMake版本为3.10.2 。

如下:

如果出现如下错误:

则执行如下操作:

如果出现如下错误:

则删除代码中的 jniLibs/armeabi-v7a/libvuh.so 即可解决问题。

完整的例子点击此处下载 vuhAndroid

参考链接


macOS Mojave (10.14.3) Android Studio 3.3.1 指定使用CMake 3.10.2版本

目前最新版本的 Android Studio 3.3.1默认使用CMake 3.6版本,但是已经支持 CMake 3.10.2 版本了。

新版本的 CMake 3.10.2 新增了 FindVulkan.cmake 等一系列的改进,对于很多项目来说,会更友好。

目前默认依旧使用 CMake 3.6 版本,但是可以手工指定使用 CMake 3.10.2

继续阅读macOS Mojave (10.14.3) Android Studio 3.3.1 指定使用CMake 3.10.2版本

错误 程序包org.apache.http.conn.util不存在

开发的时候遇到了这个问题,记录下下次就知道了。这个是因为在 sdk22 以后的版本不在支持了!!!

程序包 org.apache.http.conn.util 不存在,然后搜索了下,在 appbuild.gradle 文件中加上useLibrary 'org.apache.http.legacy' 就可以了。

如下:

参考链接


错误 程序包org.apache.http.conn.util不存在

Android Studio 3.2.1编译Vulkan示例项目

最近在学习Vulkan,根据Google官方给出的文档,是存在一些问题的,总结一下:


如果代码下载不成功,可以本站下载一份拷贝。 点击这里下载 VulkanSamples vulkan-basic-samples
继续阅读Android Studio 3.2.1编译Vulkan示例项目

解决Android Studio 3.2.1中NDK编译代码时候出现警告": warning: conflicts with previous declaration here [-Wattributes]"

在使用Android Studio 3.2.1 结合 NDK r16/r18编译代码时候出现如下警告:

关键是出现警告的代码文件中并不一定存在abs函数的调用。

这个警告产生的条件是在编译器中指定了STL,并且指定编译器为GCC,调用的源代码文件中恰好有STL的代码。

类似如下:

原因在于新版本的NDK r16/r18中,对于GCC部分的适配已经不是非常完善了,已经逐步迁移到CLANG(LLVM)了。导致STL进行编译的时候,会出现一些警告信息。这个警告信息是STL库的警告信息,跟我们自己的代码没有关系。

只需要指定 "-DANDROID_TOOLCHAIN=clang" 即可解决这个问题。

参考链接


NDK r13, -fexceptions -Wall --> warning: conflicts with previous declaration

Android Studio 3.2.1解决错误信息"No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android"

在用Android Studio 3.2.1导入以前的项目,进行编译的时候,报告如下错误信息:

这个错误信息的原因是从NDK r17版本开始,已经不支持"armeabi、mips、mips64"这三种ABI格式了,而当前机器上安装的NDK版本是NDK r17之后的版本。

不过这个提示很能迷惑人,会让人误以为自己的build.gradle中配置了MIPSABI。实际上根本没有配置,是低版本的构建工具自己在默认构建MIPS格式,而又找不到对应的工具链。

解决方法很简单,要么使用低于NDK r17NDK版本,要么修改主工程的build.gradle,找到如下

将其中的

修改成

高版本的构建工具,才能适配高版本的NDK

参考链接


Android Studio 3.2.1解决错误信息"ABIs [armeabi] are not supported for platform. Supported ABIs are [arm64-v8a, armeabi-v7a, x86, x86_64]."

在用Android Studio 3.2.1导入以前的项目,进行编译的时候,报告如下错误信息:

问题发生的原因在于以前的代码在build.gradle中指定了abiFilters 'armeabi',但是从NDK r17版本开始,已经不支持"armeabi、mips、mips64"这三种ABI了。

虽然可以简单的修改成abiFilters 'armeabi-v7a',来解决问题,但是我们更希望能有一个办法,在老版本的支持abiFilters 'armeabi'NDK上继续使用abiFilters 'armeabi'进行编译,用来兼容老设备。而在只支持abiFilters 'armeabi-v7a'的设备上,我们使用abiFilters 'armeabi-v7a'保证能编译通过。

我们通过执行NDK目录下的ndk-which输出的支持的ABI列表的方式获取当前的NDK是否支持abiFilters 'armeabi',如果不支持,我们就设置为abiFilters 'armeabi-v7a'

继续阅读Android Studio 3.2.1解决错误信息"ABIs [armeabi] are not supported for platform. Supported ABIs are [arm64-v8a, armeabi-v7a, x86, x86_64]."

Android Studio 3.2.1在build.gradle中输出自定义日志&查看构建日志

在使用Android Studio开发Android项目的时候,我们有时候需要在build.gradle中增加一部分日志,来分析编译执行情况。

早期版本只能使用logger对象输出内容,如下:

目前最新的gradle 4.6版本已经支持println函数输出日志,如下:

只是,目前的Android Studio 3.2.1版本中,默认情况下,输出信息被简化了,导致我们找不到添加的输出内容。

只需要点击Build选项卡中的Toggle view选项,就可以看到我们的输出了。

具体操作如下图:
继续阅读Android Studio 3.2.1在build.gradle中输出自定义日志&查看构建日志

解决Android Studio 3.2.1版本在编译Vulkan时报告错误"Could not find com.android.tools.build:aapt2:3.2.1-4818971"

目前的最新Android Studio 3.2.1版本在编译Vulkan时报告错误"Could not find com.android.tools.build:aapt2:3.2.1-4818971",详细错误信息如下:

导致问题的原因为源代码根目录下的build.gradle中缺少对于google源服务器的配置(话说,貌似以前版本的都在jcenter中可以找到,最新版本的,好像没有上传到jcenter服务器了,估计是google的商业策略了,在此不多做评述)

打开该文件里面的内容显示如下:

解决方法为在allprojects字段中增加google()源服务器。

修改后的配置变更如下:

参考链接


Build errors after Android Studio 3.2.1 upgrade