fumiama / copymanga

拷贝漫画的第三方APP,优化阅读/下载体验
GNU General Public License v3.0
2.22k stars 55 forks source link

F-Droid #5

Open linsui opened 2 years ago

linsui commented 2 years ago

请问可以打包发布到 F-Droid 吗?

fumiama commented 2 years ago

现在还远远没有完成,发上去感觉不是很合适。

linsui commented 2 years ago

这个应用完成度比 F-Droid 上一半的应用都要高 :joy: 。F-Droid 上每周都会有几个花了一天写出来的应用。

fumiama commented 2 years ago

好家伙,你打包需要重新签名吗?如果需要,更新就会有问题了。

linsui commented 2 years ago

F-Droid 用自己的密钥签名,更新会通过 F-Droid 的应用推送。不同渠道之间没办法更新。不过这个应用我看了一下应该没有需要打补丁的地方,所以可以试试可重复构建。如果 F-Droid 能构建出完全相同的 apk 就可以直接发布你签名的版本。

linsui commented 2 years ago

我试了一下可重复构建,得到的 apk 内容是相同的但是打包的文件顺序不一样。你的 apk 文件顺序是打乱的。如果你可以在打包的时候对文件排序应该就可以构建出完全相同的 apk 了。F-Droid 一般使用 disorderfs --sort-dirents=yes --reverse-dirents=no.

fumiama commented 2 years ago

我试了一下可重复构建,得到的 apk 内容是相同的但是打包的文件顺序不一样。你的 apk 文件顺序是打乱的。如果你可以在打包的时候对文件排序应该就可以构建出完全相同的 apk 了。F-Droid 一般使用 disorderfs --sort-dirents=yes --reverse-dirents=no.

为什么要相同呢,签名一样不就好了

linsui commented 2 years ago

F-Droid 中可重复构建是通过 apksigcopier 实现的,它将上游的 apk 中的签名部分直接复制到构建出来的 apk 文件末尾。因此 apk 必须完全一直才能验证安装。但 apk 中的内容顺序不一致会产生不同的 zip 文件,虽然大小和内容都一样,但 hash 值不同。

fumiama commented 2 years ago

这也太怪了😂要不你构建一下,我来签个名

linsui commented 2 years ago

:joy: 可以是可以,但这样就是每次都要麻烦你,没有办法自动更新。我用 GitLab CI 构建的 apk 在。我认为比较好的办法是用 disorderfs 解决文件顺序的问题。

fumiama commented 2 years ago

我是用as构建出来的,理论上disorderfs也会改变zip的哈希,这样v2签名是失效的。只要签名相同就能随便覆盖了,我每次构建也并不是走actions自动构建,签名不会太麻烦。总之我先签名了一下,你看看可不可用。 top.fumiama.copymanga_23.zip 我已经把apk扩展名改为zip,你改回去即可。

linsui commented 2 years ago

