在 Codename One 中管理我的应用程序的演示/完整版
Posted
技术标签:
【中文标题】在 Codename One 中管理我的应用程序的演示/完整版【英文标题】:Managing Demo / Full version of my app in Codename One 【发布时间】:2016-09-15 07:29:47 【问题描述】:我被要求提供 2 个版本的应用程序:一个是演示版/轻量版(功能有限),另一个是完整版(所有功能)。我在代码中有一个布尔值,它告诉哪个正在运行。它们都在模拟器或测试设备(ios 和 android)上按预期运行。
现在我想分发它们。所以我读到with XCode to define different targets 可能对应于轻量级/完整版,而Eclipse 可以将基础项目定义为库,然后创建两个项目也对应于轻量版/完整版。
在我开始搞乱我的应用程序项目之前,是否有推荐的方法来实现我的 CodenameOne 目标,可能是通过构建提示来更改应用程序名称和代码中的布尔值,具体取决于构建提示值?
EDIT 19/09/2016(工作方法)
这里遵循 Shai 的建议是我根据完整版本生成轻量版的步骤(以防有人遇到相同的情况):
-
在您的 IDE(Eclipse 或其他)下复制并粘贴基本包到 src 文件夹中,并将其重命名为 com.packageLIGHT.appName (只需将 LIGHT 附加到包名称中,不要使用下划线或空格,因为它以后会被苹果视为非法字符)
=> 所以现在在 src 文件夹中你应该有
src
|- com.packageLIGHT.appName
|- com.package.appName
然后在 com.packageLIGHT.appName 中删除除 MyApp.java 之外的所有文件(又名主文件)。在这个文件中添加import com.package.myApp.*;
3.1。 (ECLIPSE)在“运行/运行配置”菜单中复制现有配置并将其粘贴为 Simulator_MyAppLIGHT 并在参数中将其更改为“com.packageLIGHT.myApp.MyApp”。
3.2。 (NETBEANS)“运行/设置项目配置”似乎没有按预期工作,因为可能选择的任何配置都会导致相同的默认行为。但是,应用第 6 步并随后在模拟器中运行该项目具有预期的结果。
现在您应该能够通过运行不同的配置来运行这两个版本。
对于 iOS(不确定 Android 是否也需要),您必须生成另一对配置文件。因此,移动 iosCerts/FULL 中的现有文件并使用 CN1 向导生成“轻”版本配置文件,您将在其中调整包名称以匹配“com.packageLIGHT.myApp”。将生成的文件存储在 iosCerts/LIGHT 中。 无需覆盖现有证书(more on certificate here)。
最后将“codenameone_settings.properties”中的原始包名称替换为“light”行codename1.ios.appid
和codename1.packageName
。还要根据您要构建的内容将 iOS 配置文件更改为 iosCerts/LIGHT 或 FULL。
现在,当您将 Android/iOS 构建发送到 CN1 服务器时,它将构建“轻量级”版本或完整版本,具体取决于“codenameone_settings.properties”中写入的包。
李>请注意:如果在第 6 步,您在第 469 行(android 构建)或 344(iOS 构建)的 build.xml 上得到 NullPointerException,它处理 certPassword="$codename1.android.keystorePassword
(android 构建)或 appid="$codename1.ios.appid"
(iOS build) 并且您在 Eclipse 下使用 CN1 插件版本 1.0.0 20160812 那么Shai's comment below 可能是值得的
【问题讨论】:
【参考方案1】:如果您想要同一个应用的 2 个不同版本,那么您需要 2 个不同的包,因为在商店中唯一定义应用的是应用包。有两种常见的方法:
将功能放在 cn1lib 中并构建两个应用程序 构建一个应用程序并交换codenameone_settings.properties
文件
第一个应该很清楚,但使用起来可能会有点痛苦,因为您无法运行 cn1lib 并且可能会遇到调试问题。
第二个其实很简单。创建应用程序的主版本,然后将包添加到演示版本并在那里复制主文件。
要运行演示版,只需在 IDE“运行设置”中更改包即可。
将您的codenameone_settings.properties
复制到一个单独的文件中,并将所有常规包名称替换为演示包名称。当您想构建“演示”版本时,将codenameone_settings.propeties
文件相互替换,您显然可以使用脚本自动执行该操作。
【讨论】:
谢谢!我申请了第二个没有成功。我的主要版本位于 com.package.appName。我备份了代号one_settings.properties,并将原来的com.package.appName 替换为com.package_LIGHT.appName。在 Eclipse 中,我不需要“运行配置”。最终我将 Android 版本发送到 CN1,但由于MyApp/src/main/java/com/package_LIGHT/appName/AppNameStub.java:23: error: cannot find symbol
而失败。我理解它为什么会失败,但是如何避免呢?我看到的唯一方法是创建一个新的演示项目并复制粘贴主版本的内容。你是这个意思吗?
您需要有两个主要类,一个在 package 下,另一个在 package_LIGHT 下。请注意,这可以让您区分两种实现的逻辑,甚至可以通过从另一个派生来重用代码
感谢您提供此信息。在 IDE 中运行这两个版本之前,一切正常。但是,当我尝试发送 ANdroid 或 iOS Build 时,它会失败(请参阅我在问题中的编辑),而且我无法从 CN1 首选项打开“基本”菜单。我将我所做的确切步骤和我得到的错误堆栈放在原始问题中,以便您更好地了解正在发生的事情。
这意味着找不到属性,因为那里没有定义元素。没有进入基础部分的问题是我们修复的,它是由于 icon.png 丢失或损坏而触发的
OK icon.png 确实有问题(Gimp 也无法打开)。它已重新生成,现在可以再次打开基础部分。构建过程也完美无缺。我将更新问题,以便人们可以逐步找到完整的方法。非常感谢 Shai!以上是关于在 Codename One 中管理我的应用程序的演示/完整版的主要内容,如果未能解决你的问题,请参考以下文章
无法将 Gradle 依赖项添加到我的 Codename One 项目
如何将 Firebase 添加到 Codename One iOS 应用程序?
如何在 Codename One 中设置 FacebookUrlSchemeSuffix 构建提示