thrau / jarchivelib

A simple archiving and compression library for Java
https://github.com/thrau/jarchivelib
Apache License 2.0
198 stars 36 forks source link

Didn't find class "java.nio.file.FileSystems" on version 1.0.0 #75

Open ilyamuromets opened 5 years ago

ilyamuromets commented 5 years ago

Nexus 6 Android 7.1.1 library 1.0.0 When I use Archiver.extract() I get fatal:

Process: my.app, PID: 29625
    java.lang.NoClassDefFoundError: Failed resolution of: Ljava/nio/file/FileSystems;
        at org.rauschig.jarchivelib.FileModeMapper.<clinit>(FileModeMapper.java:38)
        at org.rauschig.jarchivelib.FileModeMapper.map(FileModeMapper.java:60)
        at org.rauschig.jarchivelib.CommonsArchiver.extract(CommonsArchiver.java:106)
        at org.rauschig.jarchivelib.CommonsArchiver.extract(CommonsArchiver.java:91)
        at org.rauschig.jarchivelib.ArchiverCompressorDecorator.extract(ArchiverCompressorDecorator.java:91)
        at my.app.android.cache.MyCache.unpack(MyCache.java:165)
        at my.app.android.cache.MyCache.save(MyCache.java:90)
        at my.app.android.cache.Cacher$1.onResponse(Cacher.java:100)
        at okhttp3.RealCall$AsyncCall.execute(RealCall.java:153)
        at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
        at java.lang.Thread.run(Thread.java:761)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "java.nio.file.FileSystems" on path: DexPathList[[zip file "/data/app/my.app-1/base.apk"],nativeLibraryDirectories=[/data/app/my.app-1/lib/arm, /data/app/my.app-1/base.apk!/lib/armeabi-v7a, /system/lib, /vendor/lib]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:380)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
        at org.rauschig.jarchivelib.FileModeMapper.<clinit>(FileModeMapper.java:38) 
        at org.rauschig.jarchivelib.FileModeMapper.map(FileModeMapper.java:60) 
        at org.rauschig.jarchivelib.CommonsArchiver.extract(CommonsArchiver.java:106) 
        at org.rauschig.jarchivelib.CommonsArchiver.extract(CommonsArchiver.java:91) 
        at org.rauschig.jarchivelib.ArchiverCompressorDecorator.extract(ArchiverCompressorDecorator.java:91) 
        at my.app.android.cache.MyCache.unpack(MyCache.java:165) 
        at my.app.android.cache.MyCache.save(MyCache.java:90) 
        at my.app.android.cache.Cacher$1.onResponse(Cacher.java:100) 
        at okhttp3.RealCall$AsyncCall.execute(RealCall.java:153) 
        at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32) 
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 
        at java.lang.Thread.run(Thread.java:761) 

Library version 0.7.1 and 0.8.0 on this device works fine.

Xiaomi Mi A1 Android 9 library 1.0.0 On this device all works fine on all library version.

MatthewTighe commented 5 years ago

Looks like the only call is https://github.com/thrau/jarchivelib/blob/8afee5124c588f589306796985b722d63572bbfa/src/main/java/org/rauschig/jarchivelib/FileModeMapper.java#L38

This completely breaks the library for all versions of Android older than SDK level 26, Android 8.0 Oreo. FileSystems was added in that version.

thrau commented 5 years ago

Could you suggest a fix?