You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Nougat中getFilesDir失效,如何获取应用安装的库文件路径?

解决Android N+版本获取Native库路径的问题

你的问题核心在于Android 6.0(API 23)及之后的系统对应用目录结构做了调整:原来/data/data/包名/lib的结构被拆分,Native库被移到了应用安装目录下的ABI专属子文件夹(也就是你看到的/data/app/com.package_name-1/lib/arm64),而context.getFilesDir().getParent()只能获取到应用的数据目录(/data/user/0/com.package_name),这个目录里已经没有lib文件夹了,自然会判断不存在。

正确的解决方案:用系统API直接获取Native库目录

Android官方提供了专门适配所有版本的Native库路径获取方法——Context.getApplicationInfo().nativeLibraryDir,不管低版本还是高版本系统,它都能精准返回正确的库目录。

修改你的代码如下:

static File getLibDirectory(Context context) {
    String nativeLibPath = context.getApplicationInfo().nativeLibraryDir;
    File libDir = new File(nativeLibPath);
    Log.d(TAG, "libDir: "+ libDir.getAbsolutePath() + " Existance: "+ libDir.exists());
    return libDir;
}

为什么这个方法更靠谱?

  • 在Android Lollipop及更早版本,它会返回/data/data/com.package_name/lib,和你原来的预期一致
  • 在Android Nougat及更高版本,它会自动返回对应ABI的库路径(比如arm64、armeabi-v7a等),也就是你实际看到的/data/app/com.package_name-1/lib/arm64
  • 这个API由系统维护,会自动适配不同版本的目录结构变化,不需要你手动拼接路径或做版本判断,从根源上避免了适配问题

如果要获取某个具体的so文件,直接在这个路径下拼接文件名即可:

File targetSoFile = new File(context.getApplicationInfo().nativeLibraryDir, "lib_name.so");

内容的提问来源于stack exchange,提问作者priojeet priyom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:57:09