我正在寻找替代方案来开发多个移动平台,并找到了使用Java作为通用语言的Codename One,而不是HTML/CSS/JS或脚本语言.
我找不到的是它是如何工作的.它是否将JVM与iOS和Win7的应用程序捆绑在一起,并在Android中使用Dalvik?它是否将源代码转换为本机代码,我们是否可以访问此源代码?还有其他魔法,考虑到他们承诺"不妥协"吗?在编码不可知的Java时我应该注意哪些限制?
先发制人的罢工:这是一个关于Codename One的问题,不是关于我应该选择哪个跨平台,或者我应该去当地还是应该去网络.
我和许多其他人一样,希望进军移动应用程序开发.我熟悉HTML5,CSS3,JavaScript,PHP,Ruby,.NET,但不熟悉Java或Objective-C.老实说,我不太可能成为一名移动开发人员大师,而我将开发的应用程序不太可能将Hybrid的极限推到极限,以至于无论如何我都应该去原生.所以我面临的挑战是获得足够的知识,让自己与主流的混合开发平台保持一致 - 知道我根据自己的要求做出了正确的决定.
我一直在阅读有关SO的类似帖子,并研究当前流行的Hybrid Mobile应用程序开发'解决方案',包括:
Xamarin Titanium Rhomobile PhoneGap Telerik平台
我得出的结论是,与之相关的决定并非如此简单.事实上,我开始时并没有比做出决定更接近决定.因此,我转向社区根据我的具体标准推荐哪些选项(我认为这反映了大多数自雇的开发人员在逐个项目的基础上工作,而不是一个能够为许可提供资金的大型企业开发团队成本等)
我将构建的应用程序将需要Android和iPhone版本,并且应该能够访问基本的核心电话功能,包括:摄像头,加速度计,地理位置,警报,本地存储,G传感器等,但不多.
所以,这篇文章不是主观的"哪一个最好?",而是根据以下要求寻找建议:
免费(优先),但至少对小男人负担得起:1a.可负担的每月订阅(如果必须的话)1b.在分发我的应用程序时没有隐藏的许可证费用 - 这是一个巨大的问题.
开发平台应该安装在Windows和Mac上(所以我可以自己为平台构建)2a.或者,任何集成的在线构建服务都应该是可承受的
环境应该很容易安装和配置(有这样的解决方案吗?几乎所有我尝试过的东西在查找参考文件,版本,启动模拟器等时都会遇到某种问题)
作为一个.NET MVC开发人员,Xamarin似乎是显而易见的选择,但是入门者无法调用第三方库 - 我想我需要这个 - 而每个平台每年只需299美元的"Indie",我不确定它会不会提供所需的所有功能.每个平台每年1899美元的企业版远远超出预算.
Rhomobile套件及其MVC Ruby方法似乎非常适合我,但文档需要注意(过时)并且似乎在许可方面存在大量的怀疑.我找不到明确的答案,他们没有回应简单的请求.我发现:"使用RhoElements确实需要许可证密钥,只使用非企业功能(即Rhodes应用程序)只需从build.yml中删除app_type:rhoelements." - 当然很可能我需要RhoElements!看看应用程序许可(在docs.rhomobile.com网站上),似乎你可以从摩托罗拉解决方案(或其他一些经销商)获得它们,但通常我找不到价格.这让我很担心 - 当我分发到应用程序商店时,我可以预见我会收到10,000美元的费用.
Titanium在许可方面也存在模糊之处.一些人声称他们被英国经销商追讨5000美元的许可证,其他人认为这是完全错误的,并且没有许可证费用.再一次,不知道......
相比之下,PhoneGap似乎确实勾选了方框,我没有看到对许可的担忧,但与其他解决方案相比,它需要更多的手动流程和未完成的结果 - 尽管这可能更多地与应用程序有关我已经在示例中看到而不是平台的能力.
Telerik平台看起来不错,但我怀疑以每月39美元的当前价格(以"对于修补匠和业余爱好者来说是理想的")的"开发者"产品是足够的,所以我会看到79美元的承诺一个月前付了一年 - 哎哟!我也不确定这笔费用是否涵盖了完整申请的所有许可(我希望如此).
由于我的关键标准之一是易于安装,配置和构建,我倾向于Rhomobile或Telerik,这取决于我作为构建和提交这些应用程序的开发人员的最终成本.
所有事情都被认为是我在正确的轨道上或仍然非常不知情?
非常感谢.
一段时间以来,我一直在努力反对这一点。显然读过这个:Where are core dumps write on Mac?
这样我们就100%清楚了:
我做了:
touch /cores/x
rm /cores/x
Run Code Online (Sandbox Code Playgroud)
所以写权限是好的。
做过
ulimit -c unlimited
Run Code Online (Sandbox Code Playgroud)
所以应该生成核心。
但即使是微不足道的:
sleep 100 & killall -SIGSEGV sleep
Run Code Online (Sandbox Code Playgroud)
不生成核心。我目前的赌注是操作系统的文件系统保护功能之一让我感到悲伤。另一种可能性是这与 ARM(在 M1 Max 上运行)有关。
任何想法都非常受欢迎...我什至尝试过这个但没有成功:(Mac)将核心文件保留在可执行文件所在的位置而不是/cores?
我在我的应用程序中启用了推送通知,添加了构建提示,在play开发者控制台上注册了api,在我的服务器上创建并加载了Apple证书.当我在设备上测试应用程序时,它成功注册了推送通知.但是我的问题是尝试实际发送推送通知.我希望它通过PHP发送.我使用此代码直接从开发人员指南中获取.但是这不起作用......我的代码是问题还是我在启用推送通知过程中做错了什么.
<?php
include("config.php");
$args = http_build_query(array( 'certPassword' => 'XXXXXXXX', 'cert'
=>
'http://kyven.co.za/mibrand/certificate/XXXX.p12',
'production' => false,
'device' => null, 'packageName' => 'za.co.bonyelo.mibrand', 'email'
=>
'kyri88@gmail.com', 'type' => 1,
'auth' => 'XXXXXXXXXXXXXXXXXXXXXXXXXX',
'body' => 'Test'));
$opts = array('http' =>
array(
'method' => 'POST',
'header' => 'Content-type: application/x-www-form-urlencoded',
'content'
=> $args
) );
$context = stream_context_create($opts);
$response = file_get_contents("https://codename-
one.appspot.com/sendPushMessage", false, $context);
die(json_encode($response));
?>
Run Code Online (Sandbox Code Playgroud) 我正在尝试将Java代码移植到C#,我遇到了与无符号右移操作符相关的奇怪错误>>>通常代码:
long l = (long) ((ulong) number) >> 2;
Run Code Online (Sandbox Code Playgroud)
将相当于Java:
long l = number >>> 2;
Run Code Online (Sandbox Code Playgroud)
但是对于-2147483648L
你可能认识到的情况,这会Integer.MIN_VALUE
返回一个不同于Java的数字,因为强制转换会ulong
改变数字的语义,因此我得到了不同的结果.
在C#中,这样的事情怎么可能?
我想尽可能保留代码语义,因为它是一个非常复杂的代码体.
我正在尝试使用此处提到的API获取Google Maps V2地图的屏幕截图,但这似乎总是返回底部带有Google徽标的白色图片.如果它不是徽标,我会确定这根本不起作用,但徽标意味着发生了一些事情并且地图没有显示.这大致就是我正在做的事情:
mv.setVisibility(View.VISIBLE);
mv.getMap().snapshot(new GoogleMap.SnapshotReadyCallback() {
public void onSnapshotReady(Bitmap snapshot) {
synchronized(finished) {
finished[0] = snapshot;
finished.notify();
}
}
});
Run Code Online (Sandbox Code Playgroud)
我尝试了多种不同的方法,包括将图像绘制到不同的图像和各种其他尝试.
唯一的主要区别是我使用MapView而不是MapFragment,因为我在这里无法切换到使用片段的一些技术问题.
我们有一个相当复杂的应用程序需要尽可能多的屏幕空间,自然视网膜显示Mac Books非常适合这个目的.
但是,似乎在Swing中这些设备使用的是点而不是像素.他们让我改变图标到更高分辨率的版本为讨论在这里.但是,由于我们做了很多复杂的图形和组件覆盖,我想只使用"真实像素".为了清楚起见,我对修复模糊的图像或图标(在我的情况下不实用)只是为了禁用像素加倍感兴趣.
我已经完成了我的Codename One应用程序的开发并测试了调试版本.我创建了一个Appstore版本,我准备将它提交给itunes商店,但我不确定如何做到这一点.
当我去Apple的会员区网站时,我没有看到任何区域提交应用程序或上传它.
我已经看到提到这可以直接完成,xcode
但因为我使用Codename One我没有Mac或xcode
.
java itunesconnect itunes-store application-loader codenameone
我在OPO设备上对我们的一些代码进行基准测试,这通常非常快,而且我看到很多"怪异"的性能怪异.在深入研究Android本机代码之前,我想我会问这里.
我所看到的是,执行调用的paint.setColor(argbInt)
时间比以下调用大约长5倍:
paint.setStyle(Paint.Style.FILL);
paint.setAntiAlias(false);
canvas.drawRect(x, y, x + w, y + h, paint);
paint.setAntiAlias(antialias);
Run Code Online (Sandbox Code Playgroud)
现在绘制矩形发生在GPU上,所以我猜我没有看到任何开销.但为什么我要涂上油漆颜色?
作为一个自然的后续,我如何减少所述开销?
我也看到相当多的开销canvas.restore()
(比上面的代码慢大约4倍),但我想这会有意义,因为它可能是一个复杂的操作.我只是不明白为什么setColor
会慢?
为了记录,我使用System.nanoTime()在OPO上测试了性能,并且在性能方面非常一致(不是突然的GC侥幸等等).
我正在尝试移植Codename One客户端构建,这是非常自定义的ant脚本,可以使用gradle.当您在模拟器上运行Codename One应用程序时,您没有运行应用程序主类,而是类似于:
java -classpath CodenameOneJarList com.codename1.impl.javase.Simulator nameOfTheMainClassForTheApp
Run Code Online (Sandbox Code Playgroud)
为了在gradle中执行此操作,我编辑了基本构建脚本,如下所示:
apply plugin: 'java'
apply plugin: 'application'
mainClassName = "com.codename1.impl.javase.Simulator"
// for netbeans
ext.mainClass = 'com.codename1.impl.javase.Simulator'
Run Code Online (Sandbox Code Playgroud)
然后在底部我做了这个:
run {
args 'com.mycompany.myapp.Main'
}
Run Code Online (Sandbox Code Playgroud)
这按预期工作,并在IDE(NetBeans)中按下运行时启动了模拟器.我不确定这是否是"正确的事",如果它可以在其他IDE中使用.
然后,当我尝试在调试器中启动时,由于我猜测run
目标未被调用,因此没有传递参数?
我试过这样做:
debug {
args 'com.mycompany.myapp.Main'
}
Run Code Online (Sandbox Code Playgroud)
哪个明显失败了.我不确定将参数传递给调试器的位置?
这是通过gradle标准化的吗?
关于争论的传递,我是否正确的方向?
"运行"声明性语法映射到什么?如何找到其他潜在的声明性块类型?
不幸的是谷歌搜索运行/调试等基础知识不会产生有用的东西.
codenameone ×7
java ×5
android ×2
macos ×2
build.gradle ×1
c# ×1
cordova ×1
coredump ×1
google-maps ×1
gradle ×1
itunes-store ×1
mobile ×1
parparvm ×1
performance ×1
php ×1
rhomobile ×1
signals ×1
swing ×1
titanium ×1
unix ×1
xamarin ×1