java.nio.file.InvalidPathException: Завершающий символ ‹› в индексе 10: res / raw /?

Я столкнулся с этой проблемой в комплекте приложений для Android. Я успешно создал пакет приложений для Android из Android Studio 3.4.2, и теперь я хочу создавать apks из этого пакета с помощью bundletool, поэтому позже я могу установить сборку с помощью bundletool. Но когда я запускаю эту команду, которая собирает файлы apks из пакета java -jar bundletool-all-0.10.2.jar build-apks --bundle=D:\MyApp.aab --output=D:\all_apkk.apks --ks=keystorepath --ks-key-alias=aliasname --ks-pass=pass:pswrd. I am facing this Caused by: java.nio.file.InvalidPathException: Trailing char < > at index 10: res/raw/??.

Вот логи ниже.

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.google.protobuf.UnsafeUtil (file:/C:/Program%20Files/Java/jdk-11.0.2/bin/bundletool-all-0.10.2.jar) to field java.nio.Buffer.address
WARNING: Please consider reporting this to the maintainers of com.google.protobuf.UnsafeUtil
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
[BT:0.10.2] Error: java.nio.file.InvalidPathException: Trailing char < > at index 10: res/raw/??
java.lang.RuntimeException: java.nio.file.InvalidPathException: Trailing char < > at index 10: res/raw/??
        at com.android.tools.build.bundletool.io.ConcurrencyUtils.waitFor(ConcurrencyUtils.java:59)
        at com.android.tools.build.bundletool.io.ConcurrencyUtils.waitForAll(ConcurrencyUtils.java:42)
        at java.base/java.util.function.Function.lambda$andThen$1(Function.java:88)
        at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:582)
        at com.android.tools.build.bundletool.io.ApkSerializerManager.serializeApks(ApkSerializerManager.java:180)
        at com.android.tools.build.bundletool.io.ApkSerializerManager.populateApkSetBuilder(ApkSerializerManager.java:101)
        at com.android.tools.build.bundletool.commands.BuildApksManager.executeWithZip(BuildApksManager.java:229)
        at com.android.tools.build.bundletool.commands.BuildApksManager.execute(BuildApksManager.java:110)
        at com.android.tools.build.bundletool.commands.BuildApksCommand.execute(BuildApksCommand.java:524)
        at com.android.tools.build.bundletool.BundleToolMain.main(BundleToolMain.java:74)
        at com.android.tools.build.bundletool.BundleToolMain.main(BundleToolMain.java:46)
Caused by: java.util.concurrent.ExecutionException: java.nio.file.InvalidPathException: Trailing char < > at index 10: res/raw/??
        at com.google.common.util.concurrent.AbstractFuture.getDoneValue(AbstractFuture.java:502)
        at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:461)
        at com.google.common.util.concurrent.AbstractFuture$TrustedFuture.get(AbstractFuture.java:83)
        at com.android.tools.build.bundletool.io.ConcurrencyUtils.waitFor(ConcurrencyUtils.java:49)
        ... 10 more
