将React Native Apps添加到F-Droid(2020)

2021-06-29 22:52:35

React Native是一个流行的开源应用程序开发框架,可以轻松地使用平台的本机UI组件构建跨平台应用程序。这使其成为开发人员为所有平台构建应用程序的理想选择。

这就是为什么我们在开始新的Etesync Notes应用程序时选择它。它使我们能够在很短的时间内建立一个应用程序,在android,iOS,Web上的100%中重用100%,并且我们也释放桌面客户端,桌面。

作为一个开源项目,我们的长期(非常高兴)F-Droid,我们在构建该应用程序之前的主要问题之一是:可以在F-Droid上建立反应本机应用程序吗?在线寻找我们找不到明确的答案。然后,我们看了FDROIDDATA存储库,我们看到了一些反应原住权的提到,这导致我们在F-Droid上提供的原生应用。所以我们知道它可以完成,我们只是错过了如何。

此帖子的其余部分假定您熟悉F-Droid元数据文件以及如何构建正常的Android应用程序。

React Native Apps有两个构建和依赖管理系统(React Native One,Android One)。

React Native App具有使用JavaScript依赖性管理系统发货的预先构建的依赖项,我们需要告诉F-Droid这些组件实际上是牙线并与F-Droid兼容。

在我们继续解释重要组成部分之前以及它们如何一起发挥作用,这里是工作的ETESync Notes Spec文件供您参考。

你需要照顾的第一件事是Subdir指令。 React Native Applications在repo的子目录中具有其Android构建系统而不是根。它通常是Android / app,但它的设置可能是不同的。

在您的情况下,我们需要的下一件事是为了获得近来有足够的节点和纱线版本。 F-Droid使用Debian Setress for Build System,它甚至没有在Backport中拥有足够的节点版本。因此,获得节点的最简单方法是使用预先构建的二进制文件,并验证其校验和,然后使用NPM安装纱线。这是它看起来的样子:

sudo: - curl -lo node.tar.xz https://nodejs.org/dist/v10.18.1/node-v10.18.1-linux-x64.tar.xz - echo" 8cc40f45c2c62529b15e83a6bbe0ac1f68067c9620df68067c96c0fddbbdf node.tar.xz& #34; | sha256sum -c- - tar xjf node.tar.xz - cp -a node-v10.18.1-linux-x64 /。 / usr / local / - npm -g安装纱线

下一步是安装所有JavaScript依赖项,这可以使用init指令完成,如:init:yarn安装。

现在我们应该拥有我们需要获取我们的React Native应用程序来构建的一切,但构建仍会失败。这就是F-Droid自动检测构建中可能的无自由依赖性,并且如果发现,则不会让Build继续。因此,我们应该做的下一件事是告诉它自动摆脱我们的JavaScript Deps拉动的所有无非依赖项,如:

现在我们正在进行进度,并且正在删除所有潜在的非自由依赖项。虽然构建仍然失败,因为实际需要一些这些依赖性!现在,责任在我们身上找到并确保我们所需的DEPS,这确实是牙线和F-Droid兼容的。最常见的错误是关于指向“无法识别的Maven存储库”./ node_modules / ....假设您的所有JavaScript依赖项都确实是牙线,这些可以安全地忽略,因为它们只是意味着DEPS来自JavaScript依赖关系而不是通过maven(再次,非常常见)。我们将在片刻处理这些问题。第二个,更严重的问题是.jar,.aar和.so文件被删除。在这里,您需要额外注意,以确保这些文件确实是牙线,来自可信源,并且只是预先编译以易于分发。一旦找到上述两个问题的所有出现,您就可以告诉F-Droid忽略它们。例如,这是我们在eteSync中拥有的:

scanignore: - android / build.gradle - node_modules / jsc-android - node_modules /反应 - 本机/ android / com / facebook /反应/反应 - 本机/ * / - node_modules /反应 - 本机 - 外观/ android / build.gradle - node_modules /反应 - 本机 - 重新修复/ android / build.gradle - node_modules /反应 - 本机 - 安全区域 - context / android / build.gradle - node_modules / ract-native-screens / android / build.gradle - node_modules /反应 - 原生/ libsodium / * / lib / libsodium.so - node_modules /反应 - 本机 - vector-icons / android / build.gradle - node_modules/@reacect-native-community/async-storage/android/build.gradle - node_modules / @reacont-native-community/masked-view/android/build.gradle - node_modules/@reace_native-community/netinfo/android/build.gradle.

所有反应本机应用都需要前三条线。它们只是主要的反应天然Deps,这是牙线的。应根据您自己的依赖项如上所述,应添加其余部分。请注意,一些世博模块取决于非自由组件,因此它们可能与F-Droid不兼容。

这是它,您的应用程序现在应该为F-Droid构建。只需务必通过贡献指南来确保一切顺利。

如您所见,在您知道如何,它非常容易在F-Droid上构建React本机应用程序。但是,有一些改进可以进入F-Droid,这将使过程更容易。如果F-DROID构建机器包括最新节点,并且可能是一个可以自动包含一些上述步骤的指令。

以上是我们需要做的一切,以便获得eteSync注意到正确构建F-Droid。我们在eteSync,正试图使其更容易构建牙线,端到端加密和隐私尊重应用程序,这就是我们最近发布了etebase的原因。如果您分享了我们对保护用户自由和隐私的热情,请加入我们的社区。