jetpack

NullPointerException:appcompat.app.ActionBar.setTitle(java.lang.CharSequence)‘ on a null object refe

强颜欢笑 提交于 2020-11-09 11:25:13
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method ‘void androidx.appcompat.app.ActionBar.setTitle(java.lang.CharSequence)’ on a null object reference 今天在新建项目时候突发奇想新建了个默认的安卓自带 Fragment+tab的初始布局页面 这个是导航拉线可以控制的fragment ** 默认的架构是Viewmodel + liveData +navigation这一套组成,看得出来谷歌在尽量让我们开发者让Jetpack上面走:** java xml布局 navigation导航部分 这一切运行都没问题,可是在我改动了个标题状态栏的Theme时候,就开始出问题了:报错: Caused by: java.lang.NullPointerException: Attempt to invoke virtual method ‘void androidx.appcompat.app.ActionBar.setTitle(java.lang.CharSequence)’ on a null object reference 报错代码图: 结果找了很久才发现是我改动了标题栏导致的:

阿里P8大佬熬夜10天,把所有Android第三方库整理成了PDF

空扰寡人 提交于 2020-11-07 12:33:20
缘起 随着互联网企业的不断发展,产品项目中的模块越来越多,用户体验要求也越来越高,想实现小步快跑、快速迭代的目的越来越难,还有应用之间的互相调用等等问题,插件化技术应用而生。如果没有插件化技术,美团、淘宝这些集成了大量“app”的应用,可能会有几个g那么大。 所以,当今的Android移动开发,不会热修复、插件化、组件化,80%以上的面试都过不了。 阿里P8大佬每天熬夜到凌晨一两点,花了将近半个月时间将Android热修复框架、插件化框架、组件化框架、图片加载框架、网络访问框架、RxJava响应式编程框架、IOC依赖注入框架、最近架构组件Jetpack等等Android第三方开源框架整合成了一套系统知识笔记PDF,长达1042页!相信看完这份文档,你将会对这些Android第三方框架有着更深入、更系统的理解。 由于文档内容过多,为了避免影响到大家的阅读体验,在此只以截图展示部分内容,1042页详细完整版的【Android设计思想解读开源框架】文档领取方式: 点击我的GitHub 即可免费领取 第一章:热修复 1、AOT/JIT & dexopt 与dex2oat 2、热修复常见问题之CLASS_ISPREVERIFIED 问题 3、热修复原理 4、Tinker 的集成与使用(自动补丁包生成) image image 第二章:插件化 1、Class 文件与Dex 文件的结构解读 2

面试了一位33岁Android程序员,只会面向百度编程,居然要25k,脸呢?

旧巷老猫 提交于 2020-11-06 14:00:09
最近逛论坛看到这样一个帖子: 面试了一位工作12年的程序员, 这位老哥有3年java开发经验,2年H5,7年Android开发经验,简历上写着精通Java,Android,熟悉H5开发。没有具体的技术点。 说实话我很期待这位老哥的面试,于是让人事邀约了他。 老哥面试的气场很足,我也很尊敬他,一大波的自我介绍之后,我们进入了正题。 我问了他Jetpack,他说几乎没用过Jetpack,于是我给他举了个小例子,老哥给我的答案是百度可以解决。 于是我又问了他Groovy,老哥还是说不清楚,于是我问了最基础的Handler,Binder等几个关键词,依旧说不清楚,老哥依旧那么强势霸气,他给到我的感觉就是“啥都会做,你别问这些没用的”。 看着他简历上写着,精通安卓开发,熟悉跨平台开发,js交互,我问了一句了解Flutter吗?他说不知道没听过,最后问了一句期望薪资他说25k,我不知道问什么了,于是匆匆结束了面试。 看完这则帖子之后我思考良久,也不得其解。对于大龄程序员我们该何去何从,尤其是没有管理经验只会百度复制粘贴的程序员该如何谋生? 现在的技术环境不像以前了,以前是网上搜不出什么资料,没办法,自己得找到文档(很多是英文的),一个一个地看,一个一个地试,然后找到解决问题的方法。现在不一样了,现在是信息爆炸的时代,你遇到的问题别人早就遇到过,然后会在网上分享出来,所以不用担心找不到答案

在 CI 中使用 Benchmark 进行回归分析

