文档章节

【转】关于Android的.so文件你所需要知道的(二)

拉风的道长
 拉风的道长
发布于 2016/03/01 18:52
字数 745
阅读 387
收藏 5

Androidndk开发打包时我们应该如何注意平台的兼容(x86,arm,arm-v7a)

很多朋友在开发Android JNI的的时候,会遇到findlibrary returned null的错误,因为某种原因,so没有打包到apk中。下面浅析下引起该错误的原因以及平台兼容性问题。

一、没有将so打包到apk中的原因。

当你发现到findlibrary returned null的错误时,其实最直接的解决办法就是解压apk,看看apk中的x86、armeabi、armeabi-v7a文件夹中是否有对应的so,此时你可能在对应的文件夹下发现少了so,然后再去查原因即可。

一般有两方面的原因:

1.apk中有对应平台的文件夹,但是文件夹里却没有对应的so。

举个例子,apk中lib下面一旦出现x86文件夹,程序运行的时候就会去加载x86对应的库,但是如果此时x86文件夹没有将so放进来,则会遇到报错。

2.第三方对平台的兼容策略与自己不一致。

可能第三方选择了只支持armeabi(假设某支付sdk),但是我们的游戏在Application.mk中配置了APP_ABI := all,如此,我们的游戏打包出 了所有平台的so,但是第三方却只有armeabi文件夹对应的so,造成程序运行异常,这种情况在开发期间最常见,一些小公司由于测试人员不足或者测试设备不足,上线后才发现这个问题也不奇怪。

二、对于平台的支持,我们应该如何选择。

    armeabi-v7a确实是可以兼容armeabi的,而v7a的CPU支持硬件浮点运算,目前绝大对数设备已经是v7a了,所以为了性能上的更优,就不要为了兼容放到armeabi。 x86是可以兼容armeabi平台运行的,无论是armeabi-v7a还是armeabi,同时带来的也是性能上的损耗,另外需要指出的是,打包出的x86的so,总会比armeabi平台的体积更小,对于性能有洁癖的童鞋们,还是建议在打包so的时候支持x86。具体会有怎样的性能损耗,作者还不能说的非常清楚,可以访问下intel官方在csdn的博客。 总结一下在项目中的表现就是: 

    如果项目只包含了 armeabi,那么在所有Android设备都可以运行; 如果项目只包含了 armeabi-v7a,除armeabi架构的设备外都可以运行; 如果项目只包含了 x86,那么armeabi架构和armeabi-v7a的Android设备是无法运行的; 如果同时包含了 armeabi, armeabi-v7a和x86,所有设备都可以运行,程序在运行的时候去加载不同平台对应的so,这是较为完美的一种解决方案,同时也会导致包变大。


本文转载自:http://www.it165.net/embed/html/201410/2707.html

共有 人打赏支持
拉风的道长
粉丝 54
博文 110
码字总数 55629
作品 0
昌平
程序员
私信 提问
Android静态安全检测 -> Activity组件暴露

Activity组件暴露 - exported属性 一、android:exported 该属性用来标示,当前Activity是否可以被另一个Application的组件启动 1. true 表示允许被启动 2. false 【1】表示不允许被启动,这个...

老鹰a
06/29
0
0
Android静态安全检测 -> Broadcast Receiver组件暴露

Broadcast Receiver组件暴露 - exported属性 一、android:exported 该属性用来标示,当前Broadcast Receiver是否可以从当前应用外部获取Receiver message 1. true 表示可以 2. false 【1】表...

老鹰a
06/29
0
0
Android Intent Flag的介绍

一、Activity和Task(栈)的关系   Task就像一个容器,而Activity就相当与填充这个容器的东西,第一个东西(Activity)则会处于最下面,最后添加的东西(Activity)则会在最低端。从Task中取...

茶码古道
2012/09/10
0
0
Android LaunchMode与任务栈总结

网上关于launch mode的资料有很多,尽可参考. 本文旨在进行稍微深入一点的说明. 简单总结:四中Activity加载方式 standard 默认加载方式.每当需要一个Activity instance的时候系统都会创建一个...

叛教者尤里安
2013/09/30
0
1
Android模拟器和安装APK文件

以前不知道再哪里看见过这么一句话:Google和百度把现在的人变得白痴了。其实,这 是说的那些一有问题就搜索而不思考的人。我有的时候懒的话就这样,不去思考,直接搜索,然后什么都得不到。...

红薯
2009/06/17
4.2K
0

没有更多内容

加载失败,请刷新页面

加载更多

python自然语言处理快速入门2常见的NLP操作

在本章中,我们将讨论我们文本数据进行的一些常见数据预处理操作,以适配典型的机器学习算法,如贝叶斯、决策树,逻辑回归等等。这些算法都只适用于数字向量,而不是文本。 那么我们如何将文...

python测试开发人工智能安全
17分钟前
0
0
OSChina 周一乱弹 —— 温柔的人应该这样

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @clouddyy :#每日一歌# 《フィクション-sumika》 《フィクション-sumika》 手机党少年们想听歌,请使劲儿戳(这里) 假期时间干嘛去, @for...

小小编辑
34分钟前
9
4
[LintCode] Serialize and Deserialize Binary Tree(二叉树的序列化和反序列化)

描述 设计一个算法,并编写代码来序列化和反序列化二叉树。将树写入一个文件被称为“序列化”,读取文件后重建同样的二叉树被称为“反序列化”。 如何反序列化或序列化二叉树是没有限制的,你...

honeymose
今天
6
0
java框架学习日志-7(静态代理和JDK代理)

静态代理 我们平时去餐厅吃饭,不是直接告诉厨师做什么菜的,而是先告诉服务员点什么菜,然后由服务员传到给厨师,相当于服务员是厨师的代理,我们通过代理让厨师炒菜,这就是代理模式。代理...

白话
今天
26
0
Flink Window

1.Flink窗口 Window Assigner分配器。 窗口可以是时间驱动的(Time Window,例如:每30秒钟),也可以是数据驱动的(Count Window,例如:每一百个元素)。 一种经典的窗口分类可以分成: 翻...

满小茂
今天
19
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部