Как бороться с createLink не удалось с отказом в доступе? - PullRequest
0 голосов
/ 23 января 2020

На 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 не разрешает жесткие ссылки?

...