获取Android应用程序的lib目录

时间:2012-09-28 18:58:55

标签: java android android-ndk native supercollider

我需要在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()错误,但初始文件加载正常。它可能是原生代码中的东西吗?谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

我在this post中偶然找到了答案。 ApplicationInfo.dataDir保存数据目录的位置,并且可以从那里轻松导航“lib”:

superCollider = new SCAudio(container.$context().getApplicationInfo().dataDir + "/lib");

或者,nativeLibraryDir将您直接带到lib目录,但需要API级别9。

感谢您的帮助!

答案 1 :(得分:1)

getDir将始终将app_添加到目录名称,因此第一次使用它是非常奇怪的。我或者只是期望app_在那里或尝试使用getFilesDir,至少你总是知道它会返回什么。 SuperCollider是否对目录名称有限制?

我发现另一个SuperCollider Project似乎与您最初使用评论“ // TODO:不是非常可扩展,”做同样的事情。我发现这很有趣:)