【问题标题】:lib/ directory missing after installing 64 bit Android application安装 64 位 Android 应用程序后缺少 lib/ 目录
【发布时间】:2017-01-17 23:52:16
【问题描述】:

我的 32 位 ARM Android 应用程序带有 .so 文件,我在本机代码中使用 dlopen()。这很好用,我可以在/data/data/com.domain.app/lib/libX.so 位置打开它们。

如果我将 64 位二进制文​​件添加到我的包 (arm64-v8a) 并将其安装在 64 位 Android 设备上,那么将不存在 /data/data/com.domain.app/lib 目录。

经过一番调查,我发现 64 位 Android 设备上的 .so 文件最终位于不同的目录中:

/data/app/com.domain.app-1/lib/arm64

更糟糕的是,“-1”后缀各不相同,可能是“-2”或其他。

这是一种检查应用主目录中安装的内容的方法:

$ adb shell run-as com.steenriver.biplane '/system/bin/sh -c "pwd"' /data/data/com.steenriver.biplane

$ adb shell run-as com.steenriver.biplane '/system/bin/sh -c "ls -al"' drwxrwx--x u0_a108 u0_a108 2017-01-17 15:04 app_.gpg.classloader drwxrwx--x u0_a108 u0_a108 2017-01-17 15:04 cache drwxrwx--x u0_a108 u0_a108 2017-01-17 15:04 code_cache drwxrwx--x u0_a108 u0_a108 2017-01-17 15:04 files

32 位设备将在此处列出 lib/ 条目。

是否有我可以执行的 Android 调用(使用 Java 或本机代码)来告诉我 .so 文件在哪里结束,以便我可以对它们进行 dlopen()?

【问题讨论】:

    标签: android android-ndk shared-libraries arm64


    【解决方案1】:

    对于 64 位 ARM,不再有指向库目录的符号链接。要查找 .so 文件,您可以在 onCreate() 中使用以下 Java 代码

    import android.content.pm.PackageInfo;
    import android.content.pm.ApplicationInfo;
    import android.content.pm.PackageManager;
    ...
    ApplicationInfo ainfo = this.getApplicationContext().getPackageManager().getApplicationInfo
    ( 
        "com.domain.app",
        PackageManager.GET_SHARED_LIBRARY_FILES
    );
    Log.v( TAG, "native library dir " + ainfo.nativeLibraryDir );
    

    将此与提供符号链接的 32 位 ARM 进行比较:

    $ adb shell run-as com.steenriver.littlecrane '/system/bin/sh -c "pwd"'
    /data/data/com.steenriver.littlecrane
    $ adb shell run-as com.steenriver.littlecrane '/system/bin/sh -c "ls -al"'
    drwxrwx--x u0_a109  u0_a109           2017-01-18 11:48 app_.gpg.classloader
    drwxrwx--x u0_a109  u0_a109           2017-01-18 11:26 cache
    drwxrwx--x u0_a109  u0_a109           2017-01-18 11:48 code_cache
    drwxrwx--x u0_a109  u0_a109           2017-01-18 11:47 files
    lrwxrwxrwx root     root              2017-01-18 11:48 lib -> /data/app/com.steenriver.littlecrane-2/lib/arm
    

    【讨论】:

    • 很难找到关于 SO 在 android 中存储位置的信息。它不应该花这么长时间来找到这个答案。谢谢
    猜你喜欢
    • 1970-01-01
    • 2023-03-13
    • 2016-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-09
    • 1970-01-01
    • 2015-06-11
    相关资源
    最近更新 更多