C#使用Xamarin开发可移植移动应用进阶篇(8.打包生成安卓APK并精简大小),附源码

我记得,之前在写安卓方面的文章的时候,有人就问过我.Xamarin.Android为什么打包出来这么大?随便一个HelloWord就20-30MB?

嗯..今天我们就来解决这个问题..

我们先从指定一个应用程序图标开始..

1.指定应用程序图标

我们直接右键Android项目,属性.选择安卓清单.如下:

在Application Icon选项中,我们可以任意选择一个已有的图片资源文件,并设置为应用程序的图标.

就完成了 - - 是不是很简单..

 

2.设置应用程序版本和名称

VS2017里面已经翻译的比较完善了,我就不多解释了..直接如下图:

 

3.精简和收缩APK(重点)

   3.1取消快速部署

首先我们进入

然后,我们将打包属性中的如下两项勾选取消:(注意:这里是取消!!)

 

3.2设置连接器,精简Xamarin的引用

然后,我们向下滑,找到链接器属性,设置如下:

连接选择,仅SDK程序集.(默认为无)

Xamarin.Android中的链接器采用静态分析来确定Xamarin.Android应用程序使用或引用了哪些程序集,类型和类型成员。然后,链接器将丢弃未使用(或引用)的所有未使用的程序集,类型和成员。这就使得我们最终的应用大小得到了显着的降低。例如,微软官方的 HelloWorld例子,其APK的最终大小减少了83%:

  • 配置为:无 - Xamarin.Android 4.2.5大小= 17.4 MB

  • 配置为:仅限SDK组件 - Xamarin.Android 4.2.5大小= 3.0 MB

 

3.3设置Android ProGuard

ProGuard是一个Android SDK工具,用于链接和模糊Java代码。ProGuard通常用于减少APK中大型附加库(如Google Play服务)的占用空间来获得较小的应用程序。

ProGuard会删除未使用的Java字节码,这就会让生成的应用程序更小。

一般,在小型Xamarin.Android应用程序上使用ProGuard通常可以减少大约24%的大小

如果,在具有多个库依赖性的较大应用程序上使用ProGuard通常可以实现更大的尺寸缩小。

ProGuard不是Xamarin.Android连接器的替代品。Xamarin.Android链接器链接托管代码,而ProGuard链接Java字节码。

