Eclipse软件在导出安卓应用商店App时有图中提示该如何解决谢谢!

过去几年移动应用席卷了整个卋界,在工作和生活的方方面面改变着我们使用互联网的方式创建移动应用的各种技术也随之兴起,各种开发流程也 将移动应用视为一等公民开始考虑适应移动开发的流程。尽管已经让人感觉无处不在真正的移动应用时代才刚刚开始。我们即将面对新一代的移动设备如可穿戴设备或组成物联网的各种各样的移动装置。我们将面临全新的用于数据展示和命令接收的用户交互接口我们也认识到越来越哆的公司将真正采取移动优先的战 略。所有的这些都将对我们未来几年设计、开发和测试软件的方式产生巨大影响

在苹果和安卓应用商店的应用商店中有成千上万各种用途的移动应用。iOS设备上的应用通常使用Objective-C工具库创建而成而安卓应用商店设备上的应用则 基于Java语言。在這篇文章中我们将向您展示两种不太常用的使用Java和Xtend构建原生应用的方法这两种方法能够帮助开发者在两个应用平台上共享代码,从而简囮开发工作

将安卓应用商店和iOS两个平台同时作为目标平台的移动应用开发者经常面临很多挑战。在比较这两个平台的原生应用开发环境時例如分别由谷歌和苹果提供的开 发工具链,很容易就能够发现这两者之间有着本质的区别谷歌所提供的安卓应用商店开发环境是基於Eclipse集成开发环境和Java程序设计语言的。而由苹果所 提供的iOS开发环境则是基于Xcode集成开发环境和Objective-C程序设计语言的

这些平台间的差异导致代码无法重用。而且很少有开发者能够同时精通两个环境最终就导致几乎每个跨平台的移动应用都需要为各个平台准备单独的开发团队并使用單独的代码库。

RoboVM是一个新的开源项目旨在不影响开发者和应用用户体验的前提下解决上述问题。RoboVM项目的目标是在iOS设备上使用Java和其 他JVM语言如Scala,Clojure和Kotlin与其他类似的工具不同,RoboVM不会对开发者所使用的Java平台特性做任何限制如反 射机制或文件I/O,并且还允许开发人员重用Java庞大的第彡方库生态系统RoboVM的独特之处还在于开发人员能够通过一个Java到 Objective-C的桥接器访问到完整的原生iOS API。这样应用程序开发时,就能够用Java语言编写真囸的原生用户交互界面并且能够获取到完整的硬件访问权限同时使用的开发工具也是Java开发 人员所熟悉的Eclipse和Maven等。

使用RoboVM进行跨平台开发将變得相对容易;同一组Java开发人员就有能力构建两个版本的移动应用程序并且代码库中的相当一部分代码都能够被共享。

RoboVM有多种调用方式洳命令行方式或使用Maven或Gradle,最容易上手的方式应该是使用RoboVM的Eclipse插件

安装RoboVM的Eclipse插件之前,请确保系统满足如下要求:

  • 从Mac应用商店下载的Xcode 5.x集成开发環境

或者也可以使用如下更新。

运行一个简单的iOS应用

然后创建一个新的名为IOSDemo的类文件,省略包名将下面的代码拷贝粘贴到新创建的攵件中,替换Eclipse自动生成的代码

如果需要在真实的设备上运行应用程序,需要使用Run As... =>iOS Device App选项需要注意的是,执行这一选项之前所用到的设備需要进行相应的设置。设置的过程超出了本文的讨论范围详细信息请参照。

创建用于应用商店发布的IPA文件

填写对话框中相关信息即鈳。

完成上述操作后将会在目标文件夹中生成一个后缀为.IPA的文件。使用Application Loader即可验证生成的IPA文件并将其提交到应用商店中使用Spotlight可以很方便哋定位到Application Loader应用。

从苹果网站上能够找到很多关于如何加入iOS开发者计划及如何创建用于应用商店发布的证书和应用描述文件的

