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

减少崩溃,提升体验 | 使用 Kotlin 打造优质应用

整体上看,Kotlin 安全特性帮助点评 Android 应用指针导致崩溃从日均 3 个降低至 0。...2017 年,中国电信营业厅应用团队就开始使用 Kotlin,现在他们新项目大约有 50% 代码都是 Kotlin 编写。团队成功指针异常出现概率 降低了 80% 之多。...在使是否可为 null 成为类型系统一部分后,您不必再依赖内存和对代码库了解,也不必依赖编译警告 (如果用 @Nullable 注解字段/参数)。...由于是否可为 null 被强制执行,您将得到编译时错误,而不仅仅是警告。官方文档 介绍了处理是否可为 null 方式。 避免常见问题 开发者会无意中引入一些问题,有些问题可能非常微妙且难以察觉。...立即使用 Kotlin,降低崩溃率,提高用户满意度,保持较高应用评分让您用户留存和获取始终处于领先地位。

1.4K10

(译)Dart2.12版本发布,可靠安全,dart:ffi正式投入生产

2.可靠安全 自Dart 2.0引入可靠安全类型系统以来,安全是Dart语言最大补充。安全性进一步增强了类型系统,使您能够捕获错误,这是应用程序崩溃常见原因。...3.默认情况下可为:是对类型系统基本改变 安全之前核心挑战是,您无法分辨预期传递代码与不能使用代码之间区别。...image 目前,使用dart create和flutter create启用可靠安全创建新程序包和应用程序。当我们看到大多数生态系统已经迁移时,我们希望在将来稳定版本中对此进行更改。...当Dart分析您代码确定某个变量不可为时,该变量始终为不可为。Dart与Swift共享可靠安全性,但其他编程语言却很少。...11.API变更 为了声明FFI稳定支持上述功能,我们进行了一些较小API更改。 现在禁止创建结构(打破更改#44622),产生弃用警告。您可以使用类型Opaque来表示结构。

2.6K20
您找到你想要的搜索结果了吗?
是的
没有找到

Android 13 适配指南

12L(API 级别 32)或更低版本为目标平台;当应用程序创建其第一个通知渠道时,系统显示权限对话框; 如果是现有应用更新,程序目标 API 级别为: 以 Android 13 (33)为目标平台...; 发送给你应用中其他组件 intent; 由系统发送 intent; 由具有根级特权用户发送 intent; 更安全地导出上下文注册接收器 为了帮助提高运行时接收器安全性,Android...❝如果你想立即撤消权限,可以调用 exit()。但是进行 exit() 调用可能会导致当前正在访问 App 其他应用出现崩溃。...前台服务 (FGS) 任务管理器 Android 13 新前台服务( Foreground Services:FGS)任务管理器显示当前运行前台服务应用程序列表,此列表称为活动应用程序,可以通过下拉通知抽屉点击启示来访问...总结 TargetSDK 33 才会需要处理变动: 相册权限 附近WIFI设备权限 在后台使用身体传感器需要新权限 intent 过滤器会屏蔽匹配 intent 更安全地导出上下文注册接收器

4.8K31

Allsafe:包含安全漏洞Android研究平台

关于Allsafe Allsafe是一款包含大量安全漏洞Android应用程序,跟其他包含漏洞Android应用不同,Allsafe设计更像是那些使用了大量现代库和新型技术真实应用程序,而且Allsafe...4、任意代码执行 使用第三方应用安全地加载模块,并不是一件容易事。你需要编写一个PoC应用,并成功利用该漏洞。...相关资源: 证书和公钥绑定 Coinbase漏洞 7、不安全广播接收器 应用程序中有一个存在漏洞广播接收器,你需要使用正确数据来触发它。...相关资源: 内容提供器中SQL注入漏洞 10、存在漏洞WebView 你还可以在无需对应用程序进行反编译情况下完成这个任务,弹出一个警告对话框实现文件读取即可。...相关资源: Uber APK签名器 12、原生库 应用程序使用了一个原生库来验证用户输入密码,你需要对代码库进行逆向分析,找到密码,然后使用Frida来挂钩原生方法。

83830

Android Studio 3.2新功能特性

如果您想立即开始使用AndroidX库,并且不需要转换现有的第三方库,则可以android.useAndroidX标志设置 为true,并将 android.enableJetifier标志设置为false...Android应用程序Android App Bundle是一种新上传格式,其中包含应用程序所有已编译代码和资源,但会延迟APK生成登录到Google Play商店。...能源分析器 Energy Profiler显示应用程序估计能源使用情况可视化。...在记录使用此API触发CPU活动时,CPU分析器调试API显示 为选定CPU记录配置。...这意味着,如果您有使用V1编译库依赖项,则可以将它们与使用Data Binding V2项目一起使用。但是请注意,使用V1项目无法使用通过V2编译依赖项。

5.4K10

谷歌 Flutter 1.17 发布

应用程序准备发布时,开发人员决定用户是否通过从API下载字体来接收字体,或者它与应用程序包预先捆绑在一起。...,“网络”选项卡显示Flutter应用程序网络流量。...此选项应用程序捆绑到实际上未在您设备上安装通用Android“包装器”中,这与正常启动选项不同。此外,在某些情况下它不起作用,例如,当您使用访问后台执行插件时。...在此版本中,- androidx标志到flutter create现在是唯一可用选项。尽管不使用AndroidX现有应用程序可以继续使用Flutter进行编译,但现在是迁移到新库好时机。...(Android) #49771 未为画笔设置断言缓存提示 #50318 实时图像缓存 #50354 使用支杆盒高度计算选择矩形,以确保它们保持在可见范围内 #50733在gen_l10n中生成消息查找

3.5K10

C#8.0 新增功能

07 可为引用类型可为注释上下文中,引用类型任何变量都被视为不可为引用类型 。 若要指示一个变量可能为 null,必须在类型名称后面附加 ?,以将该变量声明为可为引用类型 。...对于不可为引用类型编译使用流分析来确保在声明时本地变量初始化为非 Null 值。 字段必须在构造过程中初始化。...如果没有通过调用任何可用构造函数或通过初始化表达式来设置变量,编译生成警告。 此外,不能向不可为引用类型分配一个可以为 Null 值。...不过,编译使用流分析来确保可为引用类型任何变量在被访问或分配给不可为引用类型之前,都会对其 Null 性进行检查。 可以在可为引用类型概述中了解该功能更多信息。...可以在此可为引用类型教程中应用程序中自行尝试。 在迁移应用程序使用可为引用类型教程中了解迁移现有代码库以使用可为引用类型步骤。

84630

Android 11 及更高版本系统中处理可空性

本文将带您了解 Android 11 SDK 引入了哪些变更,以便在 API 中显示更多可空性信息。此外,我们还将介绍一些实用方法与技巧,帮助您做好准备,顺利应对 Kotlin 中可空性问题。...@NonNull 注释则恰好与之相反,如果一个方法标有 @NonNull 注释,Kotlin 编译器会将该方法返回结果视为非类型禁止您在之后代码中把该结果设置为 null。...下一步 如果您正在使用 Kotlin 编写代码,当您从 Android 10 升级至 Android 11 SDK 后,您可能会遇到一些新编译警告,另外,之前警告也可能会以错误形式出现。...这是我们特意引入变更,也是 Kotlin 编译特性之一。这些警告会提醒您当前代码可能会导致应用崩溃 (如果您编写不是 Kotlin 代码,您可能会完全忽略这个风险)。...您可以通过在代码中添加值检查来解决这些警告或报错。

1.4K10

配置Android项目 - 一些重要事情

为了快速生成和下载gitignore文件,我建议您使用gitignore.io网站。只需输入必要关键字,如 — Android,Intellij点击生成按钮。 ?...当从IDE运行或调试项目时,Android Studio会使用Android SDK工具生成调试证书自动为您APK签名。...proguard Android proguard用来做三件事: 压缩未使用代码 — 帮助你超出64k限制 优化代码和apk 混淆代码 — 使你APK难以做逆向工程 问题是混淆和代码优化显着增加了编译时间...strict mode Android StrictMode可帮助您检测不同类型问题: 可关闭对象没关闭 在主线程中读写文件或者访问网络 uri 暴露 … 每当检测到这样问题,它可以显示适当日志或应用程序崩溃...我建议你只在调试时候打开它并且使用detectAll方法来检测所有类型问题。 ? 这里是当你忘记关闭SQLiteCursor日志例子: ? 在模板代码中查看StrictMode。

64920

Flutter 1.17版本重磅发布

现在,当按钮长度比没有溢出时可以显示时间长时,文本选择菜单可提高Android和iOS保真度。这在菜单项单词可能更长语言环境中尤其明显。...”按钮后,“网络”选项卡显示Flutter应用程序网络流量。...此选项应用程序捆绑到实际上并未在您设备上安装通用Android“包装器”中,这与我们正常启动选项不同。此外,在某些情况下,例如, 当您使用访问后台执行插件时。...在此版本中,-flux创建--androidx标志现在是唯一可用选项。虽然可以继续使用Flutter编译使用AndroidX现有应用程序,但现在是迁移到新库绝佳时机。...开发通道目标是在我们将它们广泛发布之前,从Flutter开发人员那里收集有关IDE集成新功能反馈。如果您喜欢冒险,希望向Flutter工具团队提供早期反馈,请立即注册!

2.5K10

Android基础总结(4)——广播接收器

Android每个应用程序可以对自己感兴趣广播进行注册,这样该程序就只会接收自己所关心广播内容,这些广播可能来自于系统,也可能来自于其他应用程序。...Android提供了一整套完整API,允许应用程序自由地发送和接收广播。发送广播就是借助之前了解过Intent,接收广播则需要用到广播接收器(Broadcast Receiver)。....2、广播接收器使用方法   Android系统内置了很多系统级别的广播,我们可以在应用程序中通过监听这些广播来得到各种系统状态信息。...此外,还有一点非常重要是,android系统为了保证应用程序安全性做了规定,如果程序中需要访问系统关键性信息,必须在配置文件中声明权限才行,否则程序将会直接崩溃,比如像上面的查询网络状态就需要声明权限...使用本地广播:Android引入了一套本地广播机制,使用这个机制发出广播只能够在应用程序内部进行传递,并且广播接收器也只能接收来自本应用程序发出广播。

1K100

速读原著-Android应用开发入门教程(Android应用程序概念性描述)

第 5 章 Android应用程序内容 5.1 Android应用程序概念性描述 Android 应用程序包含了工程文件、代码和各种资源,主要由 Java 语言编写,每一个应用程序将被编译Android...每一个活动都被实现为一个独立类,并且从活动(Activity)基类中继承而来,活动类将会显示由视图(View)控件组成用户接口,对事件(Event)做出响应。...如果它们正确执行了 Activity 生命周期,系统可以在任意时刻杀死进程来回收内存,并提供给前面 3 种类型进程使用。...系统中通常有很多这样进程在运行,因此要将这些进程保存在 LRU 列表中,以确保当内存不足时用户最近看到进程最后一个被杀死。 (5)(Empty)进程 包含任何处于活动状态应用程序组件。...广播接收器生命周期 广播接收器有一个单一回调方法 onReceive(),当广播消息到达接收器时,Android 调用这个方法,传递给包含在这个消息中 Intent 对象。

97410

C# 8.0 如何在项目中开启可引用类型支持

disable 与 8.0 之前 C# 行为相同,即既不认为类型可为,也启用 null 相关警告。...可为警告上下文 用于告知编译器是否要启用 null 相关警告,以及警告级别。...警告视为错误 以上只是警告,如果你希望更严格地执行可引用建议,可以考虑使用编译错误: 1 2 3 4 5 6 7 8 9 10 11 <Project Sdk="Microsoft.NET.Sdk...当关闭<em>可为</em><em>空</em>注释上下文后,C# <em>编译</em>器会将所有<em>类型</em>引用变量识别为以下种类: 无视 于是,无论你<em>使用</em>什么方式顶一个一个引用<em>类型</em><em>的</em>变量,C# <em>编译</em>器都不会判定这到底是不是一个<em>可为</em><em>空</em>还是不<em>可为</em><em>空</em><em>的</em>引用<em>类型</em>。...#nullable enable: 在源代码中启用可<em>空</em>引用<em>类型</em><em>并</em>给出<em>警告</em>。 #nullable disable: 在源代码中禁用可<em>空</em>引用<em>类型</em><em>并</em>关闭<em>警告</em>。

25120

安卓应用安全指南 4.2.2 创建使用广播接收器 规则书

4.2.2.2 小心和安全地处理收到意图(必需) 虽然风险因广播接收器类型而异,但处理接收到意图数据时,首先应该验证意图安全性。...对于广播敏感信息,只有可靠广播接收器可以接收它,而其他广播接收器则不能。 以下是广播发送方法一些示例。 方法是,通过使用显式意图,广播仅仅发送给预期可靠广播接收器,来固定地址。...方法是,通过receiverPermission指定为内部定义签名权限,使可靠广播接收器声明使用此签名权限,来发送广播。...有序广播用于接收来自接收器返回信息,使几个接收器逐一执行处理。 广播按优先顺序发送给接收器。...4.2.2.8 小心安全地处理来自广播接收器返回结果数据(必需) 基本上,考虑到接收结果可能是攻击数据,结果数据应该被安全地处理,尽管风险取决于返回结果数据广播接收器类型

80630

Kotlin 1.2 新特性

现在,使用Kotlin编写代码,可以在所有的应用程序中(包括后端,浏览器前端和Android移动应用程序)中重复使用。 ?...请注意,目前跨平台项目只是一个实验性功能,这意味着该功能已经可以使用,但可能需要在后续版本中更改设计 编译性能 在1.2开发过程中,团队花了很多精力来优化编译系统,据官方提供资料显示,与Kotlin...下图显示使用Kotlin构建两个大型JetBrains项目的编译时间差异。 ? 语法与库优化 除了上面介绍改动之外,Kotlin还在语法层面进行了部分改进,优化部分有。...内联扩展修复 在以前版本中,在平台类型值上调用内联扩展函数没有检查接收器是否为null,因此允许null转义到其他代码中。...除此之外,Kotlin编译器现在提供一个所有警告视为错误选项。

1.7K100

Kotlin 1.2 新增特性

:运行 Kotlin 1.2.0 版本 JVM 来自显式类型信息被用于类型推断 Kotlin 编译器现在可以使用类型转换信息进行类型推断。...这对 Android 开发者来说尤其重要,因为编译器现在可以在 Android API level 26 中正确分析范型 findViewById 调用: 改进 smart cast 当一个变量从一个安全调用表达式中被赋值并且被检查为...这可能会影响应用程序整体性能;仅在多个类之间共享一些复杂状态并在类初始化时更新时才使用它。 “手工”解决方法是控制流子表达式值存储在变量中,而不是直接在调用参数中对它们进行求值。...破坏性变更:通过内联扩展接收器修复平台 null 转义 在平台类型值上调用内联扩展函数并没有检查接收器是否为 null,因此允许 null 转义到其他代码中。...工具 警告视为错误 编译器现在提供了所有警告视为错误选项。在命令行中使用 -Werror,或使用以下 Gradle 代码:

2.8K70

《移动互联网技术》第八章 消息与服务:掌握不同类型广播监听方式,以及创建通知方法

2**、本单元学习要求** (1) 掌握不同类型广播监听方式,以及创建通知方法; (2) 掌握PendingIntent使用方法; (3) 理解异步处理和同步处理联系和区别。...使用有序广播,在某一个时刻只有一个接收器收到消息,它处理完消息以后,再把消息发送给下一个接收器。收听广播顺序由接收器优先级来确定。接收器可以截断消息,传递,这样后面的接收器就无法获得广播消息。....setContentText("Android应用界面中有哪两种类型视图组件?") ​...AsyncTask泛型参数指示异步任务中各种参数类型,这些参数包括:Params表示给后台任务传递参数;Progress是当前任务执行进度,可以在界面上显示;Result指示任务完成后返回结果...,当应用程序响应时间超过5秒时,系统就会弹出应用程序无响应警告信息对话框,造成程序崩溃,严重影响用户体验。

7110

【老孟Flutter】Flutter 2 新增功能

在FlutterWeb支持博客文章中找到有关此稳定版本更多详细信息。 Sound Null Safety 安全性是Dart语言重要补充,它通过区分可类型和非可类型进一步增强了类型系统。...这使开发人员能够防止null错误崩溃,这是应用程序崩溃常见原因。通过检查合并到类型系统中,可以在开发过程中捕获这些错误,从而防止生产崩溃。...如果您是软件包作者,请查看迁移指南考虑立即进行迁移。 Desktop 在此版本中,我们很高兴地宣布,Flutter桌面支持已在稳定频道中以早期版本标志提供。...另外,如果你是一个火力地堡用户,我们很高兴地宣布,最流行插件已被带到生产质量,包括安全支持,以及全套参考文档和常见使用教程使用Android,iOS,网页,和macOS。...Cupertino颜色分辨率API删除nullOk参数 69808从Scaffold.of和ScaffoldMessenger.of删除nullOk,为两者创建 68910从Router.of中删除nullOk参数,使其返回不可为

7.8K20

C# 可为引用类型

对于像我们这样长期使用 C# 编程的人来说,这很“正常”。不过,如果我们能够一切推到重来,还是希望引用类型默认不可为通过添加“?”显式允许为。...引用类型设为默认不可为所有引用类型都设为默认不可为,但实现这一点时,应使用可选择启用编译器开关,而不是突然对开发人员现有代码发出大量警告,让人应接不暇。...尽管可以引用类型声明为可为,或避免向不可为类型分配值,但稍后代码中也可能会出现新警告或错误。...最重要是,这意味着,现有 API(如 .NET API)能够使用可为元数据进行更新,而破坏 API。此外,这还意味着,不支持根据为空性修饰符进行重载。...遗憾是,在 C# 8.0 中改进引用类型处理有一个非常不幸后果。向来可为声明转换为不可为声明一开始会引入大量警告

14720
领券