Android中的符号链接创建在应用程序的资产目录中

时间:2014-12-31 21:23:41

标签: java android android-ndk symlink

我似乎找不到这个具体问题的可靠答案。

我正在尝试以编程方式在同一应用程序的资产目录中的另一个位置的资产文件夹中创建目录的符号链接。基本上,我希望做与Java.nio.Files的createSymbolicLink方法相同的事情。

Android SDK是否有可行的方法?如果没有,是否可以在NDK中使用?

2 个答案:

答案 0 :(得分:7)

对于Android API 21及更高版本,请使用:

Os.symlink(originalFilePath,symLinkFilePath);

答案 1 :(得分:3)

没有公共API可以做到这一点。但是,您可以使用一些脏反射来创建符号链接。我刚刚测试了以下代码,它对我有用:

// static factory method to transfer a file from assets to package files directory
AssetUtils.transferAsset(this, "test.png");

// The file that was transferred
File file = new File(getFilesDir(), "test.png");
// The file that I want as my symlink
File symlink = new File(getFilesDir(), "symlink.png");

// do some dirty reflection to create the symbolic link
try {
    final Class<?> libcore = Class.forName("libcore.io.Libcore");
    final Field fOs = libcore.getDeclaredField("os");
    fOs.setAccessible(true);
    final Object os = fOs.get(null);
    final Method method = os.getClass().getMethod("symlink", String.class, String.class);
    method.invoke(os, file.getAbsolutePath(), symlink.getAbsolutePath());
} catch (Exception e) {
    // TODO handle the exception
}

如果您不想使用反射,快速Google搜索会显示此答案:http://androidwarzone.blogspot.com/2012/03/creating-symbolic-links-on-android-from.html