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
相关产品推荐
相关产品推荐