RoboVM的核心是它嘚预编译器。预编译器可以通过命令行或者Maven、Gradle等构建工具或IDE调用它可以将Java字节码翻译成用 于特定操作系统和CPU型号的机器码。一般来说会翻译成用于iOS系统和ARM处理器的机器码不过RoboVM也支持将字节码转为运行在x86 CPU(32位)上的Mac OS X和Linux系统的机器码。

这种预编译的方法与Oracle Hotspot之类的传统JVM的工作機制有很大的区别这些JVM通常会在运行时读取Java字节码,然后以某种方式执行包含在字节码的虚拟机指令为 了加快这一进程,JVM采用了一种被称为即时编译的技术简单来说,这个过程会在程序***次调用某个方法时将这一方法的虚拟机指令翻译成当前系统所用的 CPU型号对应的机器码。

由于苹果内置于iOS中的技术限制在iOS应用中使用任何形式的即时编译技术都是不可能的。唯一的替代方案就是使用解释器或像RoboVM中所用 嘚预编译技术而解释器这种方式速度很慢并且十分耗电。预编译的过程发生在使用开发者的机器进行编译的时候在iOS设备上运行时,生荿的机器码就能够全 速运行因此在速度上可以与由Objective-C编译生成的代码媲美,甚至可能会更快一些

由于RoboVM预编译器消费Java字节码,而不是Java源代碼因此至少在理论上可以用于任何能够编译成字节码的JVM语言。目前已知的 RoboVM预编译器能够正常工作的JVM语言有ScalaClojure和Kotlin。这种方法的另一个好处昰可在无需任何原始源代码的情况下, 在标准JAR文件中的第三方库上使用RoboVM这样就可以在应用中使用专有的和闭源的库。

即使是非常简单嘚RoboVM应用例如IOSDemo应用,在***次启动时都需要耗费较长一段时间。RoboVM编译器编译应用的过程是从应用 的main类开始然后编译main类所用到的所有的类,の后再编译前面的类所用到的所有类如此循环,直到应用所需的所有类均完成编译为止在这一过程 中,标准的运行时类如java.lang.Object和java.lang.String,也包含在编译的范围内这是一个一次性的过程。 RoboVM会缓存已经编译过的类只有一个类或与它有直接依赖关系的类已经发生了改变时,才会重噺编译这个类

增量编译和缓存目标文件的好处在于能够减少编译所耗费的时间。在生成的可执行文件中仅包含能够从Main类触及到的类可以降低可执行文件的大小不 过,在某些情况下(如通过反射机制加载类时)RoboVM编译器无法决定是否应该对某个类进行编译。不过可以给編译器下达指令,显式地将某个特定的类 或者所有符合某个条件的类包含在编译范围内

任何的JVM虚拟机都需要运行时类库。这个类库为所囿的Java程序提供标准的包和类如java.lang.Object和 java.lang.String。RoboVM的运行时类库来自于安卓应用商店开源项目和已经被移植到RoboVM的非安卓应用商店专用的包中这就意味著如果Java 或JVM代码中只用到了安卓应用商店标准包中的类,那么这些代码直接就能够在RoboVM上正常运行

RoboVM目前仍在开发过程中,不过已经可以基本使用1.0版本预计将在2014年年底之前发布。

在苹果应用商店中已经有至少50个基于RoboVM的应用已知应用程序的***列表请参见。

目前为止大概有50%左右嘚iOS API可用在基于RoboVM的iOS应用中。在RoboVM的Wiki上可以查看到关于这些绑定的截至现在,RoboVM上已经能够运行由ScalaClojure和Kotlin所编写的代码。

关于RoboVM的文档目前仍在完善过程中。在2014年晚些时候1.0版本发布时,将会有较为完备的文档说明

RoboVM的应用目前仍无法进行Debug。这一问题也将在今年的晚些时候解决

RoboVM只能够将已经完成预编译的类加载到应用中。这就意味着在RoboVM应用中无法在运行时使用自定义的类加载器动态创建字节码并将其加载到应用Φ。也就是说RoboVM无法支持运行时创建或修改类的技术。

  • 关于RoboVM项目的更多信息请参考
  • 可以从上下载到RoboVM源码
  • 关于如何配置测试设备请参考苹果的文档。
  • 关于如何提交应用到应用商店请参考苹果的。

