sketch icon indicating copy to clipboard operation
sketch copied to clipboard

是否可以换种方式实现Desktop的AppDirsFactory?

Open masterQian opened this issue 1 month ago • 2 comments

sketch在桌面端的实现依赖了appdirs这个库,在sketch全部代码中也只出现了一次,是用于获取Desktop的缓存目录。 但是appdirs这个库引用了jna,它会附加jna和jna-platform两个jar,总体积约3MB。可是sketch的核心部分也不过500KB,却携带这3MB的jar一起打包,这是否过重? 是否有更好的方式实现?如果可以优化一下那就太好了!

net.harawata.appdirs.AppDirsFactory位于此处: https://github.com/panpf/sketch/blob/2bde0e938751c356dd27e68246183df4d479e970/sketch-core/src/desktopMain/kotlin/com/github/panpf/sketch/util/platform_contexts.desktop.kt#L21

masterQian avatar Nov 26 '25 15:11 masterQian

经过检查,我发现appdirs对AppDirsFactory.getUserCacheDir在Unix,macOS,Windows上的实现完全没有用到jna: https://github.com/harawata/appdirs/blob/master/src/main/java/net/harawata/appdirs/impl/UnixAppDirs.java https://github.com/harawata/appdirs/blob/master/src/main/java/net/harawata/appdirs/impl/MacOSXAppDirs.java https://github.com/harawata/appdirs/blob/master/src/main/java/net/harawata/appdirs/impl/WindowsAppDirs.java 用到jna的地方是: https://github.com/harawata/appdirs/blob/master/src/main/java/net/harawata/appdirs/impl/ShellFolderResolver.java 但sketch并不需要这些,所以只需要简单分离出获取缓存目录的实现,这将便不会引入6倍于sktech体积的jna依赖。

masterQian avatar Nov 27 '25 14:11 masterQian

好的,我会尝试简化一下

panpf avatar Nov 27 '25 14:11 panpf

我追寻源代码发现的确使用到了 jna jar 包,并且无法简单的替换,以下是我找的顺序,你可以确认一下:

https://github.com/harawata/appdirs/blob/master/src/main/java/net/harawata/appdirs/AppDirsFactory.java#L46 https://github.com/harawata/appdirs/blob/master/src/main/java/net/harawata/appdirs/impl/WindowsAppDirs.java#L44 https://github.com/harawata/appdirs/blob/master/src/main/java/net/harawata/appdirs/impl/WindowsAppDirs.java#L81 https://github.com/harawata/appdirs/blob/master/src/main/java/net/harawata/appdirs/impl/ShellFolderResolver.java#L30

panpf avatar Dec 17 '25 09:12 panpf

好吧,那太可惜了,谢谢!

masterQian avatar Dec 17 '25 09:12 masterQian