Android笔记:关于so文件

项目里包含了多个带有so文件的第三方库,支持的平台数不一样。当应用跑在5.0系统上便会崩溃,后发现是有些第三方库的x86-64的so文件没有安装。

查看了官网的ABIManager,似乎写得并不够清晰。处理过程中,发现信鸽sdk附带的一份说明倒是让人很容易的理解so文件的安装机制。

1.信鸽的.so支持所有的android平台,但考虑到平时接入一般只需要armeabi平台,因此libs目录只提供该平台的.so,其它平台可在上层目录的All-Platform-SO找到。
2.嵌入.so可能存在的问题:
	a.so文件与jar包不匹配。
	解决办法:在更新jar时同时更新对应的so文件;
	b.当前工程已有某些平台的so,如只有armeabi平台,却添加信鸽所有平台导致打包时异常。
	解决办法:只添加当前工程已有的平台的信鸽so文件。具体可参考网上或以下示例:
		armeabi	   !此平台既有当前存在so又有信鸽,正常!
			--libCurrent.so			当前工程已有so
			--libtpnsSecurity.so	信鸽
			--libtpnsWatchdog.so	信鸽
		armeabi-v7a	!此平台既有当前存在so又有信鸽,正常!
			--libCurrent.so			当前工程已有so
			--libtpnsSecurity.so	信鸽
			--libtpnsWatchdog.so	信鸽
		mips	!!!错误,由于此平台只有信鸽,必须删掉mips目录!!!
			--libtpnsSecurity.so	信鸽
			--libtpnsWatchdog.so	信鸽
		x86		!!!错误,由于此平台只有信鸽,必须删掉x86目录!!!
			--libtpnsSecurity.so	信鸽
			--libtpnsWatchdog.so	信鸽
	c.若当前工程不存在so文件。
	解决办法:可复制所有信鸽平台或只复制armeabi平台

再结合其他参考文章,应该可以大概总结如下:

  1. 至少包含armeabi平台
  2. 多个不同库都有so文件时 就以包含支持最少平台的那个为准

其他参考:

1.http://www.open-open.com/lib/view/open1440421271716.html

2.http://stackoverflow.com/questions/30782848/how-to-use-32-bit-native-libaries-on-64-bit-android-device

时间: 2024-10-10 17:42:53

Android笔记:关于so文件的相关文章

Android笔记——在布局文件中插入另一个布局文件

假如有一个布局文件A.xml想把另外一个布局文件B.xml引进其布局,则可以通过下面的代码 <include layout="@layout/B" />

Android学习笔记之mainfest文件中android属性

Android学习笔记之mainfest文件中android属性 - Impossible is nothing - 博客频道 - CSDN.NET 以前的零散笔记, 共享一下, 有错误的地方还请指正. android:allowTaskReparenting 是否允许activity更换从属的任务,比如从短信息任务 切换到浏览器任务.---------------------------------------------------------------------------------

android开发学习笔记(一)-Manifest文件

一:概述 所有的app都要在根目录下AndroidManifest.xml文件,这个文件显示了app告诉android系统的基本信息.在app代码运行之前,android系统从这个文件获取基本信息 功能: 给app的java包起名作为这个app的唯一标识符 声明app中要使用的组件 决定哪些进程持有app组件 确定app需要的用户权限 它声明应用程序必须拥有哪些权限以访问API的被保护部分以及与其它应用程序交互 它声明应用程序必须拥有哪些权限以访问API的被保护部分以及与其它应用程序交互 声明a

Android 笔记之错误记录

前言--好记性不如烂笔头,记录Android学习过程中遇到的各种问题BUG.O(∩_∩)O 错误1 -- Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x0 错误原因--一般是int 型数据赋给String ,然后让TextView显示就会出现如上错误. 解决办法--用String.valueOf 或者在int数据后加"" 错误2-- 在布局文件中,文本的设置使用如下写法

Android笔记:利用InputStream和BufferedReader 进行字节流 字符流处理

通过socket获取字节流处理时最初使用的是BufferedReader和PrintWriter  这种方式在解析字符串时是比较方便的 但是在处理字节时不够方便最终还是回归到InputStream和OutputStream方式 不使用缓存直接使用字节流操作,一次传输的字节数据在300字节以内,目前没有测试差距会有多大. import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException;

Android笔记之 TTS中文发音

1.TTS 就是 Text to Speech ,把文本内容变为语音. 谷歌在Android 1.6 开始就支持TTS 了,但是可惜,只是支持英语法语德语等五种语言,唯独丫丫的木有我们中文. 所以,我们只能另外自己开发中文语音包程序. 目前主要有以下几种中文TTS . (1)开源项目 eyes-free  ,链接是:  http://code.google.com/p/eyes-free/ 在手机上安装了eyes-free  提供的   TTS Service Extended.apk 文件后,

我的Android笔记(十一)——使用Preference保存设置

Android中有四种持久化数据的方法:SQLite数据库.文件存储.Preference.ContentProvider. 四种方法各有专攻,而其中Preference是以类似Map的键值对形式存储的,最适合用来保存用户个人设置之类的信息. 可以用一个xml文件来配置一个设置界面,然后用专门的PreferenceActivity将其显示.PreferenceActivity是专业的设置界面,只要给它指定一个配置好的xml,它就能自动根据操作更改程序Preference的相应值. 比如在res目

Android笔记之四种launchMode

一.先来了解Task Task 顾名思义,任务,每一个Android应用在运行的时候,都会创建和维护一个属于自己的任务,而事实上,Task是一个包含栈结构的容器,该栈通常叫回退栈,用来保存当前所有Android应用中已经创建的窗口对象,通常我们看到的界面就是处于回退栈栈顶的窗口对象.当我们打开新的一个界面,那么之前的界面(窗口对象)就会压入栈内,让出栈顶位置给新来的界面(窗口对象):当关闭该窗口对象时,系统会首先将该对象弹出栈,并销毁该对象.当栈里最后一个窗口对象被弹出栈后,回退栈为空,这时候回

Android笔记——Android中数据的存储方式(二)

我们在实际开发中,有的时候需要储存或者备份比较复杂的数据.这些数据的特点是,内容多.结构大,比如短信备份等.我们知道SharedPreferences和Files(文本文件)储存这种数据会非常的没有效率.如果学过JavaWeb的朋友,首先可能想到的是数据库.当然了数据库是一个方案,那么是否还有其他的解决方案呢?今天我们在讲下Android笔记——Android中数据的存储方式(一) 提到的除了SharedPreferences和Files(文本文件)以外的其他几种数据储存方式:xml文件.SQL