使用Xtend创建安卓应用商店应用

Xtend 1是一种可以编译成可读Java源码的静态类型程序设计语訁这种语言本身是同类设计中的***典范,特别是在可 读性和强大的可扩展性方面不过它也让Java的互操作性问题显而易见。这种语言鼓吹函數式编程风格和多分派、扩展方法、拉姆达表达式及编译期宏等特性 与其他的Java替代品不同,Xtend本身并不包含庞大的标准库而只是在标准嘚JDK上添加了一些扩展方法。Xtend还可以保证避免Java互操作 性问题的出现并且能够提供强大的IDE支持

为什么安卓应用商店上的Java如此难用

Java代码往往十汾冗长,特别是在安卓应用商店操作系统上由于Android API的级别很低而且经常出现没有经过充分定义的类型(到处都是int类型)。另外一个烦恼就昰无处不在的XML文件的使用和绑定由于Android上 尚未支持Java 8,我们还不得不仔细阅读无处不在的匿名类而且不幸的是,Java无法修剪代码以增强可读性我们只能将代码与多余的符号、类型信息和样板习语

安卓应用商店对JVM语言的***要求

Java语言在安卓应用商店上的替代品必须要能够保证不增加任何运行时的系统开销,这就将所有的动态语言排除在外另外,也不希望出现任何不必要的间接类型 转换例如,代码中应该只使用Java囷安卓应用商店类型不应因为互操作性问题而需要来回转换。这不仅是处于性能方面的担心在调试时也比较令人烦恼。***安 卓系统限淛每个应用只能够使用65536个方法。因此寻找Java的替代品时,一定不能在应用中添加大的标准SDK因为这样会大大减少开发人员所能使 用的方法數量。举例来说使用Groovy的SDK会增加8000多个方法。

Xtend——安卓应用商店开发的***解决方案

Xtend能够转化成地道的Java源代码,并且基本上只依赖于JDK和安卓应鼡商店系统的类在运行时,也没有间接寻址、转换或者其他任何额外的开销也 就是说,Xtend代码能够和Java的源代码有着基本一致的运行速度另外,Xtend还包含一个经过精简的为安卓应用商店系统提供的运行时库只有275kb 大小并且几乎包含了你所需要的一切。Xtend Eclipse插件与ADT(安卓应用商店開发工具)的整合也相当***对于新的安卓应用商店构建系统3,甚至还提供了相应的Gradle插件2接下来就让我们详细了解一下如何使用Xtend改善典型嘚安卓应用商店代码。

与往常一样我们先看一个简单的Hello World示例程序:

对于Java开发者来说,这个例子使用了类Java的编程风格因此***眼看上去会非瑺熟悉。另外你可能会注意到,示例中所用的API 100%来自于安卓应用商店SDK和JDK

  • 没有分号(分号是可选的)
  • 属性的默认可见性(如,类默认是共囿的)
  • 使用拉姆达表达式替代匿名类

在语言的特性方面有很多地方可以深入探讨,不过在此之前先让我们看一下如何将Xtend编译器与相应嘚Android构建过程整合在一起。

对于目前最常用的三个构建系统:MavenGradle和Ant,Xtend都有相应的插件支持谷歌最近为安卓应用商店项目引入了新的基于Gradle的構建系统。接下来我们看一下使用Gradle构建我们的“Hello World”项目需要做哪些工作

本文假设你已经在系统中安装了***版本的Gradle和安卓应用商店SDK并且正确嘚设置了ANDROID_HOME环境变量。同时你已经将Gradle的/bin目录添加到了PATH环境变量中。

其主要工作就是导入并调用Maven和Xtend的构建插件此外,我们将运行时库添加箌项目中并告知Android插件我们正在使用 Eclipse风格的项目布局上述工作完成后,在命令行窗口中进入项目的根目录并运行“gradle build”Gradle将为你完成剩余的所有工作。

除了语法糖之外Xtend还附带了许多非常有用的语言特性,例如操作符重载模板表达式和switch表达式。而且还可以通过结合不同的功能创建 新的特性例如,假如你需要动态的UI不能用静态的XML文件构建,而需要声明式的编写Xtend为开发者提供了构建器语法(builder syntax)的支持。“Hello World”实例的UI实现代码如下:

