【发布时间】:2012-09-28 18:58:54
【问题描述】:
我需要在我的 Android 应用程序中指定一些本机库的位置。我是用一个硬编码的字符串来完成这个的:
public static final String DLL_DIR_STR = "/data/data/my.application.package/lib";
但想从 Android 获取路径。在this 之类的帖子之后,我使用 getDir() 找到了 lib 目录,更改了
superCollider = new SCAudio(DLL_DIR_STR);
到
superCollider = new SCAudio(container.$context().getDir("lib", 0).getAbsolutePath());
奇怪的是,初始库似乎加载正确
Trying to load lib /data/data/my.application.package/lib/libsndfile.so 0x42718d80
Added shared lib /data/data/my.application.package/lib/libsndfile.so 0x42718d80
No JNI_OnLoad found in /data/data/my.application.package/lib/libsndfile.so 0x42718d80, skipping init
Trying to load lib /data/data/my.application.package/lib/libscsynth.so 0x42718d80
Added shared lib /data/data/my.application.package/lib/libscsynth.so 0x42718d80
但是当 libscsynth 尝试加载一些额外的代码时,它使用了错误的路径:
OK, listing opendir(/data/data/my.application.package/app_lib)
“app_”来自哪里的任何想法?我认为我必须使用 getDir() 错误,但初始文件加载正常。它可能是本机代码中的东西吗?感谢您的帮助。
【问题讨论】:
-
您可能使用 System.loadLibrary() - 此方法知道应用程序库的安装位置。相反,getDir() 努力 为您的应用程序提供一个可以安全地用于文件操作的目录,使其不会与特殊目录冲突,其中 lib 就是一个例子。
标签: java android android-ndk native supercollider