locked
[常见问题回答] 如何迁移你的安卓应用到Windows应用商店应用? RRS feed

  • 常规讨论

  • 本文主要针对正在寻求将自己的安卓应用程序迁移到Windows 8平台的开发人员。

    问:安卓应用和Windows商店应用在编程语言以及编程方式上有哪些差异?

    问:安卓应用和Windows商店应用在用户接口设计上有哪些差异?

    安卓应用和Windows商店应用在开发工具上的差异?

    问:安卓应用和Windows商店应用在应用程序生命周期上的区别?

    问:安卓应用与Windows商店应用在数据存储上有哪些差异,我们要如何进行选择?


    2012年9月20日 7:01
    版主

全部回复

  • 问: 安卓应用和Windows商店应用在编程语言以及编程方式上有哪些差异?

    答:

    下表比较了安卓和Windows 8应用开发,在编程框架模型上的差异:

    安卓框架

    功能

    Windows 8商店应用框架

    安卓应用程序框架

    向应用程序提供可用的API

    Windows运行时(WinRT)映射

    基于Win 8商店应用的.Net框架

    支持Win 8 商店应用的Win32 API

    安卓系统库

    提供可复用的系统级别功能以及资源

    Windows运行时库

    DirectX (2D,3D)引擎

    安卓运行时(Dalvik)

    提供语言执行引擎

    通用语言运行时(CLR)(仅对托管代码可用)

    Linux内核

    操作系统

    Windows NT内核

    安卓系统运行于Linux内核上,Windows 8则运行于Windows NT核心。他们是两个完全不同的核心,但是对于开发人员是完全透明的。

    安卓系统集成了Dalvik Java虚拟机用来执行Java的字节码。在Windows 8中,对应的提供给托管代码的虚拟机是通用语言运行时(CLR),其本身是一个即时编译(Just-in-time)引擎。不同于Dalvik虚拟机,托管代码需要先被编译成中间语言代码(IL),然后由通用语言运行时在运行的时候将中间语言代码编译成机器码来执行。整个原理能够比Java虚拟机提供更好的性能。

    安卓系统库是一套本地代码库,提供了可复用的系统级别功能以及资源。在Windows 8平台上,Windows运行时库扮演了同样的角色。他同样也是本地代码库和可复用的。如果你想开发游戏应用,则需要用DirectX引擎来替换OpenGL ES库。

    安卓系统同样还为Java应用提供了一整套API的框架。不过,在Windows 8应用商店应用中,这些API是由Windows 运行时库提供的。我们只需要用Windows运行时就可以将这种API和功能带入到不同语言开发的应用中去。如果你使用托管代码来开发应用,则可以使用一个.Net框架的子集,.Net面向Win8应用商店应用的版本。

    下表比较了安卓和Windows 8应用开发,在编程语言上的差异:

    安卓系统应用

    Windows 8应用商店应用

    Java

    C#/VB.Net

    C/C++

    C++/CX

    HTML5+Javascript

    这两个平台支持了不同的开发语言。在Windows 8中,我们支持了多种开发语言,不过与Java最相近的替代者要属C#。C#语言的语法结构与Java相近,我们可以较方便地将Java代码转换成C#代码。

    在Win8平台中,我们可以直接用C++来设计我们的用户界面以及业务逻辑。但实际上,我们更青睐于用它来设计自定义的WinRT组件而不是设计应用。



    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年9月20日 8:44
    版主
  • 还是要重新开发啊,不同的平台,不同的框架

    Frank Xu Lei--谦卑若愚,好学若饥
    [老徐的网站]:http://www.frankxulei.com/

    [老徐的博客]:http://54peixun.com/Author/frankxulei
    微软WCF中文技术论坛
    微软WCF英文技术论坛

    Windows Azure中文技术论坛

    2012年9月21日 2:44
    版主
  • 问:安卓应用和Windows商店应用在用户接口设计上有哪些差异?

    答:

    应用程序用户界面上的差异:

    虽然两者在用户界面设计上有着相似的设计准则和设计原理,但是我们需要注意Windows8应用商店应用在设计上的特殊性,要充分利用Windows 8平台的特性和优势。Windows 8上,倡导将显示内容全屏显示,不带有任何外部边框;而且建议使用粗体,以及使用活泼鲜艳的颜色、图像和抽象符号来表达我们实际的对象。在安卓下,如果我们想让我们的应用更加美观,则可以使用多种不同的样式,并没有一种主导统一的样式。不同于安卓平台,Windows 8使用了统一的用户界面控件,设计指南和设计操作方法。当然,你也可以做出你特有的设计,但是这必须遵循微软制定的 Windows 8应用商店应用用户界面设计准则:http://msdn.microsoft.com/en-us/library/windows/apps/hh465424.aspx

    下表列出了两个平台在用户界面控件的对比,Windows 8这里列出了系统已给出的实现控件:

    安卓控件

    Windows 8 应用商店应用控件

    Border

    Border

    Button

    Button

     

    HyperlinkButton

    AbsoluteLayout

    Canvas

    CheckBox

    CheckBox

    GridView

    GridView

    ImageView

    Image

    ListView

    ListView

    MediaController

    MediaElement

     

    SemanticZoom

    ViewGroup

    Panel

    EditText  

    PasswordBox

    EditText

    TextBlock   (不支持编辑功能)

    RichTextBlock   (不支持编辑功能,支持显示富文本)

    EditText

    TextBox   (支持编辑功能)

    ProgressBar

    ProgressBar

    RadioButton,   RadioGroup

    RadioButton

    ScrollView

    ScrollViewer

    SeekBar

    Slider      

    LinearLayout

    StackPanel

    MapView

    Bing Map

    WebView

    WebView

    TimePicker

    Timepicker(仅在WinJS 中支持)

    DatePicker

    Datepicker(仅在WinJS 中支持)

    ExpandableListView

     

    Gallery

     

    ImageSwitcher

     

    Spinner

     

    TableLayout

    Grid  或者相类似的组件

    TextSwitcher

     

    ViewFlipper

    FlipView

    ZoomControl

    可以用如下的控件来模仿:

    ScrollViewer

    SemanticZoom

    TabHost

    FlipView  或者相类似的组件

    SlidingDrawer

     

    RatingBar

     

    Toggle   button

    ToggleSwitch

    Options   menu

    AppBar

    Border

    Border

    如上表所示,Windows 8提供的控件能够用作替换绝大多数的安卓控件,虽然在外观上有些不同,但是他们能够提供相似的功能。

    通知服务上的差异:

    安卓和Windows 8都提供了通知服务功能,但是通知在Windows 8应用商店应用中扮演了一个关键的角色。Windows 8提供了多种不同的形式的通知 – 有通过锁屏上状态更新的通知,有通过类似浮动框的Toast通知,还有在首页动态更新的磁贴 (Tile) 通知。

    Windows 8可将信息以动态磁贴的形式滚动显示,让用户可以一目了然地了解到所需要的实时信息。动态磁贴主要用于显示一些非关键信息,且不需要去中断用户的操作。如果你在安卓中使用状态条来显示通知或者信息,在Windows 8这里,我们就可以使用动态磁贴来替代。

    Windows 8的通知服务同样也提供了Toast通知,他可以为用户带来具有时效性的非永久性的信息。一般情况下,一个普通Toast通知会显示7秒,而一个长时间的Toast通知则可以显示25秒。用户可以选择忽略这些通知,这点Windows 8与安卓系统是一样的。

    下表列出了Windows 8和安卓系统在通知服务机制上的相似之处和不同点。注意,你如果用动态磁贴替换了安卓下的状态栏通知,一方面他可以用来显示更多的信息;另一方面,他是不需要中断用户的操作,不需要用户交互相应的。

    安卓

    功能

    Windows 8

    状态栏通知

    长效信息,需要用户处理。

    动态磁贴通知

    Toast通知

    具有时效性的非永久性的通知,用户可以忽略不与之交互。

    Toast通知

    对话框通知

    一个模态提示框,用户必须与之交互后才可以继续操作。

    应用程序自身的通知对话框


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年9月25日 8:52
    版主
  • 安卓应用和Windows商店应用在开发工具上的差异

    答:

    比较于安卓应用开发工具,Visual Studio 2012是一个功能齐全的集成开发环境 (IDE), 使用Visual Studio 2012,我们可以方便地快捷地设计、开发和调试Windows 8商店应用。且Windows 8商店应用的开发工具还提供了更丰富的功能。下表概述了他们在开发工具上在功能上的区别,同时,表格中也包含了在Windows 8中开发应用和安卓开发应用时相互对应的开发工具。

    功能

    使用者

    安卓工具

    Windows 8工具

    软件开发套件(SDK)

    开发人员

    安卓SDK以及面向WindowsSDK工具

    Windows 8 SDK

    主要UI设计,包括色彩,层次和动画等

    UI设计人员

    通过XML定义(并非所见即所得WYSIWYG)或者类似于ADT UI插件,DroidDraw这类UI设计工具

    可以用所见即所得的设计工具Blend for Visual Studio 2012来进行设计

    UI设计

    UI设计人员以及开发人员

    Visual Studio 2012

    应用开发编码

    开发人员

    Eclipse  ADT插件

    Visual Studio 2012

    测试和模拟

    测试人员

    安卓模拟器

    Windows 8平板模拟器

    当你计划开发一个Windows 8商店应用的时候,你可以继续利用安卓应用开发团队的架构和开发流程,还可以继续扮演你在安卓开发过程中的角色。Windows 8应用开发工具集能够保证你的安卓开发团队中那些熟悉安卓开发工具的设计人员、开发人员和测试人员快速地迁移到Windows 8商店应用开发中来。

    开发一个应用产品,软件开发套件(SDK)肯定是第一个要安装的。在Windows平台中开发安卓应用,你应该安装安卓SDK以及相应Windows SDK工具。当然,在Windows 8应用的开发中,我们应该安装Windows 8 SDK (这里可以下载到相关的SDK以及工具)

    开发人员通常使用集成开发环境(IDE)来编写和编译代码。安卓应用开发中,我们通常使用带有ADT插件Eclipse的开发环境。而对Windows 8商店应用,微软提供了Visual Studio 2012,它已经包括Windows 8 SDK中那些开发必需的组件,因此,我们如果安装了VS2012,则可以不需要再单独安装Windows 8 SDK了。

    设计安卓应用的用户界面,我们可以在Eclipse中使用ADT UI插件或者DroidDraw。而在Windows 8中,VS 2012已经集成了UI设计工具,它同时还包括一个功能更强大的设计工具 Blend for Visual Studio 2012 一个所见即所得设计工具。

    安卓应用开发中,通常用安卓模拟器来模拟出虚拟的设备用于测试我们的应用,检测他在真实的安卓设备环境下的运行情况。而在Windows 8这里,因为Windows 8商店应用依旧可以运行在Windows 8平台下,所以模拟器不是测试的必需工具。但是,为了方便在不同的平板环境下测试,微软仍旧在Visual Studio 2012中提供了一个平板模拟器,通过它我们可以测试应用在不同分辨率下的运行情况,测试多点触控以及模拟地理位置信息等运行的情况。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年10月3日 7:14
    版主
  • 问:安卓应用和Windows商店应用在应用程序生命周期上的区别?

    答:

    Windows 8商店应用相比较于安卓应用,他在应用生命周期管理上的设计做了很多改良。为了实现更快更流畅地应用程序响应,更节能和更少地占用系统资源,我们将Windows 8商店应用设计为只有当前可见的应用占用CPU时间,而那些不可见的应用会处于挂起(Suspend)状态,系统会在他要回收资源且这些应用没有任何通知到达的情况下将这些应用终止(Terminated)。相反,安卓系统并不会终止这些暂不显示的应用,所以这些应用会一直运行直到系统资源耗尽。

    安卓应用和Windows 8商店应用多任务处理方式的比较

    除了应用激活(Activated)状态下的任务代码外,安卓应用可以通过设计服务组件(Service Component)让应用一直在后台运行其代码。服务组件可以一直在后台运行,直到应用结束或者调用stopService方法来终止。

    Windows中,会挂起任何不可见的应用进程,被挂起的进程依旧保留着内存,但是并不占用CPU时间。这意味着默认情况下,一个前台任务会在应用被切换到其他应用的时候被终止。但是我们仍然可以使用其他方式让应用处理一些动作即使他们并不在前台显示。比如我们可以让应用在后台播放音乐,传输文件,执行一些计划好的任务代码和接受通知并提醒用户。

    详细请参考博客 当应用程序在屏幕外时保持高工作效率 以及 后台任务简介白皮书。

    Windows 8商店应用的状态切换

    下图表述了Windows 8商店应用在各个状态间是如何切换的。当我们在开始页面点击一个应用的磁贴(Tile)时,应用首先从“未运行(NotRunning)”被加载激活进入到“运行(Running)”状态。然后应用就会占用整个屏幕。当我们切换到其他应用后,这个应用会被挂起;当然我们切换回来的时候,应用也会被恢复。一旦应用的挂起事件被触发(Suspending),应用会有5秒钟的时间来处理挂起操作,在这个期间我们可以存储应用和用户相关的数据。在挂起状态下,应用的主线程执行时被挂起的,但是应用本身还保留在内存中。如果用户在短时间内切回应用,则线程会被恢复执行且我们可以恢复保留在内存中的应用和用户数据。但是,有些时候,Windows可能已经没有足够的内存,必须要终止这些进程,这个时候,如果我们的应用被终止了,在恢复运行的时候,我们就可以读取已经被保存的应用和用户数据来恢复应用的执行。详细参考此文档:http://msdn.microsoft.com/zh-cn/library/windows/apps/hh464925.aspx


    在安卓环境下,我们可以在一个Activity暂停时候来保存应用的状态,可以使用onSaveInstanceState方法来存储数据,和使用onRestoreInstanceState来恢复先前的状态以及数据。

    比较安卓应用和Windows 8商店应用生命周期管理中的相关函数

    Windows 8商店应用中的页面概念类似于安卓应用中的Activity。我们可以对于安卓应用的生命周期管理的函数和Windows 8商店应用的状态切换事件以及页面函数做个比较:

    Windows 8商店应用事件

    Windows 8商店应用页面函数

    安卓应用生命周期相关函数

    OnLaunch

    InitialzeComponent()

    onCreate()

    onStart(),onResume()

    Suspending

    NavigatedFrom

    onStop(),onPause()

    Resuming

    NavigatedTo

    onResume()

    onDestory()

    当我们加载一个安卓应用时,我们可以用onCreate方法去初始化组件,然后应用会收到StartResume事件,在这两个事件中我们可以载入应用设置和数据。相应地,先前正在运行的应用会收到PauseStop事件,在这两个事件中,我们可以存应用储设置和数据。

    Windows 8中,我们可以在应用被加载收到OnLaunched事件之后,导航到我们所需要的页面,然后在页面的构造函数中调用InitializeComponent方法去初始化页面组件。当然应用也会在切回恢复的时候收到Resuming事件和切出挂起的时候收到Suspending事件。我们可以在这两个事件中做相类似的存储设置和数据以及恢复设置和数据的动作。

    我们可以在单个应用中导航切换页面。在安卓应用中,当一个Activity替换了另一个Activity的时候,当前Activity会调用onPauseonStop回调,新的Activity会调用onResune回调。这个行为类似于Windows商店应用中的页面到页面(Page-to-Page)导航。在Windows 8商店应用中,当从一个页面导航到另一个,当前页面会调用OnNavigatedFrom回调,新的页面则调用OnNavigatedTo回调。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us


    2012年10月10日 9:46
    版主
  • 问:安卓应用与Windows商店应用在数据存储上有哪些差异,我们要如何进行选择?

    答:

    Windows 8应用程序提供了全面的数据管理,这一段内容主要比较了Windows 8和安卓系统在数据管理上的区别。

     

    本地数据存储

    安卓系统与Windows 8都为应用程序提供了三种不同方式的本地数据存储方案:

    • 存储为应用程序设置(Application settings)
    • 内部存储(Internal Storage)
    • 外部存储(External Storage)
    • 数据库(需要第三方组件支持)

    目的

    安卓系统

    Windows 8

    存储应用程序设置

    SharedPreferences

    ApplicationDataContainer

    存储应用的私有数据

    内部存储(Internal Storage)

    StorageFolder

    应用共享数据

    外部存储(External Storage)

    已知库文件(KnownFolders)

    SD卡外部存储器

    文件选取器(File Picker)

    关系型数据库

    SQLite

    SQLite()

    (微软官方并为Windows 8商店应用提供本地化数据库支持,SQLiteSQLite团队开发且提供支持,本文不讨论SQLite相关问题。

    不同之处是安卓应用不仅可以访问内部存储也可以访问外部存储。在Windows 8中,同样地为每一个应用提供了内部存储空间,但是仅仅是一些特定的外部目录才可以被应用访问,比如文档库,图片库和音乐库等。如果你想要访问系统中任意的文件,你需要通过文件选取器(file picker)来选择文件。

    在两个系统中,开发人员必须去管理应用在安装和卸载时候需要存储的数据。开发人员必须在应用升级的时候去修改和整合这些数据,操作系统并不会帮你去管理数据。

    同时,两者会在应用卸载的时候删除应用的私有存储空间中的所有文件和目录。

     

    应用程序设置的存储

    下表列出了在两个平台中如何存储应用程序设置。

     

    安卓

    Windows 8商店应用

    容器类:

    SharedPreferences

    ApplicationDataContainer

    读取方法:

    getSharedPreferences/getPreferences

    ApplicationData.Current.LocalSettings

    ApplicationData.Current.RoamingSettings

    读取数据的时间点:

    onCreate()

    OnReesuming()

    写入数据时间点:

    onStop()

    OnSuspending()

     

    安卓系统提供了SharedPreferences类来保存和恢复持久化的键值对数据,这样数据可以在不同的应用会话中共享。相类似地,Windows 8提供了ApplicationDataContainer类型来存储键值对数据,ApplicationDataContainer的数据会被存储在应用的特定目录中。

    安卓系统中,getSharedPreferencesgetPreferences是用来取得数据容器对象。在Windows 8中,你可以通过ApplicationData.Current.LocalSettings属性来取得本顶存储的设置数据,或者RoamingSettings属性来取得其他设备存储的并且可以同步到本地的设置数据。

    一般来说,你应该在应用激活的时候读取存储的设置数据,而在应用退出的时候进行保存。安卓系统下,在onCreate中进行读取数据,在onStop中进行保存数据。同样,Windows 8中在OnResuming中读取数据以及OnSuspending中保存数据。

     

    内部存储

    安卓应用在应用的私有的内部目录下创建和使用文件。类似的,Windows 8可以通过StorageFolder来创建文件或者目录,通过使用StorageFolderStorageFile类来完成文件和目录的操作。

    Windows 8提供了四种不同的目录来存储私有数据:

    • 本地目录(LocalFolder):用于存储仅存在当前设备商的持久数据
    • 临时目录(TemporaryFolder):在临时目录的数据类似于缓存数据,可由系统在任何时刻删除
    • 漫游目录(RoamingFolder):存储在用户安装了该应用的所有设备上的数据
    • 安装目录(InstalledLocation):这是一个只读目录,存储了应用程序包中的所有内容

    更多关于Windows商店应用应用数据访问的内容,请阅读这里

     

    外部存储

    在安卓环境下,你可以将文件保存在一个兼容安卓系统的共享外部存储设备上。这些共享外部存储设备包括了内部可移动存储设备。在安卓系统与计算机连接时,他允许我们访问和修改这些保存在外部存储中的文件。

    由于安全原因,Windows 8应用并不提供一个通用的外部存储。我们可以访问一些系统已定义的库目录,例如文档库、视频库、音乐库和图片库目录。但是你必须先在应用的清单(AppxManifest)中声明应用可以访问这些库目录(更多内容请阅读这里)。你也可以通过RemovableDevices属性来访问SD存储设备。

    由于安全方面的原因,Windows 8商店应用默认不能够访问系统中任意的文件。如果你想访问一个特定的文件,你应该使用文件选取器来让用户显式地选取这个文件,这样应用才可以获得访问此文件的权限。

     

    更多关于安卓和Windows商店应用数据存储的内容,请阅读安卓数据存储Windows商店应用应用数据


    2012年10月15日 7:41
    版主