首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

一般,在小型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生成和使用。...等待生成完成,就好了. 至此,我们就完成了整个APP的打包 精简压缩和发布流程. 写在最后 本篇只是讲解了APP的打包流程,作为一个发布的应用,当然不是这么简单就完事了.

2.9K80
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C#移动跨平台开发(2)Xamarin移动跨平台解决方案是如何工作的?

    概述   一篇 C#移动跨平台开发(1)环境准备发布之后不久,无独有偶,微软宣布了开放.NET框架源代码并且会为Windows、Mac和Linux开发一个核心运行时(Core CLR),这也是开源的!...与此同时VS2015预览版更是直接集成了Android模拟器,但是其实里面并没有说集成IOS模拟器,我不知道大家是怎么得出可以直接用VS来开发Android和IOS应用的。不管怎么说,这都是个好消息。...Xamarin.Android Framework中有很多就是MCW,关于MCW的创建以及C#与Java集成开发的东西我们后面再细讲,包括一个C#开发的Android应用程序是如何启动的,我们后面再细讲...Xamarin.IOS 架构   对于开发者来说,Xamarin.IOS相对于Xamarin.Android就要简单很多了,我们用C#开发的ios应用程序在被编译成IL代码之后,然后转交给Apple complier...直接编译成IPhonee的本地机器码。

    2.6K110

    1. 什么是Xamarin

    利用 Xamarin 我们可以管理不同平台 APP 的共享代码与基础平台代码的通信,并且 Xamarin 开发的 APP 是在托管环境中运行的,也就是说它会帮助我们来管理内存分配、垃圾回收等事情。...零、原理 Xamarin 可以在每个平台上创建本机 UI ,并在 C# 里编写跨平台的共享业务逻辑。...互操作性: Xamarin 可以直接调用 Object-C 、 Java 、 C 以及 C++ 所开发的库,并且可以使用声明性语法绑定本机的 Object-C 以及 Java 库。...2.Xamarin.Android Xamarin.Android 将 C# 编译为 IL ,启动应用程序时实时编译为本机程序集。...Xamarin.Android 开发的应用程序是运行在 Mono 环境中的,Mono 环境与 Android 运行时虚拟机并行运行。

    4.4K10

    客户端软件GUI开发技术漫谈:原生与跨平台解决方案分析

    现在大多数程序员都是基于C#、Java进行开发,如果不是Apple死忠,根部不会花大力气研究 跨平台软件应用开发 直接元素开发肯定是最好的——这样的性能肯定最有保证,但是跨平台的主要优势在于代码逻辑的复用...Xamarin.iOS是直接编译成ARM的二进制代码,因此执行效率肯定是非常高的。...Xamarin.Android编译成中间语言,Xamarin在APK安装包中会包含一个mono(跨平台的.NET运行环境),代码是在mono运行时和安卓本地的运行时完成工作的。...Xamarin 允许在每个平台上创建本机 UI,并在 C# 中编写跨平台共享的业务逻辑。 在大多数情况下,80% 的应用程序代码可使用 Xamarin 进行共享。...QT另外有一个优势在于,它在UI似乎要比之前几位要方便一些,在它的QML中甚至可以直接使用JavaScript(当然,Java也内置了JS引擎),同时QT中也包含了大量的标准CSS样式表可以使用 如果希望自己从事真正意义

    14.5K30

    国内 Mono 相关文章汇总

    什么是MONO 什么是MONO再议 “另类”的.NET——Mono 1.2发布 .NET和JAVA的跨平台,我们很期望.但是容易吗 Mono 开发 (使用.NET技术的你,绝对不能忽略Mono) 2007...2.8是一个重要的版本更新,有着显著的改善,Mono 2.8包括C#4.0的支持(也是现在的默认配置),新一代的垃圾回收器,新的框架,LLVM的支持,目前认为是稳定的,2.0版本的embedding...VS2012+EF6+Mysql配置心路历程 asp.net中ashx生成验证码代码放在Linux(centos)主机上访问时无法显示问题 在Linux运行ASP.NET vNext Xamarin...回忆录 Xamarin.Android快速入门 MONO x64 amd_x64 Xamarin.Android多界面 Xamarin.Android活动的生命周期 Xamarin.Android下获取与解析...JSON APP并非一个人在战斗,还有API—Xamarin.Android回忆录 Xamarin.Android通知详解 Xamarin.Android广播接收器与绑定服务 Xamarin.Android

    11.2K60

    笔记 | Xamarin

    下面向 window 中注入了 jsBridge.invokeAction 和 invokeCSharpAction,后者是前者的封装,实际你也可以直接使用 jsBridge.invokeAction...arg1=111&arg2=222"; } 缺点: 不能拿到 C# 的返回值, 若 js 想拿到方法的返回值,只能通过 WebView 的 loadUrl 方法去执行 js 方法把返回值传递回去,相关的代码如下...应用,Xamarin.Android 提供的默认 ProGuard 配置文件足以删除所有(仅)未使用的代码。...重要 请始终禁用已发布应用程序中的调试状态,因为如果不禁用此状态,则可能(通过 JDWP)获得 Java 进程的完全访问权限并在应用程序的上下文中执行任意代码。...将 android:debuggable 属性设置为 false 视为一种很好的做法。

    23.9K20

    张高兴的 Xamarin.Forms 开发笔记:Android 快捷方式 Shortcut 应用

    Shortcut 是受启动器限制的,也就是说国内大厂的定制系统大多数是不支持的,那些所谓的可以 pin 在桌面上的应用功能的快捷启动图标本质就是 Shortcut 。 ?...查阅 Xamarin.Android 的相关文档发现,这个 Type 是必须继承 Activity 类的。...三、代码实现 下面新建一个空的 Cross-Platform 项目 ShortcutDemo ,使用 Shared Project 共享代码。...修改 Xamarin.Android 添加两个活动,ShortcutContainerActivity.cs 与 FormsActivity.cs 。...其中 SetClass 将跳板活动 ShortcutContainerActivity 传入;SetAction 是必须设置的,要不然报错都不知道怎么回事;PutExtra 用于向下一个活动传递参数,我们这里传入的名称用于在跳板活动里设置

    1.6K70

    规避 Go 中的常见并发 bug

    在Understanding Real-World Concurrency Bugs in Go这篇论文中,几名研究人员分析了常见的Go并发bug,并在最流行的几个Go开源项目中进行了验证。...,一种是消息传递(比如等待chan)。...匿名函数 虽然论文中将这一类错误归结为匿名函数的不正确使用,但实际产生这类bug的原因是工程师忽略了实际在跨goroutine共享的变量。...特殊库的误用 诸如context这样设计会在多个goroutine间传递数据的库,在使用时也需要特别注意,可能会导致数据竞争。...在我看来,go的消息传递机制相比于传统的共享内存机制,相当于多了一层逻辑层面的封装,这种特性有时会让传统的多线程编程经验不能直接发挥价值,但是只要把握住底层的机制,可以很快积累基于go的语言特性的并发编程经验

    59040

    张高兴的 Xamarin.Forms 开发笔记:Android 快捷方式 Shortcut 应用

    Shortcut 是受启动器限制的,也就是说国内大厂的定制系统大多数是不支持的,那些所谓的可以 pin 在桌面上的应用功能的快捷启动图标本质就是 Shortcut 。 ?...查阅 Xamarin.Android 的相关文档发现,这个 Type 是必须继承 Activity 类的。...三、代码实现 下面新建一个空的 Cross-Platform 项目 ShortcutDemo ,使用 Shared Project 共享代码。...修改 Xamarin.Android 添加两个活动,ShortcutContainerActivity.cs 与 FormsActivity.cs 。...其中 SetClass 将跳板活动 ShortcutContainerActivity 传入;SetAction 是必须设置的,要不然报错都不知道怎么回事;PutExtra 用于向下一个活动传递参数,我们这里传入的名称用于在跳板活动里设置

    1.4K20

    Java线程池详解

    本文将对这些问题一一解答,同时还将给出使用线程池的常见场景和代码片段。...ThreadPoolExecutor构造方法 Executors中创建线程池的快捷方法,实际是调用了ThreadPoolExecutor的构造方法(定时任务使用的是ScheduledThreadPoolExecutor...executor); } 线程池给我们提供了几种常见的拒绝策略: 拒绝策略 拒绝行为 AbortPolicy 抛出RejectedExecutionException DiscardPolicy 什么也不做,直接忽略...如果不关心任务拒绝的事件,可以将拒绝策略设置成DiscardPolicy,这样多余的任务会悄悄的忽略。...Future.get()方法时获取,执行过程中的异常会被包装成ExecutionException,submit()方法本身不会传递结果和任务执行过程中的异常。

    39010

    21.2 Java 线程的协作

    wait 实际做了什么呢?它在等待什么?...之前我们说过,每个对象都有一把锁和等待队列,一个线程在进入 synchronized 代码块时,会尝试获取锁,如果获取不到则会把当前线程加入等待队列中,其实,除了用于锁的等待队列,每个对象还有另一个等待队列...线程中断 stop 方法看上去就可以停止线程,但这个方法标记为了过时,简单地说,我们不应该使用它,可以忽略它。...抛出异常是为了线程从阻塞状态醒过来,并在结束线程前让程序员有足够的时间来处理中断请求 boolean isInterrupted()方法:检测当前线程是否中断,如果是返回 true,否则返回 false...与 isInterrupted 不同的是,该方法如果发现当前线程中断,则会清除中断标志,并且该方法是 static 静态方法,可以通过 Thread 类直接调用。

    22210

    如何在容器中执行多条指令并能优雅退出

    监听处理,为其分配合适的node; kubelet(此组件安装在slave node)监听到pod绑定信息,在node实例化pod信息。...注意这里 子进程们是直接kill的,不存在优雅结束的机会。...bash进程会接收SIGTERM信号,但并不会传递信号给业务进程,直到等待超时时间后收到SIGKILL信号而退出。...在指定init后,将init代码嵌入容器中,并作为首启动进程,特点如下: 作为容器1号进程,并创建用户定义的业务进程 默认将信号传递给子进程,也支持更多传递方式 监听子进程退出并回收 跟随最初创建的业务进程的退出而退出...),bash处于交互模式忽略信号不作为, 业务容器接受SIGTERM信号,处理后退出,bash紧随业务进程退出。

    4.3K31

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

    它为iOS,Android,Windows或Windows Phone的原生UI呈现给用户的界面提供了自己的抽象。 这意味着你的应用程序可以共享大部分用户界面代码....例如(但不限于)iOS的CoreMotion,PassKit和StoreKit; NFC和Android的Google Play服务; 在Xamarin.Forms中创建UI界面有两种技术。...我们直接新建项.如图选择: 点击添加,会添加4个文件,如图: 我们一个个来讲解....地址如下: C#开发移动应用系列(4.调用系统应用,以及第三方应用(调用与调用)) 说一下为什么先写Xamarin.Android,因为你要开发移动APP,对于一些移动开发概念的了解是必须的,并不是说...本系列源码地址:https://github.com/l2999019/DemoApp 不出意外..以后的内容,都会直接更新在这个项目里

    5.3K61

    APP自动化测试系列之Desired Capabilities详解

    在iOS,使用instruments -s devices命令获取。 在Android,这个功能目前忽略,尽管它仍然是必需的。...如果测应用是另一个应用创建的,当这个参数设定为true时,允许另一个应用的进程在使用 adb 启动测应用时继续存活。...忽略的元素将不能够找到,因此这个关键字同时也实现成可以随时改变的 *设置 ( settings ) * 。...默认为/data/local/tmp例如:/sdcard/screenshots/autoGrantPermissions让Appium自动确定您的应用程序需要哪些权限,并在安装时将其授予应用程序。...默认值10例如:5waitForAppScript用于判断 "应用是否启动” 的 iOS 自动化脚本代码。默认情况下系统等待直到页面内容非空。结果必须是布尔类型。

    3.7K20

    Appium移动测试入门指南(二) - Capability 配置

    在 Andorid 虽然这个参数目前已被忽略,但仍然需要添加上该参数 app 本地绝对路径或远程 http URL 所指向的一个安装包(.ipa,.apk,或 .zip 文件)。...例如 chrome_devtools_remote avd 启动 avd 的名字 例如 api19 avdLaunchTimeout 用于等待 avd 启动并连接 ADB 的超时时间(以毫秒为单位),...忽略的元素将不能够找到,因此这个关键字同时也实现成可以随时改变的 设置 ( settings )。...默认值为:10 例如 5 waitForAppScript 用于判断 "应用是否启动” 的 iOS 自动化脚本代码。默认情况下系统等待直到页面内容非空。结果必须是布尔类型。...例如 http://localhost:8100 useNewWDA 若设置为 true,则直接卸载设备现存的所有 WebDriverAgent 客户端。在某些情况,该做法可以提高稳定性。

    2.7K00

    Python中的多处理与多线程:新手简介

    但是它非常适合于I/O操作,比如web抓取,因为处理器处于空闲状态,等待数据。 线程化改变了游戏规则,因为许多与网络/数据 I/O相关的脚本将大部分时间花费在等待来自远程数据源。...有时候,下载可能没有链接(例如,如果您正在抓取不同的网站),处理器可以并行地从不同的数据源下载并在最后合并结果。 ?...线程包含在标准库中: import threading from queueimport Queue import time 您可以使用target作为可调用的对象,args将参数传递给函数,并开始启动线程...当另一个函数想要使用一个变量时,它必须等待,直到该变量解锁。 假设有两个函数都对一个变量进行了1次迭代。锁允许您确保一个函数可以访问变量、执行计算并在另一个函数访问相同的变量之前写回该变量。...t.daemon = True t.start() for job in range(10): q.put(job) 多线程并不总是完美的解决方案 我们发现许多教程都倾向于忽略使用他们刚教过你的工具的缺点

    30320

    JavaScript 编程精解 中文第三版 十一、异步编程

    为了定义这个数组,我们使用everywhere函数(它在每个鸟巢运行代码)向鸟巢的状态对象添加一个属性,这是我们将保存鸟巢局部状态的地方。 当一个鸟巢收到一个重复的闲话消息,它会忽略它。...代码实际做的事情是完全线性的 - 在开始下一个动作之前,它总是等待先前的动作完成。 在同步编程模型中,表达会更简单。 好消息是 JavaScript 允许你编写伪同步代码。...相反,它可以在有任何带有await的地方冻结,并在稍后恢复。 对于有意义的异步代码,这种标记通常比直接使用Promise更方便。...它在调用时会产生一个Promise,当它返回(完成)时解析,并在抛出异常时拒绝。...每个片段可能会启动一些操作,并调度代码在操作完成或失败时执行。 在这些片段之间,该程序处于空闲状态,等待下一个动作。 所以回调函数不会直接调度它们的代码调用。

    2.6K20
    领券