在Codename One

时间:2016-09-15 07:29:47

标签: codenameone

我被命令提供2个版本的应用程序:一个演示/灯光(限制功能)另一个完整(所有功能)。我在代码中有一个布尔值,告诉哪一个正在运行。它们都在模拟器或测试设备(iOS和Android)上按预期运行。

现在我想发布它们。所以我读到可能with XCode to define different targets对应轻/完全版本,并且使用Eclipse可以将基础项目定义为库,然后创建2个项目,也对应轻/完整版本

在我开始搞乱我的应用程序项目之前,是否有推荐的方法来实现我的CodenameOne目标,可能是通过构建提示,根据构建提示值更改应用程序名称和代码中的布尔值?

编辑19/09/2016(工作方法)

按照Shai的建议,这里是我根据完整版本生成一个简易版本的步骤(如果有人遇到相同的情况):

  1. 在IDE下(Eclipse或whathever)将基础包复制并粘贴到src文件夹中并将其重命名为com.packageLIGHT.appName (只需将LIGHT附加到包名称,不要使用下划线或空格,因为它将被Apple视为非法角色
  2. =>所以现在在src文件夹中你应该有

    的src

    | - com.packageLIGHT.appName

    | - com.package.appName

    1. 然后在com.packageLIGHT.appName中删除除MyApp.java(也就是主文件)之外的所有文件。在此文件中添加import com.package.myApp.*;

      3.1。 (ECLIPSE)在“运行/运行配置”菜单中,复制现有配置并将其粘贴为Simulator_MyAppLIGHT,并在参数中将其更改为“com.packageLIGHT.myApp.MyApp”。

      3.2。 (NETBEANS)“运行/设置项目配置”似乎没有按预期工作,因为任何可能选择的配置都会导致相同的默认行为。但是,应用步骤6.然后在模拟器中运行项目会产生预期的结果。

    2. 现在,您应该可以通过运行不同的配置来运行这两个版本。

    3. 对于iOS(不确定Android是否也需要),您必须生成另一对配置文件。因此,移动iosCerts / FULL中的现有文件并使用CN1向导生成“轻型”版本配置文件,您可以在其中调整包名称以匹配“com.packageLIGHT.myApp”。将生成的文件存储在iosCerts / LIGHT中。 无需覆盖现有证书(more on certificate here)

    4. 最后在“codenameone_settings.properties”中替换原始包名称,其中“light”代表行codename1.ios.appidcodename1.packageName。还要根据您要构建的内容将iOS配置文件更改为iosCerts / LIGHT或FULL。

    5. 现在,当您将Android / iOS版本发送到CN1服务器时,它将构建“轻”版本或完整版本,具体取决于“codenameone_settings.properties”中写入的包。

    6. 请注意:如果在步骤6,您在第469行(android build)或344(iOS版本)上的build.xml上获得NullPointerException,它处理certPassword="${codename1.android.keystorePassword}(android build)或{{1 (iOS版本)你在Eclipse下使用CN1插件版本1.0.0 20160812然后Shai's comment below可能是值得的

1 个答案:

答案 0 :(得分:2)

如果你想要同一个应用程序的2个不同版本,那么你需要2个不同的包,因为在商店中唯一定义app的东西就是app包。有两种常见的方法:

  • 在cn1lib中放置功能并构建两个应用
  • 构建一个应用,只需交换codenameone_settings.properties文件

第一个应该非常清楚但是可能有点痛苦,因为你无法运行cn1lib并且可能会遇到调试它的问题。

第二个实际上相当简单。创建应用程序的主要版本,然后将软件包添加到演示版本并将主文件复制到那里。

要运行演示版,只需在IDE“运行设置”中更改软件包。

codenameone_settings.properties复制到单独的文件,只需将所有常规软件包名称替换为演示软件包名称即可。当您想构建“演示”版本时,将codenameone_settings.propeties文件替换为彼此,您可以使用脚本显然自动执行此操作。