Caused by: java.nio.file.InvalidPathException: Trailing char < > at index 10: res/raw/??
        at java.base/sun.nio.fs.WindowsPathParser.normalize(WindowsPathParser.java:191)
        at java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:153)
        at java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:77)
        at java.base/sun.nio.fs.WindowsPath.parse(WindowsPath.java:92)
        at java.base/sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.java:229)
        at java.base/java.nio.file.Path.of(Path.java:147)
        at java.base/java.nio.file.Paths.get(Paths.java:69)
        at com.android.tools.build.bundletool.io.ApkSerializerHelper.lambda$shouldCompress$4(ApkSerializerHelper.java:309)
        at java.base/java.util.stream.MatchOps$1MatchSink.accept(MatchOps.java:90)
        at java.base/java.util.Spliterators$ArraySpliterator.tryAdvance(Spliterators.java:958)
        at java.base/java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:127)
        at java.base/java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:502)
        at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:488)
        at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
        at java.base/java.util.stream.MatchOps$MatchOp.evaluateSequential(MatchOps.java:230)
        at java.base/java.util.stream.MatchOps$MatchOp.evaluateSequential(MatchOps.java:196)
        at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
        at java.base/java.util.stream.ReferencePipeline.anyMatch(ReferencePipeline.java:528)
        at com.android.tools.build.bundletool.io.ApkSerializerHelper.shouldCompress(ApkSerializerHelper.java:309)
        at com.android.tools.build.bundletool.io.ApkSerializerHelper.entryOptionForPath(ApkSerializerHelper.java:294)
        at com.android.tools.build.bundletool.io.ApkSerializerHelper.writeProtoApk(ApkSerializerHelper.java:254)
        at com.android.tools.build.bundletool.io.ApkSerializerHelper.writeToZipFile(ApkSerializerHelper.java:155)
        at com.android.tools.build.bundletool.io.ApkSerializerHelper.writeToZipFile(ApkSerializerHelper.java:144)
        at com.android.tools.build.bundletool.io.SplitApkSerializer.writeToDisk(SplitApkSerializer.java:75)
        at com.android.tools.build.bundletool.io.SplitApkSerializer.writeSplitToDisk(SplitApkSerializer.java:53)
        at com.android.tools.build.bundletool.io.ApkSetBuilderFactory$ApkSetArchiveBuilder.addSplitApk(ApkSetBuilderFactory.java:105)
        at com.android.tools.build.bundletool.io.ApkSerializerManager$ApkSerializer.serialize(ApkSerializerManager.java:376)
        at com.android.tools.build.bundletool.io.ApkSerializerManager.lambda$null$3(ApkSerializerManager.java:184)
        at com.google.common.util.concurrent.TrustedListenableFutureTask$TrustedFutureInterruptibleTask.runInterruptibly(TrustedListenableFutureTask.java:117)
        at com.google.common.util.concurrent.InterruptibleTask.run(InterruptibleTask.java:38)
        at com.google.common.util.concurrent.TrustedListenableFutureTask.run(TrustedListenableFutureTask.java:77)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:834)

Итак, что я сделал после некоторого исследования, я сделал пакет, например myApp.aab, и преобразовал расширение в .zip, который делает myApp.zip. Затем я извлекаю его и перехожу в папку, которая находится в журналах выше (res / raw / ), и было много файлов, содержащих файлы .xml.

Но я заметил, что есть много файлов .xml, имена которых содержат пробел в конце, например -> файл .xml (содержащий пробел после e). Потом я понял, почему пришло исключение в логах.

По сути, я использую обфускацию dexguard, которая оставляет пробелы в конце файла во время обфускации.

Теперь я хочу знать, как я могу это предотвратить?


person Ahmad Izaz    schedule 29.07.2019    source источник
comment
@ Ахмед Изаз, какой инструмент вы используете для обфускации?   -  person Muhammad Waseem    schedule 30.07.2019
comment
мы используем DexGuard-8.3.15 для обфускации   -  person Ahmad Izaz    schedule 30.07.2019
comment
Убедитесь, что вы используете последнюю версию dexguard.   -  person Pierre    schedule 31.07.2019
comment
@Pierre Я также пробовал использовать последнюю версию Dexguard 8.4.15, но такую ​​же   -  person Ahmad Izaz    schedule 31.07.2019
comment
Ммм, думаю, я вижу проблему. Проблема заключается в сочетании bundletool и DexGuard. Bundletool полагается на файловую систему для сопоставления файлов, а Windows fs не поддерживает символы, введенные DexGuard. Можете ли вы сообщить об ошибке в Bundletool Issueracker? Мы можем попытаться понять, легко ли это исправить.   -  person Pierre    schedule 31.07.2019
comment
В качестве альтернативы вы можете попросить Dexguard не использовать эти специальные символы, что может быть более простым решением.   -  person Pierre    schedule 01.08.2019
comment
Кто-то упомянул, что это было исправлено в Dexguard 8.5: github.com/google/bundletool/ issues / 100 # issuecomment-517345988   -  person Pierre    schedule 01.08.2019
comment
Да, @Pierre, я сообщил им об этой проблеме, и они сказали, что исправят это, и я получил от них электронное письмо о том, что мы исправили это в версии 8.5.   -  person Ahmad Izaz    schedule 01.08.2019


Ответы (1)


Похоже, это было исправлено в Dexguard 8.5.

person Pierre    schedule 01.08.2019