android 知识点
文章平均质量分 70
过儿丶
你只看到我的帅
展开
-
23种设计模式思想
变化当中有稳定的部分才会引入设计模式0.简单工厂模式:这其实不算是设计模式,只是一种编码习惯。相当于if..else.. switch..case..比如做一个计算器时,type == “+”那么执行两个变量相加。type == “-”执行两个变量相减意图:通过一个方法,一个参数,执行不同的逻辑1.工厂方法模式:比如:公司新来俩程序员一个搞android的,一个搞ios的,第一天。老板叫你俩赶紧把环境配好。所有程序员都有(都实现了)配环境的这个技能(这个就可以抽象出来一个接口原创 2022-05-08 23:00:10 · 636 阅读 · 0 评论 -
Android 10 11 分区存储适配
Android10是分区存储的过度版本,不建议开启分区存储。我们可以android:requestLegacyExternalStorage="true"来关闭Andorid10的分区存储。<application android:requestLegacyExternalStorage="true"></application>ANDROID11适配Android11分区存储强制开启,分区存储开启后,存在两个问题 一个是比如文件管理器咋搞,二是应用的原来的文转载 2022-01-08 18:04:03 · 1157 阅读 · 0 评论 -
Android 5 - 9主要更新
Android5.0(ART虚拟机)不需要适配Android6.0(动态权限)1.动态权限适配:对于危险权限,需要在使用之前,弹窗获取权限,(xxpermisiton,rxpermission等)权限适配三连问Q: 是否 Android 6.0 所有权限都需要动态申请?A: 不是。只有属于危险权限的才需要申请。Q: 危险权限有哪些?A: 见下面“危险权限分组说明”Q: 危险权限是否需要一个一个申请?A: 在 Android 6.0 ~ Android 8.0,不需要。如果原创 2022-01-08 16:16:16 · 1620 阅读 · 1 评论 -
Android内存优化
内存优化就是从下面几点入手一、解决内存泄漏0.内存泄漏主要是activity,等context泄漏,再销毁后依然有其他对象持有context的引用,导致无法回收1.内存泄漏检测工具LeakCanary(原理是hook activity声明周期,在ondestroy后开启线程检测引用,过一段时间gc,gc后如果还存在引用就说明内存泄漏了)2.单例导致内存泄漏(尽量使用context.getApplicationContext 或者适当时候回收context)...原创 2022-01-08 14:44:36 · 1069 阅读 · 0 评论 -
Kotlin Mvp 协程 Retrofit整合
附MVP模板生成器1.BaseModuleActivity处理loading相关逻辑2.BaseModuleModel提供mRepositoryManager处理网络请求3.BaseMoulePresenter提供一个绑定当前界面生命周期的CoroutineScope保证在当前界面安全的使用协程生成代码步骤:1.选择包名目录2.右键New->Activity->Arms 全家桶 插件版 - 原始版Kotlin一键生成MVP模板...原创 2021-12-21 17:30:58 · 1267 阅读 · 0 评论 -
android 让你爱上写dialog
感觉每次写dialog都很痛苦,虽然能写出来,但每次都要新建一个dialog类,写里面的布局,写里面的逻辑,总感觉很麻烦。方案核心就是让你只关注布局和以及各种界面上的操作,dialog本身不处理任何view和数据更多关于dialog的设置,可以自行扩展Java和Kotlin版本功能一样Java版本:使用: EasyDialog dialog; private void useDialog() { dialog = new Easy.原创 2021-12-07 13:42:04 · 1731 阅读 · 0 评论 -
Android 获取其他APK 的jar包
不是所有的jar包都是开源的,有时候遇到商业版就可以试试。获取dex之后1.获取dex文件,获取之后可以根据需要修改dex文件2.dex2jar3.解开jar jar xf old.jar4.确定jar包需要的全部的类 并复制另一个同名文件夹,5.再编译需要的文件夹 为 jar jar cf newJar.jarsourceDir6.添加使用jar,复制需要的so库其实难点只在于获取dex,这个该花钱花钱,市面脱修都挺贵1000以上了。有低价的下面留言。。...原创 2021-11-18 01:03:52 · 1871 阅读 · 0 评论 -
Android应用的PathClassLoader起源API 29
1.classloader基本概念1.所有Android系统自身的类都是由BootClassLoader加载的2.自己写的apk是由PathClassLoader来加载的3.常说的插件化,热修复 都是基于dexclassloader或者pathclassloader实现的2.PathClassLoaderAndroid系统启动流程一篇里说过启动过程中会创建第一个PathClassLoader那个classloader与这篇文章讨论的不一样ClassLoader解析(二):Andr原创 2021-11-16 22:06:15 · 2926 阅读 · 0 评论 -
Android js交互这一篇就够
完整代码:TestJs: android js交互sample1.Android调用JSa.不需要获取返回值java:webView.loadUrl("javascript:add(1 , 3)");js: function add(p1 , p2) { var r = p1 + p2; alert(r); }webView.setWebChromeClient(new WebChromeClie原创 2021-11-01 14:40:21 · 1917 阅读 · 0 评论 -
分析APP的安装流程 API29
先总结一下安装流程,以及比较重要的类PackageInstallerActivity.java:在文件管理器里点击apk后就会调用该类,主要用于显示要安装的apk的一些权限信息。InstallAppProgress.java:当看完所有权限后,点安装后就会调用该类,用于显示安装进度,这时候PackageManagerService就在默默的安装应用。ApplicationPackageManager.java:这是类是PackageMa...原创 2021-09-28 23:46:23 · 1045 阅读 · 0 评论 -
分析 Android 系统启动流程
1.启动电源以及系统启动当电源按下时引导芯片代码开始从预定义的地方(固化在ROM)开始执行。加载引导程序Bootloader到RAM,然后执行。2.引导程序BootLoader引导程序BootLoader是在Android操作系统开始运行前的一个小程序,它的主要作用是把系统OS拉起来并运行。3.Linux内核启动内核启动时,设置缓存、被保护存储器、计划列表、加载驱动。当内核完成系统设置,它首先在系统文件中寻找init.rc文件,并启动ini...原创 2021-09-26 21:49:26 · 104 阅读 · 0 评论 -
热修复比较
热修复框架种类和对比1.资源修复有2种方案a.instantRun方案丶通过反射创建一个新的assetManager丶通过反射调用addAssetPath方法加载外部的资源丶通过反射修复每一个activity的Resource中的mAssets字段(所有引用到地方都改)b.SoPhix方案这个是 Sophix 采用的方案,原理是构造一个 package id 为 0x66 的资源包,只含有改变的资源,将其直接添加到原有的 AssetManager 中,这样不会与原来的原创 2021-04-14 14:30:26 · 213 阅读 · 0 评论 -
Android 热修复原理
转https://zhuanlan.zhihu.com/p/75465215预备知识了解 android 基本开发 了解 ClassLoader 相关知识看完本文可以达到什么程度了解插件化常见的实现原理阅读前准备工作cloneCommonTec项目,其中 hotfix 和 patch 是热修复代码 示例代码基于 AndFix,NuWa,Robust 进行了调整,抽取主要部分用来讲解原理。文章概览一、热修复和插件化插件化和热修复的原理,都是动态加载 dex/apk 中...转载 2021-04-13 21:47:42 · 171 阅读 · 0 评论 -
Android的classloader
先做一个demo,代码如下public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.v("wanbai"原创 2021-04-13 00:03:33 · 1790 阅读 · 0 评论 -
Android安全防护实用办法
最近一直做安全方面的业务,有一些理解总结一下安全防护的有效方式1.混淆 ★★★★★最有用的方式之一,必须要做,a.注意配置字典,最好不要用特殊字符,jadx反混淆之后,特殊字符会很被改写,最好是oO0这个字典,github有很多,b.形参混淆,局部变量混淆,这些东西默认是不会被混淆的,需要人工来做2.加固 ★★★免费的加固,基本上不管您是哪一家,都是白给,脱壳和加壳的技术一直是在对抗发展,但是免费的壳,用处十分有限,现在的youpk方案脱壳机,对于免费壳都是一键...原创 2021-01-11 18:30:00 · 1378 阅读 · 0 评论 -
学习一下Context
这个图镇的住吧Context是抽象类,2个子类,ContextImp和ContextWrapper。具体干活的流程是,ContextWrapper指派ContextImp去干,直接mBase.xxx();Context里面的mBase就是ComtexImpl的实例化对象。所以在Activity中,或者application,service中调用getBaseContext都是获取的是他们的ContextImpl对象。1.以appilication为例子a.ActivityTh..原创 2021-01-11 14:20:50 · 474 阅读 · 6 评论 -
Android 录制以及播放wav
不好找,我总结了一下代码如下录制类:开始AudioRecordManager.getInstance().startRecord(wavFilePath , pcmFilePath);停止AudioRecordManager.getInstance().stopRecord();package cn.amao.cleanhome.mvp.ui.activity;import android.media.AudioAttributes;import android.medi原创 2020-05-21 16:33:45 · 4218 阅读 · 0 评论 -
百度高德地图比较
很久之前一直用的百度地图,那个时候百度地图还可以。高德也还没咋流行起来。前两天有个app有需要地图的东西,百度地图研究了半天,api,开发包乱的一笔。顺手打开高德api一看,所有api清清楚楚。就一个jar包2个so解决常规的应用的地图需求百度地图gun犊子吧高德他不香么...原创 2020-05-03 13:07:36 · 487 阅读 · 0 评论 -
Android 如何保证token安全性
1.首先显示的‘token’最好设计成一直变化的,2.防止token被盗后改参数3.https加密链接防止直接抓包1.2总结为下图:实际上token一直没有变,只是显示的‘token’在变化a.首先对参数加密b.参数加密的结果对token加密...原创 2020-04-16 02:26:27 · 1247 阅读 · 2 评论 -
android Xutils3网络请求封装
使用xutils需在MyApplication里初始化x.Ext.init(this);x.Ext.setDebug(true); // 是否输出debug日志package com.recylerviewdemo;import android.app.Activity;import android.os.Bundle;import android.util.Log;import an原创 2016-10-18 17:36:25 · 2998 阅读 · 0 评论 -
Android全面屏适配(非刘海适配)
全面屏的意思是纵横比大于16:9的手机,不适配的话上下会留有空间,显示黑条。影响视觉体验。适配全面屏需改3个地方1.声明屏幕最大纵横比:# 设置最大高宽比为 2.1<application ...> <meta-data android:name="android.max_aspect" ...原创 2018-10-08 15:06:51 · 452 阅读 · 0 评论 -
Android 7.0 适配
首先android 7.0 Android N Api241.最重要的,文件访问权限的更改,要求我们在应用间共享文件这一块,必须做适配。否则会异常适配办法就是使用FileProvider:第一步:在mainifest清单文件中注册provider<provider android:name="android.support.v4.content.FileProvi...原创 2018-10-08 10:28:25 · 142 阅读 · 0 评论 -
Android 6.0 适配
首先知道 android6.0 、Marshmallow 、Api23需要适配以下几个地方。1.最重要的,肯定是动态权限的申请(可以用框架嘛)2.不重要的,sdk中移除了httpclient,推荐HttpUrlConnection(用xutils,okhttp不受影响)3.通知部分,移除了Notification.setLatestEventInfo()方法。用Notificati...原创 2018-10-08 09:57:41 · 225 阅读 · 0 评论 -
Android根据经纬度获取位置信息
Android内部是支持这个操作的,不需要借助任何的第三方工具主要就是Geocoder这个类。 下面是工具类全部代码。import android.content.Context;import android.location.Address;import android.location.Geocoder;import android.util.Log;import a...原创 2018-09-07 17:04:50 · 7126 阅读 · 7 评论 -
关于Binder,作为应用开发者你需要知道的全部
转自https://www.jianshu.com/p/062a6e4f5cbe结合自身本身对Binder的理解,可以总结为2.4Binder的理解其实就是理解Client、server、Binder、ServiceManager之间的关系 为什么要理解Binder?一般Android应用开发很少直接用到跨进程信通信(IPC),但如果你想知道:App是如何启动并初始化的...转载 2018-08-09 10:56:36 · 356 阅读 · 0 评论 -
Dagger2和MVParms的学习
代码地址:稍后Dagger2学习笔记一:/** * dagger2理解: * 1.@Inject标记的属性,表示这个属性将会被注入到当前类中---提供注入数据 * 2.@Inject标记的构造方法,表示在注入过程中将会调用这个方法来实例化 * 3.@Module标记的是类 * 4.@Module也表示---提供注入数据的模块 * 5.@Module的一般作用是提供一个 无法直接使用@I...原创 2018-06-15 11:07:01 · 1333 阅读 · 0 评论 -
android开发必备-Android学习网站
原文http://www.qdaily.com/articles/35398.html上不去的网址:http://developer.android.com/reference替换成这样子:http://developer.android.google.cn/reference12 月 8 日,Google 在北京举办了一场规模空前的开发者活动,推出了三个不需科学上网就能访问的子站点。develo...转载 2018-07-06 17:23:12 · 3324 阅读 · 0 评论 -
Android 刘海屏适配
转载:原文链接一、简介随着 Apple 发布 iPhone X 之后,各大手机厂商也开始模仿这种刘海屏的设计,而且刘海屏手机的用户也是越来越大,前段时间将项目进行了所有主流厂商的刘海屏手机的适配,以便让刘海屏手机的用户也能有更好的体验。二、刘海屏造成的 UI 显示问题刘海屏手机因为比平常的手机多了一块顶部的遮挡性刘海,所以会造成顶部 Toolbar 以及搜索框的遮挡,而且有些厂商的...转载 2018-10-09 10:04:11 · 703 阅读 · 0 评论 -
Android技能树 — LayoutInflater Factory小结
原文前言很久没写文章了,所以打算水一篇文章,毕竟这方面知识的文章有很多很多。前段时间流行起来了突然不愿意写Shape,Selector文件的文章,然后各种方案,编写自定义View等。那时候大家应该都看到了一篇:无需自定义View,彻底解放shape,selector吧。我发现这个想法挺好的,所以今天就一步步来讲解下跟这个方案有关的相关基础知识点,看完后大家基本就会懂了,然后可以自己编写...转载 2018-11-21 10:23:07 · 218 阅读 · 1 评论 -
d2j-dex2jar classes.dex报错
执行上述操作时报Detail Error Information in File .\classes-error.zipPlease report this file to http://code.google.com/p/dex2jar/issues/entry if possible.打开error.zip发现都报这个错误:java.lang.RuntimeException: can...原创 2019-07-02 17:18:49 · 6774 阅读 · 7 评论 -
greendao使用详解
1.首先学简单的配置https://www.jianshu.com/p/ec37ea99ef69,https://www.jianshu.com/p/53083f782ea22.简单的增删改查https://www.jianshu.com/p/53083f782ea23.稍复杂的查QueryBuilder很重要1.且查询(下面例子查username == xxx且use...原创 2019-03-27 18:07:24 · 1262 阅读 · 0 评论 -
Android Studio 项目External Libraries的jar包丢失导致的编译出错问题
主要是针对 support v7 或者v4版本如果你曾经在产生冲突的时候手动删除过v7,v4下的jar包现在想依赖某个版本的v7,或者v4.老是依赖不上去。重装studio!删除所有的缓存文件,除了sdk文件经验:不要手动删除exteneal libraries中的jar包,手动调整gradle中的依赖文件,手动调整正确了,就不会冲突了。...原创 2019-03-27 17:54:36 · 1052 阅读 · 0 评论 -
android打开library或aar中activity的问题
打开library或者aar中的activity时可能会遇到各种问题。先科普一下。1.一般情况下,library或者aar中的Mainifest会自动合并到app的manifest中所以一般不用自己去app的manifest中注册。2.启动activity的方式也不用去用什么隐式启动,setclassName().setConpentXXX等等这些,就普通的startActiv...原创 2019-03-06 14:16:28 · 6487 阅读 · 0 评论 -
Dex分包Android-Easy-MultiDex、规则
Android-Easy-MultiDex是基于DexKnifePlugin建议先熟悉一下这2个东西分包总共有2个地方,可以配置一个app的build.gradle、一个是dexknife.txt一、在build.gradle的android{}插入这段代码,表示计算这几个activity的依赖,并加入maindexlist中/需要加入主dex的Activity列表 de...原创 2019-03-06 11:22:16 · 446 阅读 · 0 评论 -
Android自动化测试Appium
框架选择主流的自动化测试框架官方的是Instrumentation,主流的是appium、Robotium(阿里移动测试是需要这2种脚本)环境搭建需要以下几个东西1.jre1.8(配置环境变量)2.android SDK 8.0以下(配置环境变量tools,platform-tools)3.node.js(环境变量)4.appiumForWindows (环境变量-...原创 2019-02-15 15:30:48 · 315 阅读 · 1 评论 -
判断2个list中是否有相同的数据(相交)Collections.disjoint
群里一个老哥的问题:请教一个问题,两个List,一个是服务端数据,一个是本地数据,如何判断本地数据中没有包含服务端的数据,因为每次请求服务器,服务端返回的List是一个新的内存地址,所以本地List.contains()方法无效,我应该怎么比对----这是很常见的问题有人回答重写实体类,equals方法,有人回答挨个取出来对比。有人提到 Collections.disjoint方法,...原创 2018-12-19 11:54:36 · 27254 阅读 · 7 评论 -
App在后台被杀死后重启-重进首页方法
感谢这位哥的思路。这个问题很常见,基本所有app都会遇到这个问题。但是很多开发者都没有处理。问题的起因:我的app在进入后台后一段时间,可能被系统干掉了,然后通过多任务键,或者图标再点进去操作,出现xxId为null经过一番探索发现:app在被系统干掉后,重新进入,是会实例出所有的界面(因为他们都重写了onsaveInstance方法),但是这个界面所有的变量都变为null了(如果...原创 2018-12-26 17:26:00 · 8192 阅读 · 0 评论 -
Android热修复,热更新 ,增量更新,插件化之间的区别
感谢这位老哥:https://www.jianshu.com/p/704cac3eb13d热修复:强调的是修改线上版本的bug,用技术去实现不更新整个apk的条件下,修改掉bug。涉及到类的加载。比如可以new 一个BaseDexClassLoader动态的去加载修复apk的dex文件,再合并到正在运行PathClassLoader中(这只是其中一种思路)目前主流的热修复框架阿里And...原创 2018-05-29 23:05:41 · 8745 阅读 · 0 评论 -
android插件化准备,启动一个没有在Mainifest中配置的Activity
首先是跟这大哥学的https://www.jianshu.com/p/e359fafe5c29牛逼呀。这里我们先做启动当前应用里面没有在Mainifest中配置的activity。首先你需要对动态代理和activity启动流程有点了解。请看前2篇播控总结就在这里:代码:https://gitee.com/u2b/NDKTEST/tree/master/hooklaunchtt...原创 2018-05-29 17:45:00 · 408 阅读 · 0 评论 -
Activity启动流程
最近在学插件化相关的,要求启动一个没有安装的app中的activity(没有AndroidManifest注册),这就要求对代理模式和activity的启动流程有一定的了解。hook正常的activity启动流程。一、先看源码,把流程弄出来。a,首先当我们startActivity(xIntent)时.会调用Activity中的startActivity方法b,这个方法调用自己的重载方法c,由于上...原创 2018-05-28 23:34:50 · 474 阅读 · 0 评论