解决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

解决git clone --recursive部分失败后继续检出代码

在使用如下命令检出Vulkan的时候,发生失败,Vulkan的代码已经成功检出,但是子模块没有完成


提示的出错信息如下:

可以使用如下命令继续检出子模块:

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

解决ubuntu 16.04下更改MySQL的数据库位置

ubuntu 16.04下使用APT安装的MySQL的数据库,目录同时接受apparmor的管理,因此在修改数据库目录的时候,需要同步更新apparmor的配置文件。如果只是迁移数据库的话

对于日志文件一起迁移的情况

如果依旧启动失败,并且 MySQL 是从低版本升级上来的,并且目前正在使用的版本大于或者等于 MySQL 5.7 ,执行 journalctl -xe 观察到类似如下内容:

那么,此时的MySQLapparmor 配置文件可能还没有更新,这个时候,我们需要手工在/etc/apparmor.d/usr.sbin.mysqld 增加几个文件目录的权限,如下:

另外,注意到我这边出现

此时,如果检查目录权限,出现如下现象:

那么需要变更用户的所有者,早期版本支持所有者为 adm 用户组,新版本需要 mysql ,我们执行如下命令:

参考链接


解决ubuntu 16.04下adb shell报错"error: insufficient permissions for device"

最近在ubuntu 16.04下执行adb shell,时候报告如下错误:


原因为当前用户的权限不能调用系统底层的一些权限,需要提权,使用sudo执行即可解决此问题。

Apple的官方开源项目网站

Apple的开源其实做得很棒!http://www.opensource.apple.com/,这个Apple的官方开源网站真的是一个大宝藏。真的是不怕你知道,就怕你学不完。

WebKit就不用说了。在OS X和iOS分类下,有对应的WebKit的版本号,这里也可以快速知道相应操作系统里使用的WebKit版本。
Objective-C Runtime。objc运行时是如何工作的?如何使用mach-o里的__TEXT.__objc_xxx和__DATA._objc_xxx(__OBJC segment现在没有了?)?可以查看OS X分类下某个系统版本下的objc4-XXX目录。
Libc。想知道c库里的某个函数如何实现?可以查看OS X分类下某个系统版本下的Libc-XXX目录。
xnu。想学习内核?可以查看OS X分类下某个系统版本下的xnu-XXX目录。
想了解和学习各种工具如何实现?otool?nm?可以查看Developer Tools分类下某个Xcode版本下的cctools-XXX目录。nm.c就在这个目录里的msic目录里。
还有很多很多。。。
某个主题目录可以直接下载,而且,有一些主题里会有Xcode project文件,这样可以很方便查看和搜索。另外,某些主题的源代码应该是不完全的,不同的操作系统版本里会有不同,如果某个主题里的某个源代码在新的操作系统里没有找到,可以尝试在旧的操作系统里找一下。

http://www.opensource.apple.com/,你值得拥有!

参考链接


Apple Open Source