Xamarin.Android 打包Apk


由于大部分内容来自Xamarin的官网,因此这篇文章定义为翻译,原文地址: http://developer.xamarin.com/guides/android/deployment,_testing,_and_metrics/publishing_an_application/part_1_-_preparing_an_application_for_release/

转载请注明出处:http://blog.csdn.net/supluo/article/details/43950105

个人搞了个博客App,平时上个厕所,睡觉前等随便看两篇文章,总能有些收获,希望大家支持!http://blog.csdn.net/supluo/article/details/43489475


一个应用经过编码测试之后,接下来就是应该打包发布,Xamarin.Android的打包需要经过一下几个步骤:

1、以Release模式编译程序

        --这一步包括设置一些应用程序的属性。

2、创建一个私钥

        --Apk是需要进行数字签证之后才可以在手机上运行的,我们调试的时候,编译器会默认以一个debug.keystore(通常在C:\Users\{pc name}\.android路径下)进行签名;

因此这一步我们需要创建一个属于我们自己的秘钥用于对apk进行签名(此秘钥不可丢弃,否则后续的升级之类会出现签名问题)。这一步通常只需要做一次,也就是一个秘钥是可以重复使用的。

3、对Apk签名

        --用私钥对Apk进行数字签名

4、对Apk进行Zipalign操作

        --zipalign其实是Android SDK中包含的一个工具,它能够对打包的应用程序进行优化,使得在运行时交互更为有效。Xamarin.Android会在运行时进行检查并且不允许没有经过zipaligned操作的Apk运行。

上面的3、4两个步骤在Xamarin Studio和Visual Studio上有所不同,下面详细说明。

一、以Release模式编译程序

    以Release模式编译程序应该处理以下步骤:

    1)、设置运行模式为Release(在编译器顶部的工具栏上面)。

        --这一步是为了防止用户在设备上使用ADB或者其他工具进行调试。

    2)、明确程序图标

        --每一个Android程序都应该指定一个应用程序图标,虽然这个在技术层面上并不是必须的,但是在一些应用市场,比如Goole Play等这些就会要求这个。

    3)、设置版本号

        --这一步是为了初始化活着更新版本信息,这个对于以后程序的更新和确保用户知道他们安装的是什么版本的应用很重要。

    4)、设置Linker

        --Linking是Xamarin.Android特有的步骤,可以通过除去未使用的代码大大减少最终的APK大小。

    5)、编译

        --这一步将会把代码和资源整合到一个APK中用于准本签名。


在发布的时候,通常我们要设置Application(Debuggable = false);

这里我们有一个最简单的方法,将以下代码加入到AssemblyInfo.cs(项目工程的Properties目录下)中:

#if DEBUG
[assembly: Application(Debuggable=true)]
#else
[assembly: Application(Debuggable=false)]
#endif

二、指定程序图标

AssemblyInfo.cs中设置属性:[assembly:Application(Icon="@drawable/ic_launcher")]

Xamarin Studio中可以对着项目右键->Project Options ->Android Application 在右边设置Application icon的值

VS 2012中方法类似,只不过是对着项目右键 ->属性(property )->Android Manifest -> Application Icon

VS 2010好像没有这个设置,因此需要使用设置属性的方式。

三、指定版本号

这里有两个容易混淆的地方versionCode和versionName;

android:versionCode--这是一个整数值代表应用程序的版本。大多数应用程序会以1作为初始版本值,每次发布的时候再递增这个值。

这个值与android:versionName没有什么关系(见下面介绍)。应用和发布服务都不会向用户展示这个值。

android:versionName--这是一个字符串,会在 Google Play等此类的应用市场中向用户显示。这个字符串不会被Android内部所使用,这可以是任何能够帮助用户识别安装在他们设备上的应用的字符串值。


四、用Relase模式编译程序

在用Relase之前,很重要的一步是设置Linker, The linker in Xamarin.Android will use static analysis to determine which assemblies, types, and type members are used or referenced by a Xamarin.Android application. The linker will then discard all the unused assemblies, types, and members that are not used (or referenced). This can result in a significant reduction in the package size. 

上面一段英文就说明了Linker的作用,其实也不是很难,认真看看还是能明白是什么意思吧。

下面举了一个Hello World的例子:

Configuration

Xamarin.Android 4.2.5 Size

None

17.4 MB

SDK Assemblies Only

3.0 MB

也就是我们新建一个Hello World工程,如果我们什么都不设置,编译的大小为17.4M,但是如果我们设置为SDK Assemnblies Only,APK大小就变为了3M,减少了83%的大小。

在VS 2013中,我们可以通过右键项目,选择属性进入Linker设置,见下图

技术分享

上图红色框中包含三个选项:

  • None – This turns off the linker; no linking will be performed.
  • Sdk Assemblies Only – This will only link the assemblies that are required by Xamarin.Android . Other assemblies will not be linked.
  • Sdk and User Assemblies – This will link all assemblies that are required by the application, and not just the ones required by Xamarin.Android.
在Xamarin.Studio中,

技术分享

上面红色框也有三个选项,其实与VS2013中的选项意思是相同的


  • Don‘t link – This turns off the linker; no linking will be performed.
  • Link SDK assemblies only – This will only link the assemblies that are required by Xamarin.Android . Other assemblies will not be linked.
  • Link all assemblies – This will link all assemblies that are required by the application, and not just the ones required by Xamarin.Android.
配置Linker可能产生一些副作用,因此设置Linker之后,反复测试是很重要的,并且这些测试应该在真正的设备上进行。

配置Linker之后,就可以编译程序了,编译之后,就可以用之前创建的私钥进行签名。当然我们也可以在运行之后的发布过程中新建秘钥进行签名。

先到这里,有点工作上的事情要处理,后面再补上。



郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。