这个签名文件用 zipinfo 查看,第五个字段是 bl,但我构建的和你之前发布的 apk 这个字段是 b-。不知道是什么原因,可能是因为扩展名改了一次?

       第五个字段包含了两个字符,它们中的每个都能取若干个值.第一个字符可能是`t'或者`b',相应地表示
       文件是文本的或者是二进制的;但是如果文件被加密,zipinfo  通过大写字符(`T'或者`B')来表示.第二
       个字符可以取四个值,它依赖于是否存在一个本地的头信息并且/或者一个和那个文件相关的 "额外" 字
       段(详细解释参看 PKWare's APPNOTE.TXT,它基本上类似于ANSI  C中的pragmas,它们提供了一种包含非
       标准信息的标准方法).如果两者都不存在,该字段为连字符(`-');如果有一个扩展的本地头信息但是没
       有额外字段,则为`l';反之为`x';如果都存在,则为`X'.这样上面示例中的文件(很可能)是一个未被加密
       的文本文件,并且没有额外字段和本地头信息与之相关联.下面的例子则是一个有额外信息的二进制文
       件.
fumiama commented 2 years ago

不过我这里是b-,那我再打包一层试试。 top.fumiama.copymanga_23.apk.zip 屏幕快照 2022-06-16 下午10 22 33

linsui commented 2 years ago

这三个是 b-,但大部分是 bl。但我构建的 apk 中所有文件都是 b-。很奇怪。

fumiama commented 2 years ago

这三个是 b-,但大部分是 bl。但我构建的 apk 中所有文件都是 b-。很奇怪。

我换了个签名命令试了试,现在应该可以了。 top.fumiama.copymanga_23.apk.zip

linsui commented 2 years ago

非常好,这次没问题了,谢谢!那么我们就先用这种方式?

fumiama commented 2 years ago

非常好,这次没问题了,谢谢!那么我们就先用这种方式?

可以,因为我也不是很经常发版😂之后有更新你可再在此issue提及。

linsui commented 2 years ago

可以把上面这个 apk 发在 release 里或者其他什么地方吗,这样就有一个有版本的稳定链接了。然后我可以在这个存储库里添加 fastlane 元数据吗?F-Droid 会从这里抓取应用描述。

fumiama commented 2 years ago

你可以pr我看看,apk我已发至最新release

linsui commented 2 years ago

请问设定页就是空的吗?还是要登录才有选项?

fumiama commented 2 years ago

空的,啥都没写(

linsui commented 2 years ago

https://gitlab.com/fdroid/fdroiddata/-/merge_requests/11199 MR 可以合并了,有什么需要补充的吗?比如捐款方式之类的。

fumiama commented 2 years ago

没什么了,挺好的

linsui commented 2 years ago

谢谢,已合并,大概一周之内会发布。

linsui commented 2 years ago

这个是 F-Droid 的徽标,我看了一下不知道放哪里合适。

[<img src="https://fdroid.gitlab.io/artwork/badge/get-it-on.png"
    alt="Get it on F-Droid"
    height="80">](https://f-droid.org/packages/top.fumiama.copymanga)

<img src="https://fdroid.gitlab.io/artwork/badge/get-it-on.png" alt="Get it on F-Droid" height="80">

fumiama commented 2 years ago

我等会放readme

linsui commented 1 year ago

新版本的 apk 文件还是乱序的。我用 AS 构建了一下并没有出现这种情况,或许是环境不同?

fumiama commented 1 year ago

不清楚,你试试v1 v2签名都选上呢

linsui commented 1 year ago

我构建的 apk 是未签名的。签名应该不影响文件顺序。我猜可能和文件系统操作系统什么的有关系。我只在 linux 上测试过。

fumiama commented 1 year ago

很奇怪了😂,另外你写别急着更新,最近可能还有改动。

linsui commented 1 year ago

好 :ok_hand:

linsui commented 1 year ago

请问你是在 Mac 上构建的吗?最近在另一个应用上遇到了相同的情况。

fumiama commented 1 year ago

确实如此

linsui commented 1 year ago

这个似乎是 MacOS 的问题,每次构建出来的 apk 都是不同的。除了用 CI 或者 docker 构建,可以试试用 https://github.com/obfusk/reproducible-apk-tools 。它会重新打包 apk,然后你再签名,应该就能得到相同的 apk 了。

fumiama commented 1 year ago

我已发到release,你看看

linsui commented 1 year ago

这个工具还有点问题,应该是排序的逻辑有区别。我反馈一下。

linsui commented 1 year ago

https://gitlab.com/fdroid/fdroiddata/-/merge_requests/12138 我们发现在 linux 上构建的 apk 文件顺序是可重现的,但不是简单的按文件名排序。所以目前可行的方法就是我们构建 apk 之后也按顺序重新打包一下。之后你只要发 tag 然后按照相同文件名格式上传 apk,应该就可以自动更新了。

fumiama commented 1 year ago

hmm,那么从结果来说,我这边需要做什么?😂

linsui commented 1 year ago

这个版本已经没问题了,之后的版本只要打 tag,上传排序后的 apk 应该就可以啦。

fumiama commented 1 year ago

可以,感谢!

linsui commented 1 year ago

之前没有注意到,beta12 的 apk 是乱序的,但从 beta13 开始 apk 就和 Debian 上构建的结果相同了,也就是说之后不需要重新排序了,抱歉添麻烦了。beta13 和 beta12 之间的区别应该是更新了 java 版本和 AGP 版本。我猜测是 AGP 新版本解决了这个问题。可以麻烦你帮忙在 MacOS 上测试一下吗?如果将 AGP 降级回 7.0.2 apk 是不是还是乱序的?

fumiama commented 1 year ago

我不太好测试😂这个依赖很难弄,好不容易让他正常工作了,不太想再动它了。不过如果可以的话,我之后就不发sorted了。

linsui commented 1 year ago

应该不需要再发 sorted 了。请问除了 AGP 之外,有没有其他构建方式的变化?是用的 AS 还是从命令行直接 Gradle 构建的?使用的 JDK 版本是什么?

fumiama commented 1 year ago

我用的AS,Java11。其余更改你可以在commits里看到。

linsui commented 1 year ago

那我猜测 AGP 修复了什么问题。谢谢!

fumiama commented 1 year ago

没事

linsui commented 1 year ago

https://monitor.f-droid.org/builds/log/top.fumiama.copymanga/28#site-footer 这个差异有点多,是从不同提交构建的吗?似乎所有的 xml 都有区别。

fumiama commented 1 year ago

啥都没变,就是我删了几个没用上的xml。

fumiama commented 1 year ago

我又发了一个版本,可以试试

linsui commented 1 year ago

这个版本没问题了,谢谢!

linsui commented 1 year ago
omparing reference APK to APK with copied signature...
Unexpected diff output:
Binary files /tmp/tmpu48ff4z5/tmp_binaries_top.fumiama.copymanga_30.binary/content/res/XF.png and /tmp/tmpu48ff4z5/_tmp_tmpu48ff4z5_sigcp_top.fumiama.copymanga_30/content/res/XF.png differ
Binary files /tmp/tmpu48ff4z5/tmp_binaries_top.fumiama.copymanga_30.binary/content/res/aW.png and /tmp/tmpu48ff4z5/_tmp_tmpu48ff4z5_sigcp_top.fumiama.copymanga_30/content/res/aW.png differ
Binary files /tmp/tmpu48ff4z5/tmp_binaries_top.fumiama.copymanga_30.binary/content/res/wQ.png and /tmp/tmpu48ff4z5/_tmp_tmpu48ff4z5_sigcp_top.fumiama.copymanga_30/content/res/wQ.png differ

PNG 图片不太一样。这三张图片是

XF wQ aW

有可能是 PNG 优化造成的。