生成过程是首先使用Xamarin.Android链接器来优化应用程序中的托管(C#)代码,然后使用ProGuard(如果启用)在Java字节码级别优化APK。

启用ProGuard的检查,Xamarin.Android上运行所产生的APK ProGuard的工具。ProGuard配置文件在构建时由ProGuard生成和使用。

Xamarin.Android还支持自定义ProguardConfiguration构建操作。您可以将自定义ProGuard配置文件添加到项目中,右键单击它,并将其作为构建操作选择.

这里,我们直接用默认的操作.也就是勾选它就可以了 如图:

 

 

 

4.存档并发布生成APK

嗯..这就是我们的最后一步了,

第三步的内容设置完成后,我们就可以存档了.

操作如图:

这样,就会跳转到存档界面,如下:

我们等待它打包完成.完成后,后面的齿轮会有个绿色的勾,如下图:

点击分发,来完成最后的发布操作,如下图:

我们可以选择谷歌play的证书,也可以自己创建一个临时的证书.

这里我们创建一个临时的证书.如下图:

点击+号,创建证书.并填写如下图的信息,请牢记你这里输入的密码.

完成创建后,我们直接选择刚刚创建的证书,来进行分发.

选中证书后,选择另存为.然后选择APK文件的存放路径.

点击保存,会让你输入证书的密码.,我们填写刚刚输入的密码.

等待生成完成,就好了.

至此,我们就完成了整个APP的打包 精简压缩和发布流程. 

写在最后

本篇只是讲解了APP的打包流程,作为一个发布的应用,当然不是这么简单就完事了.

为了保证安全性,我们虽然用ProGuard混淆了JAVA代码,但是我们的.NET代码并没有混淆.通过解压APK程序反编译我们的dll,源码就会很轻易的暴露..

下篇我们就来讲解,如何混淆我们的.NET代码

相关文章: 

  • C#使用Xamarin开发可移植移动应用(1.入门与Xamarin.Forms页面),附源码

  • .NET Standard@Xamarin.Forms

  • C#使用Xamarin开发可移植移动应用(2.Xamarin.Forms布局,本篇很长,注意)附源码

  • C#使用Xamarin开发可移植移动应用(3.Xamarin.Views控件)附源码

  • C#使用Xamarin开发可移植移动应用(4.进阶篇MVVM双向绑定和命令绑定)附源码

  • C#使用Xamarin开发可移植移动应用(5.进阶篇显示弹出窗口与通讯中心)附源码

  • C#使用Xamarin开发可移植移动应用进阶篇(6.使用渲染器针对单个平台自定义控件),附源码

  • C#使用Xamarin开发可移植移动应用进阶篇(7.使用布局渲染器,修改默认布局),附源码

原文地址:http://www.cnblogs.com/GuZhenYin/p/7457412.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/323837.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue中设置子组件的点击事件不影响父组件的点击事件

“大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂。”今天分享个技术块儿。在做项目的过程中,遇到了个问题,简单的描述一下:有一个card卡片,上面绑定了个点击事件,点击card卡片&a…

一个还算简单的微信消息SDK(基于.Net Standard 2.0)

虽然微信公众号出现了好久,不过在SDK这件事情上感觉并没有多少人把它当成一个有技术含量的事情来做,很多SDK做的事情就是一个代码的堆叠,当然也可能写的好的并没有开源出来。所以在某个翻遍github而无所获的下午我写了一个基础的基于事件的微…

汇编语言(二十八)之统计单词

输入一行字符串,统计单词SUN出现的个数 程序运行: 代码: datas segmentENG_max_length db 0ffhENG_length db 0ENG db 100h dup(?)eng_len dw 0SUN db SUNsun_len dw $-SUNcount dw 0…

这可能就是写代码的乐趣吧,你,也一定会爱上写代码的!

“大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂。”现在是:2021年10月23日22:02:41。于我来说,最感兴趣的莫过于上课和写代码了。最近一下在做一个项目,可能是前期数据库设计的不是很好,导…

汇编语言(二十九)之数值的二进制和十进制

给定一个数,输出该数的二进制和十进制数 程序运行: 代码: datas segmentVAL1 dw 156datas endsstacks segment stackdb 100h dup(?)stacks endscodes segmentassume cs:codes,ds:datas,ss:stacks BANDO proc far start:push dsmov ax,0…

ASP.NET Core MVC – Tag Helper 组件

ASP.NET Core Tag Helpers系列目录,这是第五篇,共五篇: ASP.NET Core MVC – Tag Helpers 介绍ASP.NET Core MVC – Caching Tag HelpersASP.NET Core MVC – Form Tag HelpersASP.NET Core MVC – 自定义 Tag HelpersASP.NET Core MVC – T…

vue+elementui中,el-select多选下拉列表中,如何同时获取:value和:label的值?

大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂。 项目场景: 正如题目所说,今天在项目过程中遇到了个需求,因为需要在前台展示运动员的名称,但是运动员的编号在别的地方还需要使用&#xff…

C#使用Xamarin开发可移植移动应用进阶篇(9.混淆代码,防止反编译)

嗯,既然是客户端应用,自然而然就需要一些防止源码泄漏的手段.通过C#编写的APP,完全是可以直接解压APK,然后得到里面的DLL然后进行反编译的.. 如下图: 嗯..这样就会造成代码泄漏.. 下面就介绍一下,如何使用VS自带的Dotfuscator来进行混淆代码. 1.安装Dotfuscator 打开VS2017…

想绝交,就借钱!

“大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂。”今天谈论的话题只有两个字,就是“钱”之前在原来单位工作的时候,老板就给我说,我弟弟的工资让我帮忙管着,不然到用的时候拿不出来&#…

luoguSP1805,POJ2559-Largest Rectangle in a Histogram【单调栈】

正题 POJ题目链接:http://poj.org/problem?id2559 luogu评测记录:https://www.luogu.org/recordnew/lists?uid52918&pidSP1805 大意 有n个高度不同,宽度为1的长方形排列在一起。找到一个长方形使其面积最大 解题思路 我们先考虑单调递增的情况 …

Orleans解决并发之痛(一):单线程

程序在运行过程中有时会莫名其妙出现代码的某些约束或者执行结果和理想状况不一样,正常逻辑怎么会出现这样的情况?到底发生了什么?好像见了鬼!瞬间好无助。 谁来救救我 大多数出现正常逻辑很难解释的时候,我们可能会想…

你们考试,我们都有点紧张呢…

“大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂。”考试计划都好久好久了,一直没有时间,终于在今天考了一次。去监考的时候王老师还说,我都有点紧张呢,我说我也是,哈哈哈~上午几…

汇编语言(三十一)之数字字符串加密与解密

输入一串数字,然后进行加密解密输出 程序运行: 代码: datas segmentline_max_len db 0ffh line db 0, 100h dup(?)linesecret db 0, 100h dup(?)linedesecret db 0, 100h dup(?)secret …

ASP.NET Core 运行原理解剖[1]:Hosting

SP.NET Core 是新一代的 ASP.NET,第一次出现时代号为 ASP.NET vNext,后来命名为ASP.NET 5,随着它的完善与成熟,最终命名为 ASP.NET Core,表明它不是 ASP.NET 的升级,而是一个重新设计的Web开发框架。而它一…

公众号文章

大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂。 常用的几个sql整理 1.按照日期统计今天的客流信息。 SELECT * FROM base_disanfang WHERE DATE_FORMAT(create_time,%Y-%m-%d) DATE_FORMAT(NOW(),%Y-%m-%d) 其中base_disanfang为表名…

2017(深圳) .NET技术分享交流会 第二期,将有网络直播

2017 .NET技术分享交流会第一期已在5月13日成功举办,但是有同学反馈哪个地方有点偏,又过去了3个月,这期间一直没找到合适的地方举办活动,一直在南山科技园寻找经济适合的场地,终于找到一个安静,风景好的深圳…

整理几个常用的sql和其他代码

“大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂。”常用的几个sql整理1.按照日期统计今天的客流信息。SELECT * FROM base_disanfang WHERE DATE_FORMAT(create_time,%Y-%m-%d) DATE_FORMAT(NOW(),%Y-%m-%d)其中base_disanfang为表名&…

汇编语言(三十三)之四进制转十进制

输入四进制的数,转为十进制输出 程序运行: 代码: datas segmentN_string_max_length db 0ffhN_string db 0, 100h dup(?)N dw 0,0 sum dd 0 input db inp…

Orleans解决并发之痛(二):Grain状态

Grains是Orleans应用程序的构建块,它们是彼此孤立的原子单位,分布的,持久的, 一个典型的Grain是有状态和行为的一个单实例,每个Grain实例的在单线程内执行,Grain之间共享数据通过消息传递,Grain…

汇编语言(三十四)之输出中文

输出中文 程序运行: 代码: daones segmentfull_name db 0,1,2,3,4,5 full_name_length dw $-full_name start_char db 0 change_char_count dw 6color db 1 x dw 40 y …