Android 应用push ,so无法加载

作者君主要做SDK开发,对接一些厂商或运行商的普通应用或系统应用。
当对接系统应用时,由于系统应用是由于覆盖机型比较广,会碰到Android多个版本机型,有的可能出现so找不到的问题。

普通应用

普通install安装apk的方式,apk会被安装在 /data/app 目录下,那么So则会被映射到/data/app/项目目录下/lib。

系统应用

1.apk采用预装的方式:

首次安装只能通过直接push到/system/app/下的方式来安装,而不是如普通应用般采取install的方式。

2.系统应用升级:

android在开机扫描应用的时候会对 相应目录进行扫描,如果发现 data/app目录下 存在和系统应用同包名的应用,并且版本号比系统应用的版本号更高则构成升级关系,校验签名等安全验证通过。此时data/app下的这个应用就是系统应用

3.so加载

而push到系统目录下如system/app/....,则会优先寻找system/lib(lib64)目录下的so,由于so
不会自动释放到该目录下,所以需要手动push到该路径下。

4.Android版本适配的问题:
  • 4.4(含)及以下系统:push到Android系统的/system/lib目录
  • 5.0(含)及以上系统:push到Android 系统的 /system/app/应用部署文件夹/lib/系统架构/目录中进行集成;不推荐这两个so文件拷贝到/system/lib或者/system/lib64目录中,已知在Android N上。

PackageManager扫描so版本出错

1.背景

作者君还遇到过这样的问题,有时候为了减少包的大小或者其他,不会把所有ABI类型的so都放进目录,另外so的提供者团队没有提供64的so(哈哈,如果提供了,下面的问题直接就没有了,那为什么还拿出来说呢,主要是简单地了解一下系统底层的一些基本原理,感兴趣的可以看下一下~~)

2.问题:

机型类型是64位的,其他apk仅提供了64位的so。而某个apk由于只集成了32位so, install安装是正常的,但是把apk通过push到/system/app下,so放到/system/lib下则报如下错误:

abcdefg-xxx.so is 32-bit instead of 64-bit

32位机器上当然是正常的。

一般情况下,64位的操作系统可以兼容32位的库文件,所以仅含有32位的
apk正常情况下也可以在64的机器上跑起来。

3.原因:

那么为什么会出错呢?首先是系统级应用,需要理解Android系统的原理(当然啦,也许厂商定制了一番,那则另一回事。):
系统有几个属性,其中app.info.primaryCpuAbi这个值用来决定apk关联ABI类型。而PackageManager会对这个值有所影响。比如:通过apk包里包含的so库的架构来决定app的primaryCpuAbi的值。

1.系统apk或者普通的apk, 如果统的 /system/app/应用部署文件夹/lib/系统架构/目录下so文件存在,则以此so文件来确定primaryCpuAbi的值
2.如果是系统apk, 包里又不存在.so文件,就会进一步根据/system/app/项目包名/lib和/system/app/项目包名/lib64是否存在,来确定它的primaryCpuAbi值

另外:
如果机器里有64位的apk,且PackageManager扫描到第一正好是这个apk,PackageManager调整所有apk要加载的都是64位的so。不再去加载32位的so,那么只含32位so的apk就会跑出异常。反之,则64位的apk正常运行,32位的则出错。

尾语

作者君能力有限,如有错处,请书友们指导,作者君会第一时间修改。
一起学习一起进步ღ( ´・ᴗ・` )比心

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容