
Android
文章平均质量分 70
Mr Lee_
这个作者很懒,什么都没留下…
展开
-
单例模式双重锁中volatile的作用
Java面试中级题,android面试原创 2022-06-14 16:00:05 · 659 阅读 · 3 评论 -
AAPT: error: resource android:attr/lStar not found.(已解决)
android 编译报错问题原创 2022-05-17 10:37:47 · 11681 阅读 · 1 评论 -
mmap数据拷贝详解
https://zhuanlan.zhihu.com/p/357820303转载 2022-01-11 11:13:57 · 485 阅读 · 0 评论 -
编译生成APK的全过程
不关是Android 客户端还是Android SDK等,在平时工作的时候都会遇到过生成Apk的时候,用AS的话的确是一键就可以生成一个Apk,但是很多小伙伴还不知道从代码到一个Apk文件这中间到底经历了什么,接下来我们就大致说说,先上一张官方的图:这里先大致讲一下图中涉及到的一些工具:工具用处aaptAndroid的资源打包工具aidl用于将Android的接口语言转换成.java的工具javacJava Compilerdex将.class文件转换成D原创 2021-10-26 16:42:39 · 2611 阅读 · 0 评论 -
你好,Android AAB!
文章目录前言一、aab是什么?二、aab和apk的区别1.aab和apk的文件格式2.Split APKs3.Bundletool的使用总结前言Google在2021年的8月份起,要求所有上架Google Play的应用必须采用.aab的新格式才可以上传应用包,对于aab新格式的包其实早在去年的年底官方就做了对应的通知了,不过aab虽然首次出现的时间是在2018年,但是在国内很少被提及到,基本上都是以apk为主,现在既然Google强制要求使用aab来上架GP(Google Play),那么这篇文章.原创 2021-07-15 17:51:01 · 2698 阅读 · 6 评论 -
Java static关键字总结
static 关键字在Java中,被static声明过的成员变量称为静态成员变量,也称为类变量。如果一个成员使用了static关键字修饰,那么这个成员就不在属于对象了,而是属于类,在这个类中的所有对象实例所共享,可以节省很多内存空间;也可以用一句话来总结,就是方便在没有创建对象的情况下来进行调用,也就是说,被static所修饰过的成员变量或者成员方法,不需要去new一个实例对象,然后再进行调用,而是可以直接通过 类名就可以去访问,举个例子:public class student{ //定.原创 2021-06-19 16:15:10 · 192 阅读 · 0 评论 -
为什么重写equals()方法就必须重写hashCode()方法呢?
文章目录前言一、equals和==二、hashCode()方法三、hashCode() 与 equals()1.不会创建“类对应的散列表”,不存在重写equals()要重写hashCode()2.当类需要放在HashTable、HashMap、HashSet等hash结构的集合时需要重载hashCode()总结前言对于Java开发或者Android开发的小伙伴来说,在面试的时候,应该都会遇到面试官问这么一个问题:你知道equals()和 == 的区别在哪嘛?小伙伴的第一反应一般都会是回答:equal原创 2021-06-08 17:12:22 · 741 阅读 · 0 评论 -
手把手教你Hook Android 点击事件
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、什么是Hook?二、Hook的优势三、Hook前置条件1.反射2.代理模式四、Hook实战总结前言随着技术的不断创新,Android的需求也是越来越多,Hook技术是走向Android高级开发的必经之路。提示:以下是本篇文章正文内容,下面案例可供参考一、什么是Hook?Hook,简称“勾子”,用通俗易懂的方式来说就是勾住代码的逻辑,通过拦截的手段,插入自己的代码逻辑,在保证原有功能不变的情况下新增自己的逻辑功能原创 2021-05-22 15:24:13 · 2951 阅读 · 8 评论 -
Android 必知的TCP/IP的三次握手和四次挥手
前言网络一共被分为七层,从下往上分别是物理层 > 数据链路层 > 网络层 > 传输层 > 会话层 > 表示层 > 应用层而TCP和UDP是属于传输层,负责数据的传输,我们常说的HTTP和HTTPS是属于应用层,主要是负责使用接收到的数据;从这里我们可以简单的了解到,IP协议对应网际互联层,只负责找到地址;TCP协议对应传输层,负责具体的传输工作;HTTP协议对应应用层,负责对接收到的数据进行解析那么什么是TCP呢?建立一个TCP的过程是怎样的呢?断开TCP的过.原创 2021-04-27 15:12:26 · 921 阅读 · 0 评论 -
多线程之Synchroized解析
前言既然提到Android的多线程,那我们就先来回顾一下线程是怎么创建的先。Android常用的线程创建方式主要用两种(这两种线程的创建方式是我们在开发过程中比较常用到的,还有线程池以及Callable可以创建线程,只是用的会稍微少一些):继承Thread类,重写Thread的run()方法;实现Runnable接口,然后重写Runnable接口里面的run()方法;两者的关系:Thread类其实是实现了Runnable接口的,然后两者都需要重写run()方法,Runnable可以实现多个.原创 2021-04-26 17:03:46 · 238 阅读 · 0 评论 -
Parcelable与Serializable的性能比较
Parcelable与Serializable的性能比较ParcelableSerizlizable实现Parcelable接口实现Serizlizable接口android 专用Java 自带内存消耗:低内存消耗:一般内存中直接进行读写通过使用IO流的形式将数据读写入在硬盘上不支持持久化支持持久化速度快速度一般...原创 2021-04-25 14:53:34 · 230 阅读 · 0 评论 -
Android + Java 基础知识
1、抽象类和接口的区别抽象类接口类Java中被abstract关键字修饰的类称为抽象类,被abstract关键字修饰的方法叫做抽象方法Java中接口使用interface关键字修饰的被称为接口抽象类不能被实例化,只能被继承在接口中可以定义成员变量,但是这些成员变量默认都是public static final的常量包含抽象方法的一定是抽象类,但是抽象类不一定含有抽象方法一个类实现某个接口,必须要实现接口中定义的所有方法抽象类可以包含属性、方法、构造方法,但是构造原创 2021-04-08 20:38:41 · 492 阅读 · 0 评论 -
浅谈Android Handler消息机制
Handler简介Handler机制在安卓开发中很常应用到,Handler机制也可以称为异步消息机制,包括Handler,Message,Looper以及MessageQueue,主线程不能做耗时操作,如果要更新UI必需要子线程去通知主线程去更新。Handler:消息机制的处理者,在子线程中调用sendMessage方法发送对应的Message,然后经过一系列的辗转后最终消息会被传递到Handler的handlerMessage方法中被处理,即在创建Handler时重写handleMessage方法中原创 2021-03-18 11:28:19 · 618 阅读 · 3 评论 -
谈谈Android中的HandlerThread
**一、简介**在详细讲解这篇文章之前,应该有部分的Android初级开发者并没用使用过HandlerThread,最常使用的消息传递机制应该离不开Handler,那么Handler跟HandlerThread有什么不同呢,好处又在哪里?名詞解释Handler在android中负责发送和处理消息,通过它可以实现其他支线线程与主线程之间的消息通讯Thread进程中执行运算的最小单位,亦即执行处理机调度的基本单位HandlerThread一个继承自Thread的类H原创 2021-03-06 16:20:47 · 591 阅读 · 0 评论 -
Java volatile关键字及双重锁单例详解
synchronized相信大家都应该不陌生吧,这个关键词一般出现在单例模式里面比较常见,在叙说这篇文章之前,我们先看看什么是内存模型概念,这对后续的理解有很大的帮助。内存模型概念计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,势必涉及到数据的读取和写入。由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,这时就存在一个问题,由于CPU执行速度很快,而从内存读取数据和向内存写入数据的过程跟CPU执行指令的速度比起来要慢的多,因此如果任何时候对数据的操作都要通过和内存的交互来进原创 2021-01-13 14:31:12 · 304 阅读 · 0 评论 -
Activity的启动流程详解
简介踏入Android开发有一小段时间了,第一次接手项目的时候状态就是上午自己写Bug,下午改自己的Bug,慢慢的接触的技术多了,就开始写项目上的一些小模块之类的,作为一个开发,技术是永远都学不完的,技术的更新速度快过自己的学习速度,但是个人觉得,如果想作为一名合格的程序猿,一些开发 的底层代码是肯定要了解的。就打个比方(就拿Android来说),你如果是实习的时候去面试,面试官问你Activity的启动流程是怎样的,你脑子里第一反应就是onCreate,onStrat,onResume,onPaus.原创 2020-12-19 16:50:26 · 798 阅读 · 1 评论 -
Android Binder进程通信机制
Android 要采用 Binder 作为 IPC 机制,所以在了解Binder之前我们先来了解下什么是IPC机制先…IPC机制IPC是Inter-Process Communication的缩写,含义为进程间通信或者跨进程通信,是指两个进程之间进行数据交换的过程。在Linux系统之中,进程间IPC机制包含多种,如下表格:IPC机制优缺点管道在创建时分配一个page大小的内存,缓存区大小比较有限消息队列信息复制需要两次,额外的CPU消耗,不合适频繁或信息量大的通信原创 2020-11-04 18:52:00 · 434 阅读 · 0 评论 -
Android动态加载Dex文件及DexClassLoader详解
ClassLoader“类加载器”(ClassLoader),顾名思义,就是用来动态加载class文件的。ClassLoader作用主要有三个:负责将 Class 加载到 JVM 中审查每个类由谁加载(父优先的等级加载机制)将 Class 字节码重新解析成 JVM 统一要求的对象格式有兴趣的小伙伴可以看看JVM是如何加载一个类的 类的加载机制ClassLoader(Java)Class clz = Classloader.loadClass(类全名),其实就是通过一个类的全名,生成这.原创 2020-10-30 16:42:19 · 17858 阅读 · 4 评论 -
JVM 类的加载机制
1、JVM 运行实例中会存在多个 ClassLoader,不同的 ClassLoader 会从不同的地方加载字节码文件。它可以从不同的文件目录加载,也可以从不同的 jar 文件中加载,也可以从网络上下载字节码再进行加载。那JVM是如何进行类的加载的呢?一个类从被加载到虚拟机内存中开始,直到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载这7个阶段。其中,验证、准备和解析这三个部分统称为连接(linking)。加载通过一个类的全限定名来获取该类的二进制字节流,将这个原创 2020-10-30 14:34:29 · 546 阅读 · 0 评论 -
YSDK QQ登录无回调的巨坑
YSDK 手Q登录无回调,加上这句话就可以了(记得导入so文件)android {compileSdkVersion 26buildToolsVersion “26.0.1”defaultConfig {…ndk { abiFilters “armeabi” }}顺便吐槽下YSDK的文档太坑了原创 2020-09-22 11:17:37 · 685 阅读 · 0 评论 -
新建一个Menu菜单项
创建一个Menu首先再res下创建一个文件夹,命名为menu,然后在里面创建一个menu文件,在menu.xml里面编辑内容这里我是定义了两个菜单项,一个为Add,另一个为Remove然后在MainActivaty中重写两个方法onCreateOptionsMenu()onOptionsItemSelected()提示一下,重写方法可以使用快捷键Ctrl+O我这里只是给它们定义...原创 2018-10-23 22:54:42 · 974 阅读 · 0 评论 -
ApkTool 检验APK是否签名报错--提示:jar未签名
反编译之后如果不重新签名的话应用是没法再手机上正常安装运行的所以在重新打包之后都会检验下apk是否有签名检验的命令行:jarsigner -verify XXX.apk然后发现报错了这是因为我们现在有在 META-INF重复签名信息,一个是原来的签名,一个是现在你自己的签名,这会导致验证和安装失败现在只需要把重新打包好的apk后缀改为zip压缩文件,双击打开META-INF文件,只需要把原来的两个RSA和SF文件删掉即可,然后把后缀改回apk,就可以正常运行了...原创 2020-06-24 10:58:23 · 2098 阅读 · 0 评论 -
Android Apk反编译、修改资源、重新签名以及重新打包的详细讲解
在反编译之前先明确下,反编译别人的Apk不是件很道德的事情,毕竟这是别的程序员辛辛苦苦写出来的代码,所以说代码混淆这东西很重要,就是为了防止别人反编译。本文抱着学习的态度,在一些特殊情况下研究下怎么反编译一个没有加混淆的Apk。流程:APK反编译 -> 修改 -> 重新打包 -> 重新签名Apk反编译反编译所使用的到的工具apktool,反编译apk,从apk中提取图片和布局资源dex2jar,将可运行文件classes.dex反编译为jar源码文件java-decompile原创 2020-06-23 16:32:07 · 2574 阅读 · 0 评论 -
Android启动页用户相关政策弹框的实现
现在Android上架各大平台都要求App首页添加一个弹框,显示用户协议以及一些隐私政策,不然上架各大平台,现在就来简单的实现一下这个对话框既然是一个对话框,那我们就先来简单的封装一个对话框,这样方便后续的一些修改:widget_user_dialog.xml<?xml version="1.0" encoding="utf-8"?><androidx.appcompat.widget.LinearLayoutCompat xmlns:android="http://sch原创 2020-05-24 23:24:24 · 3933 阅读 · 24 评论 -
CodeWorks for Android 安装不了(error)
虚幻引擎4使用特殊版本的Android软件开发套件(SDK),名为 CodeWorks for Android。本人选择的是1R7 windows 的版本,但是在安装的时候却安装不了那些Android的一些SDK配置。解决办法是在安装目录下可以看到一个本地下载配置文件“local.ini”,双击用记事本打开后,配置文件是JSON的数据格式,根据CodeWorksforAndroid下载组件页面,找到对应的链接,将http://dl-ssl.google.com/替换为https://dl.google.c转载 2020-05-09 10:18:36 · 1691 阅读 · 2 评论 -
Andoroid 系统适配之动态获取权限
android 适配包括版本适配、系统适配以及屏幕适配现在Android 6.0以上的版本都是通过动态来过去一些权限,也就是打开App的时候会有个弹窗,提示你该应用允不允许访问XXX权限,用户可以点击同意或者不同意,效果图如下接下来附上代码首先,需要在AndroidManifest.xml静态申请权限,否则无法动态申请权限需要动态申请什么权限就配置什么权限 <uses-pe...原创 2020-03-26 12:00:29 · 387 阅读 · 0 评论 -
第三方语音视频即时通信SDK ------环信
现在大多数App都是涉及到社交功能,说到社交,就离不开IM的存在,也就是即时通信。现在主流的第三方IM框架也是有蛮多的,各有各自的好坏,例如网易云信、环信、融云等等,具体实现就看各位在座大佬的需求和选择了。这里就是简单的介绍一下其中一种—环信,环信SDK主要就是为即时通信这块内容提供一套完整的框架;环信的核心主要分为三部分:SDK_Core 、SDK 以及EaseUISDK_Core : 是...原创 2020-03-23 23:51:47 · 1070 阅读 · 0 评论 -
Android Service两种启动模式的区别
Android 的四大组件之一 ServerService不能自己独立运行,需要通过调用startService()或者bindService()方法来启动一个服务。那这两种启动模式有什么区别呢?startService()方法启动服务,调用者与服务之间没有任何的关联,即使调用者退出了服务,服务仍然会保持运行;bindService()方法启动服务,调用者与服务绑定在一起,调用者退出,服务也...原创 2020-03-16 21:42:09 · 1205 阅读 · 0 评论 -
Android 显示Intent和隐式Intent的差别
在Android开发过程中,Intent又被细分显示Intent和隐式Intent,两者的区别在哪呢?显示Intent显式Intent的意思是指可以直接指定需要打开的Activity对应的Java的类用代码表示如下:Intent intent = new Intent(this, FirstActivity.class);startActivity(intent);或者另一种写法I...原创 2020-03-10 18:15:11 · 899 阅读 · 0 评论 -
PickerView的简单介绍
PickerView现在在大多数App都有使用到,例如设置时间的时候,或者选择地区的时候,使用PickerView来实现很实用,在底部弹出个对话框,接着进行选择就可以了,而且OptionsPickerView还支持三级联动,支持自定义布局等功能,接下来就简单的用代码实现一个小Demo:首先就是要添加依赖啦,具体的版本自己选择//实际引入请把"3.x"替换成具体版本号,最新版本号请以GitHub...原创 2020-03-06 10:53:29 · 4958 阅读 · 0 评论 -
Android截取当前屏幕图片并且保存到本地
截取屏幕//截取屏幕public void screenShort() { View dView = getWindow().getDecorView(); dView.setDrawingCacheEnabled(true); dView.buildDrawingCache(); Bitmap bitmap = Bitmap.createBitmap(dVi...转载 2019-11-05 02:54:36 · 339 阅读 · 0 评论 -
android:设置播放res/raw文件夹中的音乐
首先在res文件夹中新建一个文件夹命名为raw,然后将要播放的音乐放到raw文件夹里面,如图这里我就只放了两个MP3文件,根据自己的需求来放然后我的布局是长这样的这个代码我就不多说了,相信大家都可以搞定的接下来就是主要的部分了先定义成员变量 private MediaPlayer iphone,android;//mediaPlayer对象 private boole...原创 2019-10-30 01:37:10 · 4654 阅读 · 1 评论 -
手动安装黄油刀ButterKnife插件
这个插件超级无敌好用,以后就不用手写@BindView、@OnClick之类的东西了,直接一键生成,提高你的开发效率首先打开File->Setting,找到Plugins,搜索ButterKnife找到对应的Android ButterKnife Zelezny,然后下载,下载好了重启一下AS之后在App下的Build.gradle下加入下面两行代码 implementati...原创 2019-09-17 00:14:11 · 1230 阅读 · 0 评论 -
Android之反编译APK操作详解
要想将APK文件中的代码反编译出来,我们需要用到以下两款工具:dex2jar 和 jd-gui可以自己在各自的官网下载这两款软件,下面也有百度云链接链接:https://pan.baidu.com/s/1_wipfoBOrcvfX0S60X-CYg提取码:cm1gdex2jar:将dex文件转换成jar文件jd-gui :将jar文件转换成java代码将两个文件解压好之后我们会发现de...原创 2019-06-29 13:16:14 · 170 阅读 · 0 评论 -
Android studio导入opencv,前言中不允许有内容
在Android studio上导入opencv,在sync project的时候出现问题ERROR:前言中不允许有内容原因是在你导入的文件中,build.grade第一行有注释,只要把注释删掉在重新运行就可以啦...原创 2019-02-20 21:43:40 · 400 阅读 · 0 评论 -
Android 底部弹出Dialog
很多App都需要点击某一个Button就会从底部弹出一个Dialog,就像微信的分享等话不多说,直接上代码了自定义一个方法 bottomDialog = new Dialog(this, R.style.BottomDialog); //加载自己的布局 View contentView = LayoutInflater.from(this).inflate(R....原创 2019-09-15 23:53:43 · 958 阅读 · 0 评论 -
Android利用mob实现短信验证登录
首先要去官网申请一个应用,拿到对应的APPKEY以及APPSECRET附上直通车链接MobTech申请应用基本是秒批,然后就可以得到应用的APPKEY以及APPSECRET然后就是查看官方的文档直接跟着步骤走,可以不用手动下载sdk,导入这些它自动会帮你下载这里的话appkey和appSecret要更换成你刚刚申请应用对应的appkey和appSecret创建一个Applicaio...原创 2019-08-12 18:13:26 · 2046 阅读 · 1 评论 -
Android使用Sharepreferences实现简单的数据存储
Android实现数据存储的方式有五种,包括SQLite数据存储、网络存储、Sharepreferences存储、ContentProvider存储和文件存储这五种;接下来我们就拿Sharepreferences来实现一个简单的数据存储吧首先写一个简单的登陆界面<?xml version="1.0" encoding="utf-8"?><LinearLayout xmln...原创 2019-05-04 15:18:54 · 817 阅读 · 0 评论 -
Handle实现单击倒计时
当用户点击一个按钮时如果任意一个Acitivity没有响应5秒钟以上就会被强制关闭,因此我们需要另外起动一个线程来处理长耗时操作,而主线程则不受其影响,在耗时操作完结发送消息给主线程,主线程再做相应处理。那么线程之间的消息传递和异步处理用的就是Handler;接下来我们就用Handle来实现倒计时的功能首先写一个布局,一个Button和一个用来显示文本的TextView(代码我就不展示啦),之...原创 2019-04-27 16:24:36 · 368 阅读 · 0 评论 -
Android Studio对话框总结
在Android应用开发中,程序与用户交互的方式会直接影响到用户的使用体验,对话框又是与用户交互必不可少的部分。我们经常会需要在界面上弹出一个对话框,让用户点击对话框的某个按钮、选项,或者是输入一些文本,从而知道用户的做了什么操作,或是下达了什么指令。对话框又可以分为几类:1、普通对话框2、列表对话框3、单选对话框4、多选对话框5、等待对话框6、进度条对话框7、自定义对话框废话...原创 2019-04-14 17:01:36 · 8130 阅读 · 5 评论