• 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

  • 相关阅读:
    缓存读写策略
    支撑京东小程序的开发框架 「Taro」
    Zookeeper vs Etcd
    前端开发利器 Web Replay
    kafka 中 zookeeper 具体是做什么的?
    newSQL 到底是什么?
    zookeeper配置集群
    zookeeper配置文件说明
    ssh远程访问-提示密钥不安全
    Nodejs-log4js使用配置
  • 原文地址:https://www.cnblogs.com/cwgk/p/4344185.html
Copyright © 2020-2023  润新知