![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Android开发
文章平均质量分 93
殇神马
这个作者很懒,什么都没留下…
展开
-
Android音视频开发之音视频基础知识
一、前言随着4G、5G网络的普及,音视频的应用越来越广泛,包括火热的短视频、音视频直播、音视频通话等;特别是移动端的音视频应用,所以移动端的音视频的开发需求也会非常大,所以作为一名移动开发者,学习和了解音视频开发也是非常必要的;二、音视频基础(1)封装格式:以我们最常见的视频文件,MP4格式文件为例,它其实就是一个后缀名为.mp4的文件;视频文件实际上是一种封装格式文件,或者说是一个容器文件,其中包含了图像数据和音频数据;而封装格式就是就是将图像数据和音频数据打包到一起的一种规范;而封装格式主要原创 2021-04-08 22:56:29 · 507 阅读 · 4 评论 -
Android 音视频开发之音视频编码原理
一、前言在上一篇Android音视频开发之音视频基础知识文章中,我们学习了播放一个视频的流程:解协议、解封装、解码、音视频同步、音视频数据的渲染;其中解码是非常关键的一步,那为什么要进行解码,所谓的解码就是音视频编码数据的解码,那为什么视频文件中的音视频数据是编码后的数据,而不是音视频原始数据这是因为音视频原始数据,这是因为音视频原始数据是非常大的,所谓编码,就是对视频的原始图像数据,音频数据进行压缩,压缩之后再按照封装格式规范,封装成一个视频文件,这样可以大大降低视频文件的大小,便于视频的存储以及传输原创 2021-04-11 00:24:19 · 358 阅读 · 0 评论 -
Ubuntu使用Jenkins配置自动化打包Android APK
一、前言我们开发好功能之后,需要编译打包,打包好的可执行程序需要交给测试人员进行测试,但是往往我们的项目大了之后,编译整个项目,打包的过程的时间相对比较长,这个时候如果是在开发人员的电脑上进行代码的编译打包,这段时间,开发人员就没法进行编码的工作了,这个如果我们需要频繁的打包情况下,效率就会更低了;所以很多公司团队都会采用在服务器配置自动构建,打包的过程,而不再是在开发人员的电脑上手动构建,编译,打包;甚至是测试人员也可以根据代码的版本,自己随时触发构建打包,然后进行测试;而Jenkins就是一款非常原创 2022-01-23 16:39:31 · 4214 阅读 · 0 评论 -
Android应用安全
一、前言互联网时代,移动应用已经进入到大众生活的各个方面,娱乐、出行、金融、支付等等,应用中包含了用户的各种隐私数据,如聊天记录,金融账户等等敏感数据,以及一些涉及用户个人财产安全的交易支付操作等,所以移动应用的安全性显得尤为重要。作为移动应用开发者我们需要考虑从各个方面最大限度的提高应用的安全性;这篇文章就来讨论一下Andoid应用开发中的安全性问题二、Android应用的安全1.组件安全组件安全 组件安全是指我们在使用Android提供的组件时,需要做一些访问限制,Activity,Servi原创 2021-10-19 19:29:21 · 4168 阅读 · 0 评论 -
Android SQLite数据库加密
一、前言SQLite是一个轻量级的、跨平台的、开源的嵌入式数据库引擎,也是一个关系型的的使用SQL语句的数据库引擎,读写效率高、资源消耗总量少、延迟时间少,使其成为移动平台数据库的最佳解决方案(如Android、iOS)但是Android上自带的SQLite数据库是没有实现加密的,我们可以通过Android Studio直接导出应用创建的数据库文件,然后通过如SQLite Expere Personal 这种可视化工具打开数据库文件进行查看数据库的表结构,以及数据,这就导致存储在SQLite中的数据可原创 2021-09-29 13:19:33 · 2408 阅读 · 1 评论 -
Android编译时注解处理APT
一、注解在使用Java语言开发的过程中,我们会经常看到各种各样的注解,@Override(表示方法的重写),@Deprecated(标记过时的元素 方法,类或属性),@LayoutRes(表示的是布局资源),@IdRes(表示的是ID资源),@DrawableRes(表示的图片资源)等等,另外在一些第三方库中,如Butterknife,EventBus,Retrofit中也会使用了很多自定义的注解;那到底什么是注解?注解本身是没有什么意义的,单独的注解就是一种注释或者说是一种标记,他要结合APT(编译原创 2021-07-11 17:33:23 · 782 阅读 · 3 评论 -
Android自定义Gradle插件
一、Gradle我们知道在我们现在使用Android Stduio开发Android项目的时候,Android Studio是基于Gradle来帮助我们构建,管理项目的。Gradle:Gradle是一个项目构建工具,用来帮助我们管理项目的依赖、打包、发布、部署等工作。Gradle是通过如build.gradle这种gradle脚本来进行项目构建的,所以我们对项目的构建配置都是可以写在gradle构建脚本中。gradle构建脚本使用的是Groovy语言,Groovy语言也是一种jvm语言,最终也是编译原创 2021-07-08 00:06:59 · 1231 阅读 · 4 评论 -
Android AOP编程之AspectJ
一、AspectJAspectj是一个AOP框架,也是通过对字节码操作,来实现AOP的,但是与ASM需要开发者直接编写操作字节码的代码之外,使用Aspectj不需要开发者直接编写操作字节码代码, 而是只需要按照规范编写我们需要处理的Java代码即可;由Aspectj帮助我们将编写的Java代码的字节码织入到.class字节码文件中实现字节码插桩操作;二、AspectJ中的基本概念1.切面 Aspect我们在学习AOP的时候,知道AOP实际就是针对的是业务逻辑中的某个处理步骤,比如日志处理,登录判断原创 2021-07-06 16:18:13 · 671 阅读 · 0 评论 -
Charles抓取Android设备HTTPS包
一、前言作为一个移动应用开发者,我们在平时的应用开发过程中,除了UI界面的相关编码之外,做的最多的编码工作就是和服务端程序员进行接口的联调;当然在接口联调的过程中,往往会出现接口调试不通的情况,可能是我们确实没有按照接口文档的要求来进行接口请求,如没有按照指定的请求方式Post/Get,请求头Header,Content-Type,或者请求参数等来进行正确的接口请求 ,当然也有可能是服务端程序本身的问题,为了快速定位我们请求是否是有问题,我们可以通过一些抓包工具Wireshare、Charles等来对我们原创 2021-06-27 18:25:49 · 3736 阅读 · 5 评论 -
Android NDK开发入门基础
一、NDK/JNINDKNDK(Native Development Kit)-原生开发工具包,使得能够在Android上去使用C/C++代码;JNIJNI即Java Native Interface,Java和Native接口,就是Java和C/C++之间通讯的桥梁; 为什么要有JNI,因为Java和C/C++之间是无法直接相互调用的,也就是无法直接通讯,就和Java和JS之间也不能直接相互调用,中间需要翻译者来处理,JNI就是为了实现Java和C/C++之间这两种不同语言之间的通讯的;JN原创 2021-06-21 19:16:12 · 1129 阅读 · 0 评论 -
Android发布库(jar/aar)到MavenCentral
一、前言:由于Jcenter已经停止服务了,所以我们现在发布库一般是要发布到Maven Central;Maven Central和Jcenter一样也是一个公共的仓库,发布在上面的库可供自己和他人使用;Android Studio 4.2开始,Google已经把MavenCentral作为gradle中二、发布库(jar/aar)到MavenCentral的流程1.Sonatype Jira相关设置我们首先要在 Sonatype Jira上注册一个账号;然后在https://issues.son原创 2021-06-13 16:02:31 · 3093 阅读 · 5 评论 -
Android CameraX实现摄像头预览、拍照、录制视频
一、前言从Camera1到Camera2,再到现在的Jetpack中的CameraX,Google一直在致力于让Android应用开发者更加方便的去使用摄像头相关的API,更加简单快速的实现摄像头相关的应用功能;下面就来学习一下使用CameraX实现拍照和录制视频功能;二、CameraX概述CameraX是Android Jetpack中的组件,旨在简化相机相关的应用开发工作,但是要注意的是CameraX向下最低兼容到Android 5.0(API 21);CameraX利用了Camera2的功能,但原创 2021-04-11 18:57:46 · 3652 阅读 · 2 评论 -
Android 实现应用内语言切换(包括不重启应用方式)
一、前言对于一个移动应用,可能不仅仅是面向一个国家的用户,所以多语言国际化是移动应用开发中比较常见的一个功能;正常实现多语言国际化,我们只需要在资源目录下res/下创建需要支持的国家values目录,命名格式为values-语言,如values-zh(中文),values-en(英文) ,然后在values目录下放置对应的资源文件,如string.xml,arrays.xml即可;Android系统会根据系统设置的语言,自动选择你应用中对应的values-语言目录下的资源 ,没有找到对应的语言的value原创 2020-11-27 15:07:45 · 9449 阅读 · 8 评论 -
Android Monkey测试
一、前言在我们开发好Android应用之后,在交给测试之前,我们自己还是要进行测试的,保证应用基本功能不会有问题,除了我们手动操作应用,走页面,走功能流程来测试之外,Android其实还提供了一种自动化测试Monkey;Monkey测试也叫作搞怪测试,就是用一些稀奇古怪的方式去测试被测试系统,以测试系统的稳定性;二、Monkey1.Android中的MonkeyMonkey是Android中的一个命令行工具,可以运行在模拟器 里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、原创 2020-09-28 16:36:07 · 717 阅读 · 0 评论 -
Android Q适配之文件存储
Android中不同系统的适配一直是应用开发中非常重要的问题,如果不能及时适配不同的系统版本,应用极有可能发生崩溃,给用户带来不好的体验。随着Google发布 Android Q(API 28),我们需要及时的根据系统的变化做出相应的适配。Android Q中隐私权一块发生了较大的改变。特别是外部存储的访问权限的改变。Android Q中引入了分区存储的概念,应用默认拥有分区存储的访问(读写)...原创 2020-01-03 14:21:44 · 2560 阅读 · 0 评论 -
Android进阶系列之性能优化篇-(内存优化)
Android中,应用的性能优化是一个比较重要的问题,应用性能直接影响到用户的体验,应用的流畅度,崩溃率,流量使用量,耗电量,以及启动的快慢,内存使用等,都会严重影响用户的使用。而内存优化更是Android应用性能优化中的重要部分,这篇文章就来记录总结一下Android应用的内存优化首先先来了解一下两个概念:内存泄漏:由于某种原因,导致程序中动态分配的堆内存,无法被释放,导致系统内存的浪费。...原创 2019-11-04 21:12:36 · 345 阅读 · 0 评论 -
Android 实现弧形View或者ImageView
在Android项目开发中,经常会遇到下面这两种弧形布局设计: 图一上方是一个外凸的红色弧形背景,图二上方是一个内凹的背景图片实现方案:图一可以通过自定义View,绘制出这个弧形View;图二可以继承自ImageView,并通过clipPth的方式,让ImageView在弧形区域内绘制实现。图一弧形View具体实现:图一弧形背景可以分解成两部分,矩形部分+弧形部分矩形部分绘制很简单,下面弧形部分原创 2017-11-26 10:10:55 · 14432 阅读 · 18 评论 -
Android 混淆
1.简介在Android项目打包上线的过程中,混淆是很重要的一步,混淆会使用a、b、c、d这样简短而无意义的名称,对类、属性和方法进行重命名,增加反编译后代码阅读的难度,从而增加反编译的难度。Android中使用Proguard进行混淆。Proguard是一个免费的Java类文件压缩、优化、混淆,预校验器。压缩:检测并移除无用的类,以及类成员;优化:对字节码进行优化,移除无用指定;混淆:使用a、b、原创 2017-12-11 16:18:55 · 383 阅读 · 0 评论 -
CoordinatorLayout中使用WebView冲突
最近在项目中使用到了CoordinatorLayout和AppBarLayout,主要是为了实现当向上滑动的时候顶部部分布局隐藏,但是对于下方布局是RecycleView时没有问题,但是如果下方布局是WebView时,则会出现向上滑动的时候,顶部布局无法隐藏,可以滑动的仅仅是WebView自身。RecycleView和WebView都是可以滚动的视图,为什么WebView不能和Coordinator原创 2017-11-19 14:56:40 · 1388 阅读 · 0 评论 -
Android N上Popwindow显示位置不正确问题
Popwindow是Android应用开发过程中比较常用的一个组件,最近发现了在Android N(Android 7.0)上Popwindow的一个位置显示问题, 使用showAsDropDown或者是showAtLocation来显示Popwindow,Popwindow总是顶到了屏幕顶部,而不是在设置的指定控件下方显示,而在Android 6.0及其他系统上显示正常。 如图所示:mPopu原创 2017-05-29 10:09:18 · 1933 阅读 · 0 评论 -
在PopupWindow中再弹出PopupWindow问题
最近在项目的开发中遇到一个需求,是一个弹出菜单点中击一个选项按钮,在选项按钮下方弹出下拉菜单。最初想到的实现方式第一个弹出菜单用PopupWindow,第二个下拉菜单 也用PopupWindow,在第一个PopupWindow菜单中的选项按钮正下方显示第二个下拉菜单PopupWindow。但是在显示第二个下拉菜单PopupWindow中报出异常,程序crashandroid.view.Window原创 2017-10-25 07:22:41 · 2962 阅读 · 0 评论 -
Android中比较好的开源项目整理
记录一些比较好的Android开源项目:-自定义星级评论条 https://github.com/hedge-hog/RatingBar-高仿微信图片选择器 https://github.com/ioneday/ImageSelector-仿iOS的PickerView控件,有时间选择和选项选择并支持一二三级联动效果 https://github.com/saiwu-bigkoo/Androi原创 2016-11-05 22:48:29 · 655 阅读 · 0 评论 -
Android Studio 中,jar、so、aar文件正确引用姿势
在Android 应用开发过程中,经常用到第三方库或SDK,而引用第三方的方式无非就是jar,so,aar,以及通过build.gradle中compile这个几种方式。下面介绍一下jar,so,aar这几种文件的正确引用方式:(1)jar文件将jar文件复制到app/libs目录下,然后重新sync project即可图解: (2)so文件首先同样是将不同CPU架构的so文件放到app/li原创 2017-08-27 11:24:43 · 1365 阅读 · 0 评论 -
Android 动态权限申请之 shouldShowRequestPermissionRationale方法异常
       **我们知道从Android 6.0(API 23) 开始,Google在Android上引入了动态权限模式,即用户可在应用运行时管理权限,这种模式让用户能够更好地了解和控制权限,用户可为所安装的各个应用分别授予或撤销权限。但是对于开发者来说,为了适配Android 6.0(API 23)及以上版本,除了在Andr原创 2018-12-20 14:03:47 · 3245 阅读 · 0 评论 -
Android 实现应用更新(适配Anndroid N)
应用更新是移动应用开发中的一个常见功能。主要分为三步:(1)检测应用新版本检测应用新版本,一般是进入应用时调取服务器接口,获取最新应用版 本信息,和当前应用版本信息进行比较,如果当前应用不是最新版本,则下载最新应用并自动跳转至安装界面。(2)下载并安装下载应用文件(APK文件),系统自身提供了DownloadManager可以实现文件的下载。网上很多应用更新的文章、博客也都是使用DownloadMa原创 2017-06-04 12:14:07 · 3249 阅读 · 2 评论 -
沉浸式与透明状态栏
沉浸式:(Immersive Mode)沉浸式提供参与者完全沉浸的体验,就是给用户一种置身于虚拟世界的感觉。对应到移动应用上就是全屏效果,例如 游戏全屏、视频的全屏都是提供用户沉浸式的体验。Android系统中的一个Activity(界面)其实是有许多系统元素的,如下图所示一个Activity,包含了状态栏(StatusBar)、ActionBar,原创 2018-01-07 16:13:25 · 662 阅读 · 0 评论 -
Android 实现应用更新适配 Android O (Android 8.0)
之前写过一篇 Android 实现应用更新(适配Anndroid N),本篇主要讲解Android O(Android 8.0)上应用更新的适配问题,应用更新的完整实现请结合上一篇文章一起,文末也会给出完整代码链接。最近测试反馈在Android 8.0的手机上,提示应用更新,更新时会出现下载失败,并且通知栏也没有显示下载的进度的情况,即使下载成功也不会弹出应用安装界面。实测发现确实是有这样...原创 2018-03-25 17:24:37 · 8700 阅读 · 4 评论 -
Android URL Scheme
前言:我们在使用微信的过程中,经常可以通过别人分享的链接,直接跳转到一些APP内部。比如京东、网易云音乐,我们通过在这两个APP内部分享链接到微信,微信中点击链接进入微信浏览器打开分享的页面,可以在页面中看到直接打开的按钮,点击直接打开就进入了该APP的对应的页面。实际上就是从微信浏览器中的一个页面跳转到APP指定的页面。这一种效果就是通过URL Scheme来实现的。 UR...原创 2018-04-22 16:49:30 · 17252 阅读 · 0 评论 -
极光推送(一)——极光推送的介绍
在Android应用开发的过程中,可能需要服务器推送消息到Android客户端,对于iOS有其自己的推送服务,而遗憾的是Android系统没有原生的推送服务,但是我们可以借助第三方推送平台来实现服务器推送消息到Android客户端。 我们这里介绍一种第三方推送平台-极光推送(JPush)。 1.极光推送(JPush)简介 极光推送(JPush) 是国内比较早提供推送服务的第三方推送平台,极光推原创 2016-06-29 17:40:14 · 2758 阅读 · 0 评论 -
Android进阶系列之ViewPager的刷新问题分析
ViewPager是Android应用开发中非常常用的一个控件,是一个可以让View左右翻页滑动的管理布局,需要和PagerAdapter配合使用,来创建每一页的View并显示。ViewPager的使用其实是比较简单的,但是有一个比较重要的问题,就是ViewPager的数据刷新。PagerAdapter有一个notifyDataSetChanged()方法,根据Android官方文档的介绍Pa...原创 2019-09-01 15:03:04 · 3638 阅读 · 0 评论 -
Android 正确获取View的宽和高
Android 在实际开发过程中,我们可能经常要获取View的宽和高,那么如何来正确获取一个View的宽和高呢。View提供了getWidth(),getHeight(),getMeasureWidth(),getMeasureHeight()方法来获取View的宽和高,getWidth(),getHeight()获取的是View最终显示的宽和高也即实际宽和高,而getMeasureWidt...原创 2019-08-11 16:10:35 · 4331 阅读 · 0 评论 -
Android 直播礼物动画实现之SVGA动画
在最近做的直播项目中,产品要求发送礼物时,需要显示对应的礼物动画,其中几个礼物动画效果如下:看了这几个动画效果,是挺炫酷的,妥妥的能够增加用户体验,但是实现起来可就没那么容易了。Android中动画实现方案,主要有以下几种:(1)Frame Animation(逐帧动画)(2)Tween Animation (补间动画)(3)Property Animation(属...原创 2018-09-07 16:57:30 · 21188 阅读 · 3 评论 -
adb.exe start-server failed cannot connect to 127.0.0.1:5037 adb:CreateFileW 'nul' faield:系统找不到指定文件
1.新安装Android Studio后,连接手机,但是检测不到真机,一般是驱动问题、或者端口号被占用。但是使用驱动人生检测连接的手机驱动正常、5037端口号也没有被占用。Android Studio 提示 : adb.exe start-server failed cannot connect to 127.0.0.1:5037 unable to create Debug: Una...原创 2018-07-12 17:12:58 · 1205 阅读 · 0 评论 -
Retrofit2学习使用
一、简介 我们这里所介绍的Retrofit均是指Retrofit2.0 Retrofit是Square公司开发的一个基于OKHttp的Restful API风格的网络请求库。 GitHub地址: https://github.com/square/retrofit二、Retrofit工作原理 Retrofit的网络请求工作本质上是由OKHttp完成,而Retrofit是对网络请求接口的...原创 2018-06-12 15:04:16 · 254 阅读 · 0 评论 -
Error:Could not find common.jar (android.arch.core:common:1.0.0).
1.Android Studio打开项目突然报如下错误Error:Could not find common.jar (android.arch.core:common:1.0.0).Searched in the following locations:https://jcenter.bintray.com/android/arch/core/common/1.0.0/common-...原创 2018-06-11 18:06:25 · 824 阅读 · 0 评论 -
Android悬浮窗
前言: 最近在做的项目中有一个直播模块,直播模块中有一个最小化的功能,就是观众端观看直播的时候,可以选择最小化,在整个应用中有一个小窗口播放直播画面。在参考了微博、斗鱼直播等市面上主流的直播软件,发现它们都是通过悬浮窗(WindowManager)来实现最小化功能的。1.悬浮窗权限 使用悬浮窗首先要在AndroidManifest.xml中配置悬浮窗权限。 <uses-perm...原创 2018-06-11 16:13:14 · 966 阅读 · 1 评论 -
Android 获取系统各个目录
在Android开发过程中,我们经常会对文件系统进行操作——存放、释放我们应用的数据。Android系统中提供了各种功能的文件目录,每个目录都有相应的特点和功能。 这篇文章主要介绍和记录一下实际开发过程中常用的各个文件目录。(1)内部存储(Internal Storage)内部存储是App的私有目录,当一个应用卸载之后,内部存储中的这些文件也被删除。Shared Preferences和SQLite原创 2017-03-31 22:16:15 · 5949 阅读 · 1 评论 -
Android实现图片的高斯模糊
在市面上很多的APP都使用了对图片作模糊化处理后作为背景的效果,来使得整个页面更具有整体感。如下就是网易云音乐的音乐播放页面:很明显这个页面的背景是由中间的小图片模糊化后而来的。最常用的模糊化处理就是高斯模糊。高斯模糊的几种实现方式: (1)RenderScriptRenderScript是Google在Android 3.0(API 11)中引入的一个高性能图片处理框架。使用RenderScri原创 2017-03-05 11:21:44 · 905 阅读 · 0 评论 -
Android集成微信分享,由于分享的缩略图大于32K,而无法调起微信客户端
在项目中集成微信分享功能,分享的是一个链接,带有图片和标题。 按照微信开放平台网页类型分享示例,进行代码编写,但是点击分享 始终无法调起微信客户端。 /** * 微信分享到好友(聊天界面) */ public static void wechatShareToSceneSession(String webpageUrl, String title, String d原创 2016-10-23 14:17:19 · 15385 阅读 · 7 评论 -
Android中的Web Service学习(一)——Web Service介绍
Web Service即Web服务,这个词并不是在Android中才出现的。 根据W3C的定义,Web Service是一个支持网络间不同机器互相操作的软件系统,它是一种自包含、自描述和模块化的应用程序,它可以在网络中被描述、发布和调用。 Web Service是建立在通信协议的基础之上,如HTTP、SOAP、WSDL、 UDDI等,这些协议在操作系统、编程语言和对象模型的选择上没有任何倾向,原创 2016-07-08 08:50:55 · 411 阅读 · 0 评论