На android 8 (API26) я хочу использовать Files.createLink для создания жесткой ссылки. Я уверен, что fExists действительно существует, а f не существует. И оба они находятся в области хранения данных приложения.
fExists: /data/user/0/appPakageName/myFolder/a.png
f: /data/user/0/appPakageName/myFolder2/a.png
Path p0 = fExists.toPath(), p2 = f.toPath();
try {
done = Files.createLink(p2, p0) != null;
} catch (Throwable lp) {
lp.printStackTrace();
}
У меня не настроен adho c FileSystemProvider, так как я не знаю как. вышеприведенный код печатает:
W/zygote: Got a deoptimization request on un-deoptimizable method void sun.nio.fs.UnixNativeDispatcher.link0(long, long)
W/System.err: java.nio.file.AccessDeniedException: /data/user/0/appPackageName/myFolder/a.png -> /data/user/0/appPackageName/myFolder2/a.png
W/System.err: at sun.nio.fs.UnixFileSystemProvider.createLink(UnixFileSystemProvider.java:480)
at java.nio.file.Files.createLink(Files.java:1086)
W/System.err: at com.nativeapi.ManagerCache$Item.lambda$ensureCopy$1$ManagerCache$Item(ManagerCache.java:4721)
at com.nativeapi.-$$Lambda$ManagerCache$Item$iI_UuLtrfZZ1CjaxV7zycT3h6rE.run(Unknown Source:6)
W/System.err: at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:457)
W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:266)
W/System.err: at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at java.lang.Thread.run(Thread.java:764)
AccessDeniedException относится к IOException, а не к SecurityException. У кого-нибудь есть идеи, как успешно создать жесткую ссылку, используя вышеуказанный API (android API 26)? спасибо.
Кстати, я тоже пытался FileSystemProvider.createLink , я получил тот же "доступ запрещен". И когда я принудительно вхожу в метод, я вижу, что System.getSecurityManager () возвращает ноль.
android Oreo (API 26) также добавляет LinkPermission либо "hard", либо " symboli c ", но я не знаю, как их использовать.
Я не пробовал Os.link для жесткой ссылки, доступной с android леденец (API 21).
актуально ссылка:
Создание жестких ссылок и символических ссылок в Android
Разве Android M не разрешает жесткие ссылки?