被刻印的时光 ゝ 提交于 2020-11-05 10:46:36
我们在 I/O 2019 发布了 Benchmark 库的第一个 alpha 版。之后为了能帮助您在优化代码时可以准确地评估性能,我们就一直在改进 Benchmark 库。Jetpack Benchmark 是一个运行在 Android 设备上的标准 JUnit 插桩测试 (instrumentation tests),它使用 Benchmark 库提供的一套规则进行测量和报告: @get:Rule val benchmarkRule = BenchmarkRule() @UiThreadTest @Test fun simpleScroll() { benchmarkRule.measureRepeated { // Scroll RecyclerView by one item recyclerView.scrollBy(0, recyclerView.getLastChild().height) } } △ Github 上的 示例工程 △ Android Studio 输出、运行多个基准测试的示例 Benchmark 库通过它自己的 JUnit Rule API 处理预热、检测配置问题以及评估代码性能。 上面介绍的这些在我们自己的工作环境下用起来很不错,但是很多基准测试数据其实来自于持续集成 (Continuous Integration, CI) 中对于回归模型的检测

干货 | 携程Android 10适配踩坑指南

强颜欢笑 提交于 2020-10-28 11:47:39
作者简介 曙光,携程资深软件工程师,负责市场营销相关研发及管理工作。 2019 年 9 月 3 日,Google 发布了 Android 10 正式版。Android 10 聚焦移动创新、安全隐私和数字健康三大主题,全面打造最佳用户体验。 背景 目前携程旅行线上最新版本已适配到Android 10(API =29),由于从API=26升级到API=29,跨度较大,我们提前对相关适配进行了调研,希望其中一些经验能对其他开发者有一定的帮助。 在Android 10 版本中,官方的改动较大,相应的开发者适配成本还是很高的。基于前期调研,我们主要基于以下几方面进行Android 10的适配: Android X 分区存储 设备ID 明文HTTP限制 一、AndroidX AndroidX 对原始 Android Support库进行了重大改进,后者现在已不再维护。AndroidX 软件包完全取代了支持库,不仅提供同等的功能,而且提供了新的库。 1.1 什么是AndroidX Android系统在刚刚面世的时候,可能连它的设计者也没有想到它会如此成功。随着Android系统版本不断地迭代更新,每个版本中都会加入很多新的API进去,但是新增的API在老版系统中并不存在,因此这就出现了一个向下兼容的问题。 于是Android团队推出了一个鼎鼎大名的Android Support Library

【送书】Android进阶三部曲最终章

空扰寡人 提交于 2020-10-23 07:22:11
有段时间没做赠书活动了,正巧最近由刘皇叔编写的Android进阶三部曲最终章:《Android进阶指北》正式出版,作为小福利,今日抽取 5 本送给大家。 书籍全是签名版,《Android进阶解密》和《Android进阶指北》任选哟~ 1.Android进阶三部曲知识体系 Android进阶三部曲包括《Android进阶之光》、《Android进阶解密》、《Android进阶指北》。 Android进阶三部曲 知识体系分为三个部分,分别是Android应用开发、Android系统源码、Java和跨平台基础,现在以思维导图的形式对每个部分进行整理,也可以当做是对三本书内容的一个索引。 Android应用开发 这一部分的内容在三本书中均匀分布,毕竟Android进阶三部曲是写给应用开发的。这部分除了应用实践更注重每个知识点的原理。 Android系统源码 这一部分的内容主要集中在《Android进阶解密》《Android进阶指北》,内容都是应用开发需要掌握的。 Java和跨平台基础 这一部分的内容不算多,按严格意义来说这些内容并算是Android技术范畴内,但都是应用开发需要掌握的内容。 说到知识体系,那知识点之间必然是有着关联的,我们来看看Android进阶三部曲的关联章节。 2.Android进阶三部曲的关联章节 在《Android进阶解密》和《Android进阶指北

【Android】Jetpack全组件实战开发短视频应用App(十六)

给你一囗甜甜゛ 提交于 2020-10-04 13:39:07
前言 这一篇我们完成沙发页和启动页,以及沉浸式状态栏 实现沙发页 看下UI,主要就是两部分组成,上面是个 TabLayout ,下面是个 ViewPager 我们在做首页底部 Tab 的时候用的是 json 配置的,我们这个上面的 TabLayout 也用一个 json 来配置 { "activeSize" : 16 , "normalSize" : 14 , "activeColor" : "#ED7282" , "normalColor" : "#666666" , "select" : 0 , "tabGravity" : 0 , "tabs" : [ { "title" : "图片" , "index" : 0 , "tag" : "pics" , "enable" : true } , { "title" : "视频" , "index" : 1 , "tag" : "video" , "enable" : true } , { "title" : "文本" , "index" : 1 , "tag" : "text" , "enable" : true } ] } 简单解释下,分别是选中字体大小,正常字体大小,选中字体颜色,正常字体颜色,选中第几个,位置,标签,然后我们定义一个对应的 JavaBean public class SofaTab { /** *

【Android】Navigation 用法及源码解析

∥☆過路亽.° 提交于 2020-10-02 11:24:46
本文讲解 Navigation 用法,以及 Navigation 源码解析。 官方文档: https://developer.android.google.cn/guide/navigation 一句话介绍 Navigation :Navigation 是指支持用户导航、进入和退出应用中不同内容片段的交互。 Android Jetpack 的 Navigation 组件可帮助您实现导航,无论是简单的按钮点击,还是应用栏和抽屉式导航栏等更为复杂的模式,该组件均可应对。 注:本文使用 Kotlin 编写。 一、基本用法 使用 Navigation 在两个 Fragment 之间相互导航 1. 在 res 里新建一个导航图 nav_graph.xml <?xml version="1.0" encoding="utf-8"?> <navigation xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/nav_graph"> </navigation> 这个过程 Android Studio 会自动帮我们导入必要的库 implementation 'androidx.navigation

在Jetson nano上编译paddle(带TensorRT)并跑通Paddle-Inference-Demo

限于喜欢 提交于 2020-08-20 02:10:46
懒人区:想直接安装的可以点这个链接。 ---------------------------------分割线--------------- 缘由: 在官方的Paddle-Inference-Demo中,建议Paddle版本>=1.7。 而个人能找到的资源最高的版本是Nvidia论坛的1.6.3版本的paddlepaddle-gpu。以及文档中提供的0.0.0版本( 链接 )。 https://forums.developer.nvidia.com/t/paddlepadd-gpu-1-6-3-for-jetson-nano-now-available/111655 在跑Demo的过程中,发现 文档中给出的版本 没有Paddle-TensorRT的功能 ,虽然可以使用GPU加速。但是总感觉有TensorRT但却用不上很膈应。 另外,Nvidia论坛放出的版本虽然支持TensorRT,但是版本低于Paddle-Inference-Demo要求的1.7以上。在查阅 1.6 和 1.7 的文档后,发现API有很大的不同。 我根据1.6.3支持的API对yolov3的demo修改后,**发现推理的结果有很大出入。**参见我在Github提的 issue 。当然,在运行过程中也会报model和lib版本不一致的错误。* 推测是不同版本支持的算子可能不一样(或者实现)? * 而且

像写Flutter一样开发Android原生应用

泪湿孤枕 提交于 2020-08-17 07:49:16
要问到Flutter和Android原生App,在开发是有何区别,编程方式是绕不开的话题。Flutter采用声明式编程,Android原生开发则采用命令式编程。 声明式编程 VS. 命令式编程 我们首先要明确的,是何为声明式编程,何为命令式编程。 何为声明式编程 摘录一段来自百度百科的定义: 声明式编程通常被定义为除命令式以外的编程范式。同时存在一些其他的定义,这些定义不是简单的将声明式编程和命令式编程做对比,例如: 声明式编程是告诉计算机需要计算“什么”而不是“如何”去计算; 任何没有副作用的编程语言,或者更确切一点,任何引用透明的编程语言; 任何有严格计算逻辑的编程语言。 这些定义有一些是重合的。 简单地理解:声明式编程就是告诉“机器”你想要的是什么,让机器想出如何去做。 何为命令式编程 依旧先看它的定义(来自百度百科): 命令式编程(英语:Imperative programming),是一种描述计算机所需作出的行为的编程典范。几乎所有计算机的硬件工作都是命令式的;几乎所有计算机的硬件都是设计来运行机器码,使用命令式的风格来写的。 简单地理解:命令式编程就是需要我们命令“机器”如何去做事情(how),这样不管你想要的是什么(what),它都会按照你的命令实现。 举例说明 举个例子,看下面两种解决问题的方法: 方法一: 蔬菜.做成菜(蔬菜沙拉) 方法二: 洗干净(蔬菜) 混合