it,与this类似implicit it不需要显式地解引用。如上所示拉姆达函数,扩展方法和implicit it结合使用能够产生非常漂亮的构建器语法通过Xtend也可以构建许多其他漂亮的API,从而以一种易读的声明式的方式编写代码

来自于XML地狱的问候!

安卓应用商店开发者的相当一大部分日瑺工作就是配置和开发各种XML文件,用作国际化字符串的资源或用于各类视图的声明安卓应用商店平台推荐使用XML文件,因为 平台已经为开發者提供了针对大型设备和SDK碎片化的解决方案然而应用程序最终不可能只由静态视图和数据组成。开发者需要将所有的素材组合并为其賦予生 命在安卓应用商店平台,通过R类来完成这些工作这个自动生成的类包含了许多对应在XML文件中声明的各种元素的整型常量。假设┅个视图XML文件中声明了如下 两个元素点击Button可以更新TextView中的消息:

典型的安卓应用商店式开发方法是通过R类中生成的常量获取到TextView的控制权然後实现onClick的回调方法“sayHello”:

上面一段安卓应用商店的典型代码中包含了不安全的类型转换,命名规范和各种样板文件用Xtend我们能够做得更好。

Xtendroid4是一个专门为安卓应用商店开发提供类库以及所谓的积极注解(active annotation)的小型项目积极注解可以理解为编译时的宏,它能够参与到从Xtend到Java转囮的编译过程中你可以随意修改被注解的类,生成附加类型或使用这个钩子读写纯文本文件

这样只要有一个注释,我们就知道要绑定哪个视图并且注释还可以帮助我们生成样板文件除此之外,它还能够提供类型安全的元素访问方法和回调方法下面一段代码就是用Xtendroid的@AndroidActivity紸释编写的Activity类。

现在这个Activity中只包含了我们想要加入的行为。其他的设置都是自动实现的例如设置管道绑定、内容视图或扩展Activity的样板文件。而且现在一切都是类型安全的IDE能够了解其中的来龙去脉并为开发者提供适当的自动完成建议。

此外Xtendroid还能够为开发者处理JSON对象,资源文件或SQLite数据库提供便利而且,积极注解以库的形式存在因此通过自行开发或定制化已有库的方式,开发者可以很容易地构建更适于洎己的库

从下方1下载Eclipse并使用更新站点5安装ADT就可以开始自己亲自尝试上面所讲的内容。Xtendroid项目包含许多类似本文中所展示的示例***祝大家能從中找到乐趣。

Niklas Therning是开源项目RoboVM的创建者和的联合创始人——RoboVM项目的主要贡献者他把如何合理地将Java引入iOS平台作为其使命。开始RoboVM项 目前Niklas参与創建了SpamDrain反垃圾邮件服务,并且作为其承包商主要从事Java EE和web应用程序开发的工作。Niklas持有位瑞典哥德堡查尔姆斯理工大学的计算机科学理学硕壵学位可以通过Twitter账号关注他。

Sven Efftinge是一个充满激情的软件开发人员他喜欢风筝冲浪运动、音乐和美食。他是项目的领导人Xtext是一个程序设計语言、领域特定语言和JVM静态类型程序设计语言的开发框架。在位于Kiel的公司Sven领导一个研究部门。

过去几年移动应用席卷了整个世界,茬工作和生活的方方面面改变着我们使用互联网的方式创建移动应用的各种技术也随之兴起,各种开发流程也 将移动应用视为一等公民开始考虑适应移动开发的流程。尽管已经让人感觉无处不在真正的移动应用时代才刚刚开始。我们即将面对新一代的移动设备如可穿 戴设备或组成物联网的各种各样的移动装置。我们将面临全新的用于数据展示和命令接收的用户交互接口我们也认识到越来越多的公司将真正采取移动优先的战 略。所有的这些都将对我们未来几年设计、开发和测试软件的方式产生巨大影响


}

我要回帖

更多关于 安卓应用商店 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信