
android高级开发
xiangzhihong8
著有《React Native移动开发实战》、《Kotlin入门与实战》、《Weex跨平台开发与实战》、《React Native开发进阶》和《Flutter跨平台开发实战》和《Android应用架构实战》
展开
-
Android Https证书过期的解决方案
应该有很多小伙伴遇到这样一个问题,在线上已发布的app里,关于https的cer证书过期,从而导致app所有网络请求失效无法使用。这个时候有人就要说了,应急发布一个已更新最新cer证书的apk不就完事了么,其实没那么简单,iOS还好可以通过appstore提供的api查询到新版本,但android就不一样了,需要调用自己Server端提供的api接口查询到新版本,并获取apk下载路径,问题是https都不能访问了,如何请求到版本信息呢?原创 2022-12-22 17:20:01 · 120 阅读 · 1 评论 -
Android 自定义TextView实现文字和图片居中显示
默认情况下,如果TextView的宽度超过文字的宽度,文字居中显示时,想要在文字的左边或者右边添加一个图片时,左边或者右边的文字就会默认以左边和右边开始排列,效果如下。然后,再页面中引入我们自定义的TextView即可实现文字和图片的居中显示。原创 2022-10-31 09:43:27 · 638 阅读 · 0 评论 -
滴滴开源的APM方案Dokit接入
自定义组件需要实现 IKit 接口,该接口对应哆啦A梦功能面板中的组件。以代驾乘客端为例,实现环境切换组件如下。) {} }在初始化的时候注册自定义组件。DoKit . Builder(this) . productId("需要使用平台功能的话,需要到dokit.cn平台申请id") . customKits(mapKits) . build() }DoKit入口api/*** 主icon是否处于显示状态* 显示主icon} /*** 直接显示工具面板页面} /*** 直接隐藏工具面板。原创 2022-10-18 19:26:03 · 1186 阅读 · 0 评论 -
新版Android Studio Logcat解析
Standard View 就是默认的展示包含了所有的信息,时间,包名,类名,进程ID等;Compact View 模式主要展示的是日志值显示时间,日志级别,具体信息;Custom View用于自行配置。最近,将本地的AndroidStudio升级到了2021.3.1版本,发现LogCat日志面板大变样了。界面虽然好看了,但是使用却需要我们做一些改变:需要开发者使用正则过滤。比如,我们想要过滤过滤Debug日志,那么只需要输入。原创 2022-10-13 10:52:59 · 1010 阅读 · 0 评论 -
关于Android报找不到arm-linux-androideabi的错误
上面错误的意思是,在ABI的NDK工具链文件夹中没有找到带有前缀:arm-linux-androideabi的工具链,对于这个问题,解决的方法是给项目添加ndk配置即可。最后,我们给项目配置ndk版本即可。选中项目,然后【右键】->【Open Module Setttings】打开项目配置,然后配置ndk即可。首先,我们打开ndk的版本目录下缺失platforms文件夹及内容,Mac的路径为。如果ndk目录下版本不够全面,我们可以打开Android Studio进行下载。原创 2022-10-11 14:05:49 · 691 阅读 · 0 评论 -
Android集成GreenDao数据库
当然,除了这3种方式之外,你还可以将数据保存在手机的SD卡中,不过使用文件、Shared Preferences或数据库来保存数据会相对更简单一些,而且比起将数据保存在SD卡中会更加地安全。Shared Preferences通常用在轻量级的数据存储场景中,比如账号/密码的存储,而数据库则用在数据量比较大的场景中,比如聊天数据的存储。保存在内存中的数据是处于瞬时状态的,而保存在存储设备中的数据是处于持久状态的,持久化技术则提供了一种机制可以让数据在瞬时状态和持久状态之间进行转换。原创 2022-10-10 18:30:18 · 423 阅读 · 0 评论 -
关于Android老项目在Android Studio 4.0运行的报错
此句话的含义是,Android工程的版本是55,但实际使用的是52版本的jdk,解决方式是将工程的版本和本地安装的版本进行统一。在Android项目上右键,然后选择【Open Module Settings】->【SDK Location】,如下图。然后,选择Gradle Settings将Gradle JDK改为和本地安装的版本一致即可。原创 2022-09-29 14:56:11 · 3358 阅读 · 0 评论 -
高仿京东Android App,集成React-Native热更
本项目是一个学习类型的项目,主要是为了学习一些Android最新的思路和开发思想,工程按照模块化、组件化的开发思路进行开发,项目整体结构如下图。原创 2022-07-16 14:30:11 · 663 阅读 · 0 评论 -
Android模拟器报extra space is needed in addition to APK size的错误
在使用Android模拟器的时候,安装apk会出现内存不足的提示,提示日志如下:我们可以在模拟器上选择【Duplicate】打开模拟器高级设置,然后,点击【Show Advanced Settings】按钮打开高级设置,将模拟器的内存改大即可,如下图。接着,重新启动模拟器即可。...原创 2022-06-29 17:55:13 · 530 阅读 · 0 评论 -
Mac OS安装 apktool工具包
在之前,apktool工具包都是一个压缩包,下载后无需安装即可使用。下面我们看一下如何在Mac OS系统下如何安装 apktool工具包。首先,需要下载下面几个软件或工具:Apktool:http://ibotpeaches.github.io/Apktool/install/dex2jar: https://github.com/pxb1988/dex2jarJD-GUI: http://jd.benow.ca/首先,打开上面Apktool的官网。1,点击第一个,复制内容,保存成个文件,取名ap原创 2022-06-14 11:00:46 · 1411 阅读 · 0 评论 -
Mac运行Android模拟器报The emulator process for AVD XXX has terminated错误
最近升级Android Studio之后,运行Android模拟器,一直报错:The emulator process for AVD XXX has terminated。报错原因:Mac版本过低,新的模拟器emulator,需要在MacOS 11.1以上版本才能运行。解决的方法是,在Mac的terminal命令行里执行启动模拟器命令。我们可以找到模拟的文件,然后再找到启动模拟器命令。然后,找到emu-launch-params.txt文件,里面是启动模拟器命令,打开文件。//Users/ji原创 2022-05-10 09:29:05 · 2103 阅读 · 2 评论 -
Android网页打开指定App
首先,要给你要打开的应用中的activity设置过滤器,一般是启动的activity。<activity android:name=".JumpActivity" > <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" />原创 2022-05-07 11:49:13 · 600 阅读 · 0 评论 -
关于Gradle7.0及以上版本报Https的错误的解决方案
今天在升级Android项目的gradle时,遇到如下的一个错误:官方的解释是:Specifies whether it is acceptable to communicate with a repository over an insecure HTTP connection.For security purposes this intentionally requires a user to opt-in to using insecure protocols on case by case原创 2022-04-06 17:31:01 · 4193 阅读 · 0 评论 -
Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns解决方法
在运行Flutter应用程序时,调试控制台中打印了如下错误:Warning: Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01Warning: Mapping new ns http://schemas.android.com/repository/android/generic/0原创 2022-04-06 17:11:41 · 12961 阅读 · 0 评论 -
关于flutter打包无法上传的问题
在Android端,当minSdkVersion为24经flutter build apk打包出来的apk在大部分应用市场上都存在签名问题,无法正常上传apk。解决的方法是,使用Android Studio打开Android进行原生打包,即使用 【Build】->【Generate Signed Bundle/APK】->【选择APK】->【填写签名信息】->【Signature Versions只勾选V1】的方式进行签名。说明:如果要支持Android 7.0以下版本,尽量同原创 2022-03-17 09:48:39 · 219 阅读 · 0 评论 -
Android SecurityException: getDataNetworkTypeForSubscriber问题修复
前不久,在开发Android视频播放器的时候,使用手机的4G播放时出现了getDataNetworkTypeForSubscriber错误,详细的报错信息如下:Process: com.avatar.buyer.client, PID: 27217 java.lang.SecurityException: getDataNetworkTypeForSubscriber at android.os.Parcel.createExceptionOrNull(Parcel.java:24原创 2022-03-15 15:37:43 · 4775 阅读 · 1 评论 -
还在用shape、selector,试试自定义圆角组件吧
111原创 2021-12-18 23:09:39 · 1777 阅读 · 1 评论 -
Android NDK开发入门
JNI 简介JNI (Java Native Interface英文缩写),译为Java本地接口。是Java众多开发技术中的一门技术,意在利用本地代码,为Java程序提供更高效、更灵活的拓展。尽管Java一贯以其良好的跨平台性而著称,但真正的跨平台非C/C++莫属,因为当前世上90%的系统都是基于C/C++编写的。同时,Java的跨平台是以牺牲效率换来对多种平台的兼容性,因而JNI就是这种跨平台的主流实现方式之一。总之,JNI是一门技术,是Java 与C/C++ 沟通的一门技术。首先,来回顾下Andro原创 2020-10-23 20:11:37 · 543 阅读 · 0 评论 -
Android 11 正式版发布
昨天,谷歌宣布推出Android 11正式版,主要加强了聊天气泡、安全隐私、电源菜单,以及对瀑布屏、折叠屏、双屏的支持。Pixel、一加、小米、OPPO、realme手机用户将在未来几天收到更新推送,其他手机用户将在未来几个月内收到更新推送。开发者可以通过Android 开源项目 (AOSP)来下载最新的源代码。对比最近两年发布的几个版本可以发现,安卓系统其实变化不是很大,底层改变也不是很多,更新的内容主要是围绕着消息、 隐私和如何更好地控制所有的智能设备来开发的。下面让我们来具体看一下Android 1原创 2020-09-10 19:48:54 · 1720 阅读 · 0 评论 -
一文了解Android游戏SDK开发
去年从平安离职之后,加入了B站,负责游戏SDK相关的业务开发和维护工作,经过半年来的摸索,对于游戏SDK的开发有了一定的理解,下面就对游戏SDK开发涉及到的知识点进行简单的梳理。SDKSDK(Software Development Kit)是软件开发工具包的缩写,一般来说,SDK是用于给开发人员提供进行应用程序开发的工具的,这样程序员就可以快速的开发出应用软件,省去了编写硬件代码和基础代码框架的过程,我们常见的Android SDK就属于这一类。除了这种比较大的SDK,我们平时开发的library也属原创 2020-07-01 23:44:35 · 2846 阅读 · 1 评论 -
微信支付跨平台软件架构
背景作为一个重要业务,微信支付在客户端上面临着各种问题。其中最核心问题就是分平台实现导致的问题,常见的问题有:iOS 和安卓实现不一致:容易出 Bug和通过沟通保证不了质量;扩展性差,无法快速响应业务需求:需求变更迭代周期长和数据上报不全面;质量保障体系不完善:缺少业务及设计知识沉淀、协议管理松散和缺少统一的自动化测试;用户体验不一致:比如下图就是之前安卓和 iOS 没有统一前的收银台...原创 2020-03-21 16:27:02 · 743 阅读 · 0 评论 -
2017-2020历年字节跳动Android面试真题解析
本文内容网上转摘,原文地址:2017-2020历年字节跳动Android面试真题解析(累计下载1082万次,持续更新中)今年虽然受疫情影响,大部分同行都放慢和减缓了跳槽的计划和节奏,可仍有很多年前已经辞职的朋友,这部分朋友需要面临岗位减少、空前的竞争压力和心理压力的影响。但是字节跳动2020春招依然火热,于是总结了字节跳动最新、最全的Android岗位面试题。疫情期间正好有时间,我们就收集整理...原创 2020-03-10 16:50:55 · 3675 阅读 · 1 评论 -
如何做一名有高度的移动开发工程师
专栏更新至今,不知不觉第二模块“高效开发”也已经更新完了。稳定性、内存、卡顿、I/O、网络,“高质量开发”模块打通了从应用层、Android 系统层、Linux 内核层再到硬件层的优化路径,帮助我们打通“任督二脉”,成为一名 Android 开发高手。所谓“高效开发”,可以给我们带来了什么呢?移动互联网发展到今天,所有人都说“提质增效”,但是团队效能不是靠我们封装一个工具类或者组件,给其他人低成本...原创 2019-11-20 12:20:51 · 974 阅读 · 6 评论 -
Android Native Hook
Hook 直译过来就是“钩子”的意思,是指截获进程对某个 API 函数的调用,使得 API 的执行流程转向我们实现的代码片段,从而实现我们所需要得功能,这里的功能可以是监控、修复系统漏洞,也可以是劫持或者其他恶意行为。相信许多新手第一次接触 Hook 时会觉得这项技术十分神秘,只能被少数高手、黑客所掌握,那 Hook 是不是真的难以掌握?希望今天的文章可以打消你的顾虑。Native Hook ...原创 2019-11-17 21:17:19 · 1009 阅读 · 0 评论 -
关于Android编译,你需要了解什么
本文来自张绍文老师的《Android开发高手课》,我把我认为比较好的文章整理分享给大家。作为一名 Android 工程师,我们每天都会经历无数次编译。对于小项目来说,半分钟或者1,2分钟即可编译完成,而对于大型项目来说,每次编译可能需要花去一杯咖啡的时间。可能我讲具体的数字你会更有体会,当时我在微信团队时,全量编译 Debug 包需要 5 分钟,而编译 Release 包更是要超过 15 分钟。...原创 2019-10-30 12:19:24 · 825 阅读 · 1 评论 -
googe眼镜开发
目前 Google Glass 上有两种开发 Glassware(应用,特指为 Glass 定制的应用)的方式:一是通过 Mirror API 从云端进行开发,另一种是使用 GDK 进行本地开发。"Mirror API or GDK?"Mirror API 是一套 RESTful 接口,通过 OAuth 2.0 授权协议让 Glassware 与用户资料建立关系。它的背后是一个神奇的机原创 2013-12-25 21:16:27 · 1514 阅读 · 0 评论 -
android调用服务端的js
最近在做一个项目过程中,发现了一个很严重的安全漏洞,这个漏洞是乌云平台(http://www.wooyun.org)报告出来的。1,使用场景我们很多时候要使用WebView来展示一个网页,现在很多应用为了做到服务端可控,很多结果页都是网页的,而不是本地实现,这样做有很多好处,比如界面的改变不需要重新发布新版本,直接在Server端修改就行了。用网页来展示界面,通常情况下都或多或少都原创 2014-01-09 23:57:52 · 1285 阅读 · 0 评论 -
viewgroup实现item拖动效果
网络上关于GridView可拖动的例子已经不少了,包括带动画不带动画的都有一堆,但几乎都是通过继承Android原生控件GridView来扩展的,当然这种实现方式是很容易联想到的,也是最容易实现的。我随便百度了一下,就有一个:http://zhangcb666.blog.163.com/blog/static/4696352920124221043837/,大家可以参考一下,我这里就不赘述了。转载 2013-12-27 09:18:16 · 1885 阅读 · 2 评论 -
android之surfaceview画图
在前文中,我们分析了应用程序窗口连接到WindowManagerService服务的过程。在这个过程中,WindowManagerService服务会为应用程序窗口创建过一个到SurfaceFlinger服务的连接。有了这个连接之后,WindowManagerService服务就可以为应用程序窗口创建绘图表面了,以便可以用来渲染窗口的UI。在本文中,我们就详细分析应用程序窗口的绘图表面的创建过程。转载 2013-12-27 18:37:05 · 1682 阅读 · 0 评论 -
aFinal框架
Afinal简介Afinal 是一个android的sqlite orm 和 ioc 框架。同时封装了android中的http框架,使其更加简单易用;使用finalBitmap,无需考虑bitmap在android中加载的时候oom的问题和快速滑动的时候图片加载位置错位等问题。Afinal的宗旨是简洁,快速。约定大于配置的方式。尽量一行代码完成所有事情。目前Afinal主转载 2014-01-20 09:02:01 · 1542 阅读 · 0 评论 -
客户端的web技术
Web 技术糅合了太多内容, 总的来说Server 和 Client 技术基本上不划分。 因此当PHP, J2EE, Pyth 纷扰这web世界的时候, 我们还能看到JQuary, Node.js, 还能看到Sql的阴魂不散. 很多人就开始深陷技术无法自拔。 这篇文章中。 您完全不用费神费力。 这一切都跟服务端技术没有多大关系。1. 服务端仅仅提供接口数据。 比如通过一个POST请求,服原创 2014-01-27 14:02:38 · 1201 阅读 · 0 评论 -
android使用LruCache对listview加载图片时候优化处理
注意:LruCache是有版本限制的,低版本的sdk需要在libs文件夹添加相应的support-4v文件。本文改造的大部分是参考http://www.iteye.com/topic/1118828,感谢。不废话直接上工程代码,内有关键注释,项目就不上传了,自己对照着上面网址改呗。首先是Application文件,负责创建图片存储文件夹:public class M原创 2014-02-08 20:34:47 · 1551 阅读 · 0 评论 -
仿网易新闻页面效果
不扯闲话了,直接进入正题吧frame_content.xml[html] view plaincopyxml version="1.0" encoding="utf-8"?> FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@翻译 2014-02-19 22:49:30 · 1433 阅读 · 0 评论 -
android之listview缓存图片(缓存优化)
网上关于这个方面的文章也不少,基本的思路是线程+缓存来解决。下面提出一些优化:1、采用线程池2、内存缓存+文件缓存3、内存缓存中网上很多是采用SoftReference来防止堆溢出,这儿严格限制只能使用最大JVM内存的1/44、对下载的图片进行按比例缩放,以减少内存的消耗具体的代码里面说明。先放上内存缓存类的代码MemoryCache.java:[java]原创 2014-02-19 22:40:55 · 1309 阅读 · 0 评论 -
andrpid优化之删除无用资源
如果你是一个经常开发android应用程序或者做android维护项目的人,我想说你对我谈论的这个话题,一定会感兴趣的。因为只有做到了这两点,你的项目生成的apk包才会更小,而不是随着你的开发和维护,无用的代码和资源无限的堆积,这对开发者和维护者来说不但是噩梦,更是一个无形的炸弹。好了,废话不多说,让我们一起来看看我是如何做到上面两点的吧。清除代码工具: UCDetector1.在转载 2014-05-16 14:52:29 · 1102 阅读 · 0 评论 -
activty栈管理
题外话:我们要在进行BlackBerry程序开发的时候,BlackBerry提供了一个管理Screen的栈,用来从任何地方来关闭位于最上一层的Screen,使用UiApplication.getUiApplication().getActiveScreen()来得到位于最上一层的Screen的实例,并且使用UiApplication.getUiApplication().popSc原创 2014-07-03 14:27:23 · 1187 阅读 · 0 评论 -
android自定义view实现progressbar的效果
一键清理是很多Launcher都会带有的功能,其效果也比较美观。实现方式也许有很多中,其中常见的是使用图片drawable来完成的,具体可以参考这篇文章:模仿实现360桌面水晶球式的一键清理特效。本文另辟蹊径,使用自定义View来完成同样的效果,性能、效率更高。 ProgressWheel相信很多人并不陌生,我参考了其中一些代码。有意思的是,看完它的代码,发现其中隐藏了没有使用的矩形进度条,原创 2014-08-10 22:53:38 · 1412 阅读 · 0 评论 -
即时通讯软件openfire+spark+smack
所以我基本上分为三篇文章来介绍此类软件的开发:第一篇是关于XMPP 协议是啥,IM 是啥以及一个比较有名的开源实现,该开源实现包括三个部分(Spark、Smack和Openfire);第二篇讲如何开发基于Spark 的客户端IM 插件部分;第三篇讲如何开发基于Openfire 服务器端的插件部分。好了,进入正题吧。 什么是XMPP?Extensible Messagin转载 2014-08-13 13:57:14 · 1484 阅读 · 0 评论 -
mqtt推送介绍
方案1、使用GCM服务(Google Cloud Messaging)简介:Google推出的云消息服务,即第二代的C2DM。优点:Google提供的服务、原生、简单,无需实现和部署服务端。缺点:Android版本限制(必须大于2.2版本),该服务在国内不够稳定、需要用户绑定Google帐号,受限于Google。方案2、使用XMPP协议(Openfire + Spark + S转载 2014-11-12 18:05:44 · 2704 阅读 · 0 评论 -
android view事件分发机制
首先我们先写个简单的例子来测试View的事件转发的流程~1、案例为了更好的研究View的事件转发,我们自定以一个MyButton继承Button,然后把跟事件传播有关的方法进行复写,然后添加上日志~MyButton[java] view plaincopypackage com.example.zhy_event03; import android.c原创 2014-10-14 19:18:29 · 1084 阅读 · 0 评论