Android.PackageManager
1. Apk的安装和更新过程是怎样的呢?
Ref[1]
2. 在安装.apk程序包时, .so是如何选择并安装的?
这里的选择是指,是如何根据CPU_ABI和CPU_ABI2的值来选择合适的.so的。Ref [2]
最近遇到ZTE V975这款机型,它的CPU_ABI和CPU_ABI2值如下:
CPU_ABI=x86
CPU_ABI2=armeabi-v7a
而如果我们依赖的第三方库只支持armeabi (即只有armeabi/libxxx.so),这是在款机型上就会
因为loadlibrary失败,根据Ref[2]描述的确应该失败。在App Project中我们将armeabi/libxxx.so修改为
armeabi-v7a/libxxx.so,这样在这款机型就可以运行,.so库还是那个库,只不过armeabi改变为了armeabi-v7a。
但是armeabi-v7a的CPU_ABI是支持armeabi指令集的。在iOS上,armeabi-v7a的CPU_ABI就可以
运行armeabi架构的库。
回到Android,这样Android App中使用基于ndk开发的.so库,
就会有以下问题:
A:) CPU_ABI=x86 CPU_ABI2=armeabi-v7a
B:) CPU_ABI=armeabi-v7a CPU_ABI2=x86
C:) CPU_ABI=x86 CPU_ABI2=armeabi
D:) CPU_ABI=armeabi CPU_ABI2=x86
E:) CPU_ABI=armeabi CPU_ABI2=armeabi-v7a
F:) CPU_ABI=armeabi-v7a CPU_ABI2=armeabi
这样,我们so需要有lib/armeabi/libxxx.so和lib/x86/libxxx.so就可以支持以上6中组合。
Reference
1. http://java.dzone.com/articles/depth-android-package-manager
2. NDK的文档: CPU-ARCH-ABIS 中有讲根据ABI的值来选择合适的.so
https://github.com/sssemil/android-ndk/blob/master/docs/CPU-ARCH-ABIS.html
http://stackoverflow.com/questions/16105791/using-armv7-and-arm-library-in-the-same-android-app
http://stackoverflow.com/questions/17813300/in-which-path-so-file-will-be-copied-when-application-installed-from-apk-in-an
3. https://developer.android.com/tools/sdk/ndk/index.html
Android.PackageManager的更多相关文章
- Android PackageManager基础知识
一.PackageManagerService启动过程 SystemServer首先启动,创建一个ServerThread线程来启动所有Android核心服务,其中PackageManagerServ ...
- Android PackageManager源码浅析以及静默安装实现方式
Aandroid应用管理 >http://blog.csdn.net/sk719887916/article/details/50314017 skay整理. >201 ...
- Android PackageManager packages.xml文件格式
packages.xml文件存放在/data/system目录下 该文件记录了系统中所有应用程序的包管理相关信息 PmS根据该文件进行包管理的各种操作 标签名称 所包含的值举例 last- ...
- Android PackageManager:queryIntentActivities
Intent intent = new Intent(Intent.ACTION_MAIN, null); intent.setPackage(getPackageName()); intent.ad ...
- Android开发-API指南-<uses-feature>
<uses-feature> 英文原文:http://developer.android.com/guide/topics/manifest/uses-feature-element.ht ...
- Android 免Root实现Apk静默安装,覆盖兼容市场主流的98%的机型
地址:http://blog.csdn.net/sk719887916/article/details/46746991 作者: skay 最近在做apk自我静默更新,在获取内置情况下,或者已root ...
- Android随笔之——PackageManager详解
参考:http://www.cnblogs.com/xingfuzzhd/p/3374504.html 今天要讲的是PackageManager.Android系统为我们提供了很多服务管理的类,包括A ...
- [转载] Android随笔之——PackageManager详解
本文转载自: http://www.cnblogs.com/travellife/p/3932823.html 参考:http://www.cnblogs.com/xingfuzzhd/p/33745 ...
- [Android Pro] PackageManager#getPackageSizeInfo (hide)
referce to : http://www.baidufe.com/item/8786bc2e95a042320bef.html 计算Android App所占用d的手机内存(RAM)大小.App ...
随机推荐
- iOS 两个页面之间的跳转
-------->-------->-------->-------->-------->-------->--------> 以上完成页面one跳到页面 ...
- java 集成友盟推送
原文:https://blog.csdn.net/Athena072213/article/details/83414743 最近应公司业务需求需要完善友盟推送,认真看了官方文档后其实很简单,只需要细 ...
- idea 热部署之JRebel安装-激活-简单使用(修改方法\配置文件均生效)
1.简介 JRebel插件在IntelliJ IDEA中用于代码的热部署,即工程在已经启动的状态下修改代码,可以不用再重启服务,JRebel插件会自动帮我们编译代码,然后重启.整个重启的过程耗时非常短 ...
- 1.5.4、CDH 搭建Hadoop在安装之前(定制安装解决方案---配置自定义Java主目录位置)
配置自定义Java主目录位置 注意: Cloudera强烈建议安装JDK/ usr / java / jdk-version,允许Cloudera Manager自动检测并使用正确的JDK版本.如果在 ...
- Typechecking With PropTypes
[Typechecking With PropTypes] 1.props类型检查 React has some built-in typechecking abilities. To run typ ...
- Java 中位移运算符 >>,>>>,<<
Java 中的三种位移运算符 java中有三种移位运算符 << : 左移运算符,num << 1,相当于num乘以2 >> : ...
- day13 多个装饰器叠加 生成式
1.装饰器剩余 from functions import wraps @wrap(func) 会把func内的自带方法赋给wrapper,这样wrapper装饰函数就和原函数一模一样 多个装饰器叠加 ...
- 贪吃蛇GamePanel Java实现(二)
package cn.tcc.snake.tcc.View; import java.awt.Color;import java.awt.Graphics; import javax.swing.JP ...
- CentOS7中编译安装redis5.0
1. 环境介绍 CentOS7 (未安装Development Tools) 2. 下载Redis5.0-rc3 wget -O redis-5.0-rc3.tar.gz https://github ...
- TZOJ 3295 括号序列(区间DP)
描述 给定一串字符串,只由 “[”.“]” .“(”.“)”四个字符构成.现在让你尽量少的添加括号,得到一个规则的序列. 例如:“()”.“[]”.“(())”.“([])”.“()[]”.“()[( ...