zoukankan      html  css  js  c++  java
  • 将Win8.1/WP8.1应用迁移到Universal Windows Platform

    在上一篇在VS2015 RC打开CTP中创建的工程,我们介绍了怎么在RC中打开CTP中创建的Universal 工程,这一篇我们来讲下怎么将Windows 8.1/WP8.1的应用迁移到Universal Windows Platform上。

    2015RC中,我们可以将8.1的应用迁移到统一平台上,进而使用新的API进行开发,下面我们使用wp8.1的应用作为例子讲解下步骤。

    1. 首先我们使用2015打开之前的工程。

    2. 右键点击工程,选择“卸载项目”。

    3. 右键点击工程,选择“编辑XXX.csproj”

    4. 和上一篇一样,取得平台版本号,路径是“Program Files (x86)Windows Kits10PlatformsUAP

    下面就开始修改工程文件了

    5. 找到个包含子节点TargetPlatformVersion、且值为8.1的PropertyGroup节点(其实一般第一个PropertyGroup就是了),进行下面的修改:

    •   把Platform的值改成x86
    •   添加TargetPlatformIdentifier节点,值为UAP
    •   把TargetPlatformVersion的值改成4中取得的版本号
    •   添加TargetPlatformMinVersion节点,值为4中的版本号
    •   把MinimumVisualStudioVersion的值改成14
    •   把ProjectTypeGuids的值改成{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
    •   添加EnableDotNetNativeCompatibleProfile节点,值为true

    6. 把所有的vs版本从12.0替换成14.0,这一步直接替换即可(CTRL+H)

    7. 删掉配置为AnyCPU的PropertyGroup节点

    8. 查看剩下配置是Release的PropertyGroup节点,如果下面没有UseDotNetNativeToolchain子节点的话,就动手加一个,值一定要是true, 即:<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>

    9. 如果是手机项目的话,还需要删除下面这个节点

    10. 现在重新加载我们的工程,会发现工程类型变成了Windows Universal了!下面还是需要修改manifest。

    11. 打开manifest文件,首先我们需要替换掉所有的schema,把Package节点用下面这段替换。

    <Package
        xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
        xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
        xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
       IgnorableNamespaces= "uap mp">

    对于Win8.1应用,还需要额外添加mp:PhoneIdentity的节点,如下,其中PhoneProductId就是Identity的Name, PhonePushedId目前是固定的值

        <Identity Name="fe8a6971-8349-489b-8941-83dd308e9b9b"
                  Publisher="CN=xxxxxxx"
                  Version="1.0.0.0" />
    
        <mp:PhoneIdentity PhoneProductId="fe8a6971-8349-489b-8941-83dd308e9b9b" PhonePublisherId="00000000-0000-0000-0000-000000000000"/>

    12. 在Package下添加如下子节点,其中的版本号就是我们之前一直用的

    <Dependencies>
    <TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.10069.0" MaxVersionTested="10.0.10069.0" />
    </Dependencies>

    13. 删除Prerequisites节点

    14. 检查你的Resources节点,如果是用到了ScaleDXFeatureLevel的话,为他们加上uap命名空间,如下

        <Resources>
            <Resource Language="x-generate"/>
            <Resource uap:Scale="180"/>
            <Resource uap:DXFeatureLevel="dx11"/>
        </Resources>

    15. 检查你的Capability节点,如果使用声明了下列这些权限,需要加上uap命名空间。

    • documentsLibrary
    • picturesLibrary
    • videosLibrary
    • musicLibrary
    • enterpriseAuthentication
    • sharedUserCertificates
    • removableStorage
    • appointments
    • contacts

    如:

    <Capabilities>
      <uap:Capability Name="documentsLibrary"/>
      <uap:Capability Name="removableStorage"/>
    </Capabilities>

    16. 将VirsualElements节点及其子节点的命名空间改成uap 

    <uap:VisualElements
         DisplayName="App9"
         Square150x150Logo="AssetsLogo.png"
         Square44x44Logo="AssetsSmallLogo.png"
         Description="App9"
         BackgroundColor="transparent">
        <uap:DefaultTile Wide310x150Logo="AssetsWideLogo.png" Square71x71Logo="AssetsSquare71x71Logo.png"/>
        <uap:SplashScreen Image="AssetsSplashScreen.png"/>
    </uap:VisualElements>

    对于Win8.1应用,这里需要注意的是,属性Square{SIZE}Logo中的size有了变化,70x70变成了71x71, 30x30变成44x44.

    旧的:

    <m2:VisualElements
        …
        Square30x30Logo="AssetsSmallLogo.png">
     <m2:DefaultTile
          …
          Square70x70Logo="images/70x70.png">
    </m2:VisualElements>

    新的:

    <uap:VisualElements
        …
        Square44x44Logo="AssetsSmallLogo.png">
     <uap:DefaultTile
          …
          Square71x71Logo="images/70x70.png">
    </uap:VisualElements>

    17. 检查Extensions节点,为下列节点添加命名空间uap

    • windows.accountPictureProvide
    • windows.alarm
    • windows.appointmentsProvider
    • windows.autoPlayContent
    • windows.autoPlayDevice
    • windows.cachedFileUpdate
    • windows.cameraSettings
    • windows.fileOpenPicker
    • windows.fileTypeAssociation
    • windows.fileSavePicke
    • windows.lockScreenCall
    • windows.printTaskSettings
    • windows.protocol
    • windows.search
    • windows.shareTarget

    如:

    <Extensions>
      <uap:Extension Category="windows.alarm"/>
      <uap:Extension Category="windows.search" EntryPoint="MyActivateableClassId.baz"/>
      <uap:Extension Category="windows.protocol">
        <uap:Protocol Name="mailto" DesiredView="useHalf">
         <uap:DisplayName>MailTo Protocol</uap:DisplayName>
        </uap:Protocol>
      </uap:Extension>
    </Extensions>

    18. 为类型为chatMessageNotification的后台任务加上uap命名空间

    如:

    <Extension Category="windows.backgroundTasks" EntryPoint="Fabrikam.BackgroundTask" Executable="MyBackground.exe">
     <BackgroundTasks ServerName="MyBackgroundTasks">
        <uap:Task Type="chatMessageNotification"/>
      </BackgroundTasks>
    </Extension>

    19. 修改PackageDependency,添加Publisher和MinVersion属性

    <Dependencies>
     <PackageDependency
          Name="Microsoft.VCLibs.120.00"
          Publisher="CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US"
          MinVersion="12.0.30113.0" />
    </Dependencies>

    20. 将类型为gattCharacteristicNotification 和rfcommConnection的后台任务替换为Bluetooth类型。

    <Extension Category="windows.backgroundTasks" EntryPoint="Fabrikam.BackgroundTask" Executable="MyBackground.exe">
    <BackgroundTasks ServerName="MyBackgroundTasks">
               <Task Type="bluetooth"/>
    </BackgroundTasks>
    </Extension>

    21. 使用新的bluetooth capability替换bluetooth.rfcomm和bluetooth.genericAttributeProfile 

    旧的:

    <Capabilities>
      <m2:DeviceCapability Name="bluetooth.rfcomm">
        <m2:Device Id="any">
         <m2:Function Type="serviceId:34B1CF4D-1069-4AD6-89B6-E161D79BE4D8"/>
        </m2:Device>
      </m2:DeviceCapability>
      <m2:DeviceCapability Name="bluetooth.genericAttributeProfile">
        <m2:Device Id="any">
         <m2:Function Type="name:heartRate"/>
        </m2:Device>
      </m2:DeviceCapability>
    </Capabilities>

    新的:

    <Capabilities>
      <uap:DeviceCapability Name="bluetooth"/>
    </Capabilities>

    22. 删除Windows.contact和windows.contactPicker扩展

    23. 删除VisualElements的ForgroundText和ToastCapable属性

    24. 删除DefaultTitle的DefaultSize属性

    25. 删除ApplicationView节点

    26. 到此manifest文件就修改完了,保存吧!虽然看上去步骤有点多,其实17之后的很多步骤可能是用不到的

    27. 下面我们需要删除一些额外的文件

    • 检查解决方案目录下的子目录".vs{project name}v14",如果存在".suo"文件,删掉它
    • 删除掉工程目录下所有的后缀为.csproj.user文件

     

     

     

     

     

     

    现在我们的工程就已经成功的迁移到了Universal Windows Platform了,但是对于很多应用来说,还是需要进一步修改code,因为Windows 10的很多API都有了变化。

  • 相关阅读:
    Git的Patch功能
    Android系统进程Zygote启动过程的源代码分析
    Android深入浅出之Zygote
    Android Ams浅析
    Handle机制详解
    详解Android中AsyncTask的使用
    将博客搬至CSDN
    Titanium studio安装
    Titanium studio介绍
    Android WebView useragent
  • 原文地址:https://www.cnblogs.com/ms-uap/p/4476724.html
Copyright © 2011-2022 走看看