Java 在Android应用程序中创建符号链接';s资产目录

Java 在Android应用程序中创建符号链接';s资产目录,java,android,android-ndk,symlink,Java,Android,Android Ndk,Symlink,我似乎找不到这个具体问题的确切答案 我试图以编程方式在同一应用程序的资产目录中的另一个位置的资产文件夹中创建一个目录的符号链接。本质上,我希望做与Java.nio.Files的createSymbolicLink方法相同的事情 有没有一种可用的方法可以通过Android SDK实现这一点?如果没有,在NDK中是否可能?没有公共API来执行此操作。但是,您可以使用一些脏反射来创建符号链接。我刚刚测试了以下代码,它对我有效: // static factory method to transfer

我似乎找不到这个具体问题的确切答案

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


有没有一种可用的方法可以通过Android SDK实现这一点?如果没有,在NDK中是否可能?

没有公共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
}
//将文件从资产传输到包文件目录的静态工厂方法
资产转让资产(本“test.png”);
//传输的文件
File File=新文件(getFilesDir(),“test.png”);
//我想要作为我的符号链接的文件
File symlink=新文件(getFilesDir(),“symlink.png”);
//执行一些脏反射来创建符号链接
试一试{
最终类libcore=Class.forName(“libcore.io.libcore”);
最终字段fOs=libcore.getDeclaredField(“os”);
fOs.setAccessible(真);
最终对象os=fOs.get(null);
最终方法Method=os.getClass().getMethod(“符号链接”,String.class,String.class);
调用(os,file.getAbsolutePath(),symlink.getAbsolutePath());
}捕获(例外e){
//TODO处理异常
}

如果你不想使用反射,谷歌快速搜索显示了这个答案:

对于Android API 21及以上版本,只需使用:

Os.symlink(originalFilePath,symLinkFilePath);

您是指开发机器上的“资产文件夹”吗?或者,当在运行时使用时,您是指资产吗?请记住,打包在APK中的资产仍保留在APK中,并且没有拆包,只是从APK本身读取。还要注意的是,APK文件是一个ZIP归档文件,而且在ZIP归档文件中没有符号链接结构。不知何故,我在谷歌搜索中错过了这个链接。我已经在这个特定的项目中使用了一些本机代码,这样可以满足我的需要。谢谢。这在其他方面可能很有趣,但实际上并没有解决所问的问题。一旦您将文件从资产复制到实际的文件系统文件中,创建符号链接而不仅仅为副本指定所需名称有什么意义?为什么它只接受使用符号链接文件的“GetFileDir”路径?我只能把它放在那里。甚至不在它里面的子文件夹中(它可以在那里创建文件,但任何其他应用程序都无法访问它)。@androiddeveloper它与任何其他类似unix的系统一样。您创建的文件与您的应用程序具有相同的UID。其他应用程序无法访问这些文件,除非它们具有共享UID。另外,Android上不允许在外部存储上创建符号链接。@JaredRummler创建和共享符号链接的唯一路径是在“GetFileDir”的确切路径中。为什么它不适用于此路径(子文件夹)中的其他路径?另外,我可以假设这种创建符号链接的方法在所有Android设备上都有效吗?从ICS(4.0.x)开始,我就在Android仿真器上进行了测试。有没有更正式的方法?使用JNI选项会更安全吗?遗憾的是,我从未成功创建过在Android-Studio.For更低版本上使用JNI的库/项目
Runtime.getRuntime().exec(“ln-s/path/to/file/path/to/symlink”)
from。