1.Kotlin插件1.2.50版本以后,可能会导致在app.iml文件中使用Kotlin SDK 替换Android SDK,导致sync fail,AS提示配置Android SDK。
解决:使用kotlin 1.2.40或以下版本,暂时不升级。
参考链接:Android Studio 编译时提示 Error: Please select android sdk.
There is a problem about kotlinx.coroutines 0.23.1
2.使用api project(path: ':easeui', configuration: 'default'),引入工程容易报错,导致导致sync fail,替换成api project(':easeui')
猜测:gradle版本升级导致的不兼容
3.Android-ABIFilter-Device supports x86,but APK only supports armeabi-v7a,armeabi,x86_64
模拟机的下面显示:
Device supports x86,but APK only supports armeabi-v7a,armeabi,x86_64;
模拟机的设备是 x86,但是运行的这个程序的 apk 却只支持 armeabi-v7a,armeabi 和 x86_64 三种。
这个问题不仅仅是一个问题,它是很多个问题
是的,那么问题来了
- x86,armeabi-v7a,armeabi,x86_64 到底是什么玩意?
- 我们的代码是在哪里设置apk对它们支持的?
- 怎么查看和设置模拟机的支持类型?
- 为什么我连接的真机大华为 HUAWEI PE-TL20 没有显示这样的错误?
1.x86,armeabi-v7a,armeabi,x86_64 到底是什么玩意?
这四个玩意都是 CPU 架构类型的名称。
目前 Android 支持的 CPU 架构有有以下几种:
CPU架构 |
---|
描述 |
---|
armeabi | 第5代 ARM v5TE,使用软件浮点运算,兼容所有ARM设备,通用性强,速度慢 |
---|---|
armeabi-v7a | 第7代 ARM v7,使用硬件浮点运算,具有高级扩展功能 |
---|---|
arm64-v8a | 第8代,64位,包含AArch32、AArch64两个执行状态对应32、64bit |
---|---|
x86 | intel 32位,一般用于平板 |
---|---|
x86_64 | intel 64位,一般用于平板 |
---|---|
mips | 少接触 |
---|---|
mips64 | 少接触 |
---|---|
2.我们的代码是在哪里设置apk对它们支持的?
如果你和我用的开发工具都是 Android Studio 的话,那么在程序的主module 的 build.gradle中你会发现有这么个代码:
defaultConfig {
ndk {
abiFilters "armeabi", "armeabi-v7a", "x86_64"
}
}
就是这里设置了支持的 CPU 的类型, 和刚才提示的 apk 支持的 CPU的类型是一模一样的. 但是,在这里,我也发现了一个不认识的标签属性 abiFiliter
硬翻过来是 abi 过滤器, abi 是什么?
ABI, (application binary interface,缩写为ABI),应用二进制接口。在计算机中,ABI 描述了应用程序(或者其他类型)和操作系统之间或其他应用程序的低级接口
3.怎么查看和设置模拟机的支持类型?
这个问题非常简单,我们在创建一个模拟机的时候,就有 ABI 的选择,因为粗心,之前一直都没有发现,看下图
4.为什么我连接的真机大华为 HUAWEI PE-TL20 没有显示这样的错误?
问题解决到这里,我们几乎都猜到了答案,就是大华为 HUAWEI PE-TL20 这个设备支持的CPU 架构 ,肯定是 代码中支持的 armeabi-v7a,armeabi,x86_64 中的一种。
到底是其中的哪一个呢?我们可以通过adb命令行的方式查看。
具体步骤:
1.连接手机到电脑上
2.打开 cmd 命令窗口,输入命令 adb shell
3.然后输入命令 cat /proc/cpuinfo
如果你使用adb的过程中,出现了adb错误“'adb' 不是内部或外部命令,也不是可运行的程序或批处理文件
,不要慌,这是因为没有配置 adb 的环境变量,配置一下,就好了。具体配置步骤,可以移步这里 adb错误“’adb’ 不是内部或外部命令,也不是可运行的程序或批处理文件
大华为 HUAWEI PE-TL20 的结果如下:
参考:Android-ABIFilter-Device supports x86,but APK only supports armeabi-v7a,armeabi,x86_64
4.More than one file was found with OS independent path 'lib/armeabi/libBugly.so'
android {
packagingOptions {
pickFirst 'lib/armeabi/libBugly.so'
或者 exclude 'lib/armeabi/libBugly.so'
}
}
5.Suggestion: use tools:overrideLibrary="" to force usage
异常提示:
应用在Android Studio Build的时候,抛出了如下异常:
Error:Execution failed for task ‘:app:processDebugManifest’.
> Manifest merger failed : uses-sdk:minSdkVersion 8 cannot be smaller than version 9 declared in library [jp.wasabeef:blurry:1.0.0] /Users/xxx/xxx/app/build/intermediates/exploded-aar/jp.wasabeef/blurry/1.0.0/AndroidManifest.xml
Suggestion: use tools:overrideLibrary=”jp.wasabeef.blurry” to force usage
错误原因:
出现这个错误的原因是我引入的第三方库最低支持版本高于我的项目的最低支持版本,异常中的信息显示:我的项目的最低支持版本为8(Android 2.2),而第三方库的最低支持版本为9(Android 2.3),所以抛出了这个异常。
解决办法:
在AndroidManifest.xml文件中 标签中添加<uses-sdk tools:overrideLibrary="xxx.xxx.xxx"/>
,其中的xxx.xxx.xxx为第三方库包名,如果存在多个库有此异常,则用逗号分割它们,例如:<uses-sdk tools:overrideLibrary="xxx.xxx.aaa, xxx.xxx.bbb"/>
,这样做是为了项目中的AndroidManifest.xml和第三方库的AndroidManifest.xml合并时可以忽略最低版本限制。
参考链接:
【Android】Suggestion: use tools:overrideLibrary="" to force usage
http://blog.csdn.net/maosidiaoxian/article/details/42671999
http://stackoverflow.com/questions/27095077/how-do-i-use-toolsoverridelibrary-in-a-build-gradle-file
http://blog.csdn.net/b275518834/article/details/45557521
6.ABIs [armeabi] are not supported for platform. Supported ABIs are [armeabi-v7a, arm64-v8a, x86, x86_64]
起因:Android studio升级到3.1.2,然后顺便升级了sdk、ndk(v17.0)然后编译出现了异常
原因:ndk(v17)已不在支持mips、armeabi等CPU架构,只支持armeabi-v7a, arm64-v8a, x86, x86_64,
,然后所有涉及到mips和armeabi集体过时了。
解决办法一:剔除mips、armeabi等CPU架构,添加armeabi-v7a, arm64-v8a, x86, x86_64,理想很丰满,现实很骨感。项目里涉及的so大部分都只支持armeabi;于是请看解决二
解决二(亲测顺利解决):Youtobe视频地址:https://youtu.be/G9oPug80oe0,NDK降级到v16,替换AS里NDK或者修改ndk-bundle路径即可
下载地址:https://developer.android.com/ndk/downloads/older_releases