
Android日常经验
文章平均质量分 85
Android日常开发的经验和心得,记录日常开发过程中遇到的一些问题和知识点。
氦客
Stay hungry,Stay foolish
展开
-
HarmonyOS入门 : 获取网络数据,并渲染到界面上
入门HarmonyOS我们可以从一个实际的小例子入手,比如获取网络数据,并将其渲染到界面上。原创 2024-11-09 22:18:28 · 1355 阅读 · 0 评论 -
浅谈华为 HarmonyOS Next
介绍华为HarmonyOs Next 的一些概念原创 2024-10-19 07:06:15 · 1054 阅读 · 0 评论 -
Android 实现椭圆形中心发散渐变绘制
本文使用Android自定义View,实现一个中心放射渐变的椭圆形效果原创 2023-09-21 17:28:41 · 829 阅读 · 0 评论 -
Android 使用Camera1实现相机预览、拍照、录像
本文介绍在Android中,如何使用Camera1 API实现相机预览、拍照和录制视频,以及提供可以接入使用的Camera1工具类原创 2023-09-17 22:27:48 · 9157 阅读 · 10 评论 -
Android中加载一张大图,如何正常显示且不发生OOM ?
在Android中,获取一个1000Px * 20000Px 的大图,如何正常加载显示且不发生OOM呢 ?原创 2023-06-22 10:33:00 · 2383 阅读 · 0 评论 -
Android Studio 提高SDK下载速度
我们在下载Android SDK的时候,经常会出现下载失败的情况,报android sdk manager not installing components之类的错误。要如何加快SDK的下载速度呢 ?原创 2023-06-18 10:31:15 · 12284 阅读 · 4 评论 -
使用 OpenGL SL 来实现实时滤镜的效果
介绍OpenGL SL的概念及使用,可用于移动开发领域 (Android/IOS),实现实时滤镜的效果。原创 2023-05-03 21:18:32 · 1258 阅读 · 0 评论 -
Android 内置RTSP/RTMP服务器,实现局域网内视频推流与播放
工作中有一个需求,需要将Android平板端(车机)上的摄像头上的画面,实时传输到手机上进行播放。 对于这个需求,我们想到了用RTSP/RTMP进行推流,然后在手机端拉流进行播放。 这个技术方案的主要技术点有:1.平板端内置RTSP/RTMP服务器 2.平板端获取摄像头的画面并同步进行RTSP/RTMP推流 3.手机端支持对RTSP/RTMP视频流的播放原创 2023-04-26 16:57:01 · 7929 阅读 · 3 评论 -
Android有官方的GPS定位API,为什么还要使用百度/高德定位SDK ?
小组在一个Demo项目中,图省事准备使用官方的GPS定位API。但在我的印象中,官方的定位API是不好用的,一般都是用 高德地图/百度地图的定位SDK的。 使用官方的定位`API`获取定位的话,在办公室调试的时候,可能室内压根获取不到的。但是试了一下后让我感到惊讶,居然在室内都能定位到,这是怎么回事 ?原创 2023-04-17 16:00:04 · 4957 阅读 · 4 评论 -
Android 沾包处理,以串口接入为例 (usb-serial-for-android)
我们在通过串口、TCP、UDP等方式接收协议的时候,由于单次接收数据有限,导致一条命令可能被分割成多次进行接收。这种情况下,就需要进行沾包处理,使多次接收的数据,合并成一条数据。本文通过博主本人一个真实的工作案例,实例讲解Android串口的接入和对于沾包的处理。原创 2023-02-26 18:00:00 · 6172 阅读 · 16 评论 -
Android 双屏异显(Presentation) 开发,将第二个页面投屏到副屏上
最近开发的一个项目,有两个屏幕,需要将第二个页面投屏到副屏上,这就需要用到Android的双屏异显(Presentation)技术了,研究了一下,这里做下笔记。 我们那个副屏是一块汽车的后视镜(流媒体后视镜),是一块长条块的屏幕,分辨率是400 * 1920 px,如何将需要显示的内容正确摆放地显示到这块屏幕上,是我们开发中的一个重点。并且,我们是使用平板横屏进行开发的,对于横屏情况下双屏异显的处理,也是我们开发中的一个重点。原创 2023-01-29 17:59:36 · 12948 阅读 · 7 评论 -
Android 最全Ignore文件 : 解决部分不必要文件上传到Git的问题
我们新建一个Android项目,默认会生成一个`.ignore`文件。但是,我们如果平时使用的时候会发现,这个`.ignore`文件是不全的,还是会有部分不必要的文件被上传到`git`上。原创 2022-10-12 17:29:23 · 2671 阅读 · 1 评论 -
Android KTX | 官方 Kotlin-core 扩展库 方法大全
Android KTX是Android中的一组Kotlin扩展程序,可以为Android开发提供简洁方便的 Kotlin代码。KTX中的方法有很多,但平时都不知道哪些地方可以使用,这两天特意罗列了一下,在此记载。原创 2022-10-09 15:03:22 · 4035 阅读 · 0 评论 -
在Android中,简化冗长的监听/回调 写法
我们平时在注册Android回调的时候,通常只会用到其中的一两个方法,但却要为此实现所有的方法。本文的目标就是简化这种监听,只实现自己所需要的方法。原创 2022-10-02 08:28:54 · 1416 阅读 · 0 评论 -
看似普通的Android开发黑科技 - Kotlin 委托
我们在使用`Kotlin`开发的时候,经常会使用by来实现一些操作,使用by lazy来实现懒加载。虽然日常用的比较多,但却不明白其原理,by代表这什么 ? lazy又代表着什么呢 ?原创 2022-09-19 06:30:00 · 1196 阅读 · 0 评论 -
Android 阿里云OSS 上传文件,使公网可以直接访问
实现 Android App上传图片/视频到阿里云OSS上,并使该图片/视频能直接在外网访问原创 2022-09-16 15:01:45 · 6662 阅读 · 2 评论 -
Android 从零开发一个简易的相机App
Android调用相机可以使用Camera1、Camera2和CameraX,分别对这几种方案进行了介绍,并介绍了相机App的通知相册更新,跳转相册,左右滑动界面切换拍照/录像,相机切换时候的高斯模糊虚化效果,相机切换的3D效果的实现逻辑...............原创 2022-08-22 06:30:00 · 7030 阅读 · 3 评论 -
GoPro接入 - 根据GoPro官方文档/Demo,实现对GoPro的控制和预览
我们需要自己去接入GoPro,在自己的App上去控制GoPro。对此,我们对GoPro的接入进行了接入可行性调研。原创 2022-07-25 06:30:00 · 5192 阅读 · 5 评论 -
Android USBCamera投屏 - 利用UVC协议将手机上的画面有线投屏到Android车机的屏幕上
一个需求 : 要将手机上的画面和音频 投屏 到 车机的Android屏幕上。通过UVCCamera进行投屏,实现将手机上的画面通过视频线投屏到Android车机的屏幕原创 2022-07-18 06:30:00 · 9217 阅读 · 8 评论 -
Apifox : 不仅是Api调试工具,更是开发团队的协作神器
Apifox = Postman + Swagger + Mock + Jmeter 不仅仅是Api调试工具,更是开发团队的协作神器一套系统、一份数据,解决多个系统之间的数据同步问题。只要定义好接口文档,接口调试、数据Mock、接口测试即可直接使用,无需再次定义。接口文档和接口开发调试使用同一个工具,接口调试完成后即可保证和接口文档定义完全一致。后端、前端、测试团队可以同步开始工作,而不需要互相等待。...............原创 2022-06-27 06:30:00 · 755 阅读 · 0 评论 -
windows环境下,搭建RTSP视频推流服务器
windows环境下,搭建RTSP视频推流服务器原创 2022-06-17 09:06:00 · 24599 阅读 · 38 评论 -
解决Android App 每启动一个Activity就看上去多启动一个应用/进程的问题
出现一个很神奇的问题,集成了一个library依赖后,每启动一个`FLAG_ACTIVITY_NEW_TASK`标志位的Activity就会在任务管理器中多一个"应用"。 如果去除这个library依赖,则无论启动多少个带`FLAG_ACTIVITY_NEW_TASK`标志位的Activity,任务管理器中永远都只有这一个"应用"。...........................原创 2022-06-15 10:04:22 · 2799 阅读 · 4 评论 -
Android Gradle 生命周期 : 自动化打包失败所引出的Gradle生命周期问题
前段时间在搞Android自动化打包的事情。我们的library是需要提供给其他团队使用的,所以在使用Jenkins自动化打包过程中,需要将library打包成aar并发布到maven仓库上。所以对于我们gradle,就存在以下两个步骤步骤一 : 清空myLibrary的缓存,并将myLibrary打包成aar并发布到maven仓库上步骤二 : 清空app的缓存,并将app打包成apkgradlew myLibrary:clean myLibrary:uploadArchives...原创 2022-05-17 19:55:36 · 1470 阅读 · 0 评论 -
Android Maven仓库搭建 - 实现自动化打包自动拉取最新maven依赖
- 本地开发模式下 - 直接依赖Library源码进行开发调试- Jenkins打开发包 - git每次提交了`Commit`之后,都会去打一个开发包,此时,会先将library编译上传到Maven快照仓库 (Snapshot) 上,然后在编译app的时候,会从`Maven快照仓库`里拉去最新的`library库`,然后进行打包- Jenkins打正式包 - 每次打生产包的时候,都会将`config.gradle`中的`versionCode`和`versionName`+1,然后将`构建环境的标原创 2022-05-05 16:40:40 · 3766 阅读 · 0 评论 -
发送广播限定其权限,保障数据安全性
最近,在搞一个发送广播的安全审计问题 :说App存在发送广播信息泄露风险:1.使用静态检测引擎对APK进行反编译。2.扫描反编译后的代码文件,发现存在发送广播信息泄漏漏洞。要求使用带自定义权限的api发送广播信息:sendBroadcast(Intent i, String receiverPermissions)一开始,以为会是一个比较简单的需求,就多加一个receiverPermissions参数嘛。但是在demo中跑的时候,却怎么也收不到广播信息,感到很奇怪。隐式广播和显式广播一开始原创 2022-04-18 19:48:08 · 3642 阅读 · 0 评论 -
Android/IOS 实现接触NFC自动跳转到App,如果未安装App,则跳转到应用市场
某些共享电单车的友商最近推出了手机碰一碰NFC自动跳转到App自动开锁的功能,这个对于用户体验是有提升的,所以研究了一下。友商的逻辑是这样的如果已安装App,接触NFC自动跳转到App如果未安装App,则跳转到应用市场原创 2022-03-12 17:20:04 · 20953 阅读 · 14 评论 -
Android RSA 加密
没想到被Android里的RSA加密折腾了几个小时,主要还是自己对RSA加密的原理不了解,然后网上相关的资料也少。使用AndroidUtilCode工具类中的`EncryptUtils.encryptRSA()`加密后的数据怎么也不对,后来自己找了段加密代码,才总算是可以了,这里记录一下。首先我们需要先 生成一个RSA的公钥和私钥。原创 2021-12-18 17:06:21 · 8178 阅读 · 4 评论 -
MacBook M1 编译Android项目报错 Exception: No native library is found for os.name=Mac and os.arch=aarch64
今天M1Pro芯片的MacBook Pro到手了,但是编译程序的时候,出现了这个报错。Caused by: java.lang.Exception: No native library is found for os.name=Mac and os.arch=aarch64. path=/org/sqlite/native/Mac/aarch64 at org.sqlite.SQLiteJDBCLoader.loadSQLiteNativeLibrary(SQLiteJDBCLoader.java原创 2021-12-06 11:26:36 · 7138 阅读 · 2 评论 -
快速解决Android编译报错 : Manifest merger failed with multiple errors, see logs
编译项目的时候,遇到AndroidManifest合并失败的情况就挺头疼的。Manifest merger failed with multiple errors, see logs直接运行项目,看不出来问题,以前都是通过gradlew build --debug --info --stacktrace来排查问题,但是使用这种方式,编译就很慢,可能要等上个5、6分钟,挺影响效率的。今天发现了一个新的命令,可以专门针对Manifest来进行编译gradlew processDebugMani原创 2021-09-30 14:46:58 · 40970 阅读 · 3 评论 -
Android 接入华为扫码库,实现堪比微信扫码的效果
上一篇文章我们介绍了如何接入微信开源的扫码库,来提升扫码识别率和扫码速度。但是由于接入微信扫码库,需要用到OpenCV和JNI相关的一些知识,所以还是有一定门槛的。这篇文章,我们来接入华为的扫码库,相比接入微信扫码库要简单很多,正对扫码弱光、弯曲等场景下作了特殊的优化,在某些实际扫码场景上,比微信还要强 !华为扫码库有提供两种SDK,可以根据需求选择合适的特别要注意的是如果在非华为手机使用多码能力接口,请使用Scan SDK-Plus,否则会影响识别。具体接入请看 华为统一扫码服务 官方文档原创 2021-08-31 22:25:32 · 6138 阅读 · 3 评论 -
Android 接入微信扫码库,实现堪比微信的扫码效果
对于Android的扫码库,我们平时都会使用ZXing或者ZBar来实现。但是实际情况是,对于一些环境恶劣的情况下,比如 眩光、昏暗、有污渍等情况下,很难被识别。即使是在普通情况下,扫码的识别速度、识别率依旧不甚满意的。为了满足业务需要,故我们需要找到更好的扫码库。微信开源的扫码库,就是其中一个不错的选择。微信的扫码库,基于开源引擎ZXing,结合计算机视觉和深度学习技术,深度优化改造的高性能扫码库。拥有 基于CNN的二维码检测和增强,更鲁棒的定位点检测,更详细的特性可以看https://blo原创 2021-07-29 10:48:55 · 10774 阅读 · 7 评论 -
使用Kotlin DSL 来编写Gradle脚本,替换Groovy
平时我们使用的Gradle文件,使用的语言是Groovy,现在,我们可以使用Kotlin来编写Gradle脚本了,优势如下。类型kotlinGroovy自动代码补全支持不支持是否类型安全是不是源码导航支持不支持重构自动关联手动修改接下来让我们新建一个项目,然后配置为kotlin脚本吧。1.将单引号替换为双引号在新建的项目中,直接用Android Studio的替换功能,将gradle文件中的将'替换为"2.修改Gradle文件扩展名ap原创 2021-05-31 18:20:56 · 1271 阅读 · 6 评论 -
声明式UI和命令式UI的区别
“声明式” 是一个流行词,但也是一个很重要的字眼。当我们谈论声明式编程时,我们谈论的是与命令式相反的编程方式。让我们来看一个例子:假设有一个带有未读消息图标的电子邮件应用。如果没有消息,应用会绘制一个空信封;如果有一些消息,我们会在信封中绘制一些纸张;而如果有 100 条消息,我们就把图标绘制成好像在着火的样子…fun updateCount(count: Int) { if (count > 0 && !hasBadge()) { addBadge() } el原创 2021-05-08 14:44:39 · 3151 阅读 · 3 评论 -
Material Components中的Shape、ShapeableImageView、MaterialButton
Material Components中的Shape、ShapeableImageView、MaterialButtonMaterial Components 是Google官方对Material Design的最佳实践,最近增加了不少东西,这里记录一下引入包首先,我们先要依赖material库implementation 'com.google.android.material:material:1.2.1'ShapeMaterialShapeDrawable类提供了很多有用的api,我们可原创 2021-04-28 17:18:49 · 740 阅读 · 4 评论 -
Android 违规获取用户隐私(获取软件安装列表信息)整改
前几天,收到公司App违规收取用户隐私的邮件,其中一项说我们App存在在用户同意协议前获取软件安装列表信息。经排查,发现判断主进程的时候,会去获取软件安装列表。public static boolean isMainProcess() { return Utils.getApp().getPackageName().equals(getCurrentProcessName());}private static String getCurrentProcessName() { try原创 2021-01-09 15:17:01 · 14402 阅读 · 11 评论 -
Android 违规获取用户隐私(获取MAC地址)整改
前几天,收到公司App违规收取用户隐私的邮件,说是存在收集设备MAC地址的行为。这就让我很方了,上次已经整改过一次违规获取用户隐私的问题了,这次又来。。因为上次整改的时候,已将所有的第三方库移到用户同意了隐私协议后,才去初始化的,自己的代码又不会去获取这些数据,理应不会再出现获取,所以就很奇怪,不知道哪里出了问题。后来想到,既然是去获取了MAC地址,必定要调用系统的API,那么我只要去HOOK系统的方法,就可以知道在什么时候,去获取了MAC地址了。由于各个系统版本获取MAC地址的方式不同,所以特意拿原创 2020-12-31 10:13:23 · 15925 阅读 · 46 评论 -
Android AspectJ 重复织入的问题
AspectJ是Android AOP三剑客之一,对于一些面向切面的需求,能提供很好的解决方案。但最近,在使用过程中,发现一个问题,对于切点的织入,不仅仅是原创 2020-12-03 10:52:19 · 603 阅读 · 2 评论 -
Android 通过短信(H5)跳转到App指定页面
最近公司为了增加用户活跃度,新增了许多活动,要求从多种方式可以跳转到App的制定页面。比如闪屏页、首页弹框、首页banner、webView、极光推送消息点击跳转以及通过短信跳转到App。对此,我们制定了一套专属于公司的liubike协议,和淘宝的taobao://、微信的weixin://等类似,liubike协议遵循于URL schema。URL SchemaURL Schema 的属性有 Scheme、Host、port、path、query。比如liubike://mine/setting原创 2020-11-02 15:39:35 · 5144 阅读 · 5 评论 -
Android ARouter 传值第二次进入页面不生效,自动注入无效
使用Kotlin开发的时候,传值跳转页面,出现第二次进入页面不生效的问题。我们要跳转的页面是SecondActivity@Route(path = "/app/second")class SecondActivity : AppCompatActivity() { @JvmField @Autowired var hello: String? = null @JvmField @Autowired var roomId: Int? = null原创 2020-08-25 17:25:49 · 2174 阅读 · 4 评论 -
Android 使用MotionLayout实现动画效果
MotionScene运动场景文件的根元素。<MotionScene>包括一个或多个<Transition>元素,每个元素用于定义运动序列的开始和结束状态,以及这两种状态的转换。必须包含的元素Transition指定需要执行的运动序列。如果<MotionScene>包含多个<Transition>元素,MotionLayout会根据用户的互动选择最合适的元素。例如,<MotionScene>可能有四个<Transition>原创 2020-07-29 18:26:17 · 3793 阅读 · 0 评论