自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

王项雨 的博客

Have a nice day!

  • 博客(152)
  • 收藏
  • 关注

原创 android apk无法安装及闪退问题

app在部分手机上(低版本)打不开或打开就闪退的问题之前做项目集成的是 环信的sdk ,环信的sdk 确实很好,客服 也很给力。但是在集成的过程中发现,apk 在手机上发布不了,要么就是,安装了 打不开,打开就闪退:问题有一下两方面1.之前做过一个环信的即时通讯,集成好环信的sdk之后在4.x的手机上就打开就闪退,,只能在5.x和6.x手机上打开app2.最近又碰到了同样的问题不过这次...

2017-03-30 10:43:32 21623 37

原创 android系统编译方式和流程

1.source build/envsetup.sh 脚本设置编译环境,加载一些编译方法例如 m、mm、mmm、lunch等2.lunch 指定要编译的那一套源码3.make -j8 开始编译开始编译从源码根目录的makefile文件开始,makefile中引用了 include build/core/main.mk文件在main.mk文件中引入了大量的mk文件,引用了源码的模块mk,这是系统编译的基石,其他模块的mk配置都是在这个基础上衍生的。4.android系统编译的mk大致分为三种,一种

2021-08-11 23:09:25 2673

原创 Android源码开发常用命令

monkey命令:adb shell monkey --pct-syskeys 0 --throttle 1500 --ignore-crashes --ignore-timeouts --monitor-native-crashes -v -v 1000000000根据包名查询apk在手机上的安装路径:dumpsys package 包名 | grep codePath修改 Settings.system.里面的参数:adb shell settings put system "key" 1.

2021-08-11 23:07:47 363

原创 android framework.jar导入as编译

libs下导入fw.jar,并且右键 依赖 导入的是这个文件下的 out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar 编译 build.gradle中添加dexOptions{ javaMaxHeapSize"2g" jumboMode =true}allprojects{ repositories{ jcenter()}...

2021-08-11 23:04:51 432

原创 android源码生成.keystore文件到as中编译

1.生成1.android 源码目录build\target\product\security 取platform.pk8 platform.x509.pem放到一个目录下将cmd控制台切换到该目录,分别执行以下命令即可:2//生成shared.priv.pem;openssl pkcs8 -in platform.pk8 -inform DER -outform PEM -out shared.priv.pem -nocrypt 3//生成pkcs12;openssl...

2021-08-11 22:59:59 318

原创 android uid 和 pid 的理解获取

1.理解uid:uid 对于 应用来说其实就是指我们当前应用是在那个 group 组内就是指这个shareuserid,一个组内的uid相同,,并且具有相同的uid的应用才能共享用户内存pid:是指每个进程在liunx下的 进程的id 是唯一的。2.获取获取uid:PackageManager pm = getPackageManager();ApplicationInfo ai = pm.getApplicationInfo("com.speedsoftware.roote.

2021-08-11 22:56:56 774

原创 “T” 型知识计划阶段总结

工作四年多了,也一直在努力学习,每个人都有一套自己的学习方式,今天把自己一直以来的自己学习过程中的知识架构拿出来。也是自己知识体系学习的一个段落。1.知识体系架构图到目前位置自己对于学习的总结大致分为这几个方式:把知识分模块,把不同知识点都模块化 每个模块涉及到那些知识点,化整体为具体 根据分好的模块点,系统的学习,不要今天学这块,明天学那块 善于总结不管是我们自己写代码,还是学习别人的代码,其实不管多复杂的代码,其实都是用不同模块的知识点组成的。模块就是基础,基础打好了,学习别人代

2020-10-26 09:37:23 460

原创 Java / Android 监控进程Crash异常

在Android/Java开发中经常遇到的就是程序突然崩溃了,这中崩溃是如何被捕获并且打印到控制面板的呢。抛出异常之后app就崩溃了,而不是整个系统崩溃是为什么?今天就从Android的角度来看看一个Android系统是如何崩溃的。1.异常监控的注册从Android系统启动流程知道,systemserver和每个app进程的启动都是通过Zygote进程孵化的。从Launcher桌面点击启动一个未启动过的app时,就会触发zygote孵化一个新的进程,从这里开始扯出系统对crash的处理。对于进程的创

2020-06-09 19:02:47 1638

原创 Android 插件化换肤实现(系列 1、2原理篇、3实现篇)

之前写过换肤的原理1、2,今天终于把换肤的实现给完成了。之前的原理篇地址:源码学习《3》Layout.xml 的解析和 xml 标签生成 View 对象的过程(App 换肤原理 1)源码学习《4》Launcher 启动 app 和 apk 资源的加载流程 (App 换肤原理 2)在对原理的理解的基础上,开始实现换肤的功能。分析:插件化换肤其实就是用我们宿主 app 去加载插件 apk 中的资源文件,简单来说就是我们拿到每个Activity中的需要换肤的View对象,然后对View对象进行set值,这个

2020-05-13 15:04:53 1623

原创 Android 主线程到底是什么、如何抛出ANR

作为 android 者对主线程的操作在开发中是非常频繁的,主线程是非常重要的线程,因为我们所有的UI界面都是通过主线程更新、绘制的。所以我们要足够了解他。从源码的角度看看为何ui必须在主线程更新、直接创建的handler为何就把线程给切换到了主线程呢?、主线程阻塞anr是如何抛出的?1.Android 主线程是在哪里创建的?android的主线程是在 app 进程创建时候就创建了,即当系...

2020-05-08 17:40:17 1464

原创 一个 Activity 窗口的创建和显示流程

在android开发中对于应用层开发来说创建窗口的方式很简单,直接通过创建Activity、Dialog、Toast等创建一个窗口显示到手机屏幕上,对我们开发者来说方便了不少。但是创建一个窗口的方式可不止这些方式,还有从底层直接起一个窗口,本章主要分析Activity是如何显示到屏幕上的。一个activity的显示大致分为三个层次: UI框架层 WMS层 SurfaceFlinger...

2020-04-30 16:20:40 783

原创 Android 动画的工作原理

在android系统中动画分为两种分别是基础动画和属性动画。对于动画的工作原理主要涉及到的是基础动画和属性动画的实现。本章主要分两大块:基础动画和属性动画1.基础动画对于基础动画的实现主要是嵌套在View的绘制流程中的,基础动画主要有旋转RotatleAnimation,缩放ScaleAnimation,透明AlphaAnimation,平移TranslateAnimation等都是An...

2020-04-28 19:17:57 1616 3

原创 软件测试

1.软件测试流程2.测试用例的写法2.http请求测试3.软件性能用户体验(KPI,启动速度,内存,卡顿)4.svn,jira单子5.CTS,GTS6.偶现,必现问题的处理7.linux adb 命令 (log日志,push文件,查看目录)1.软件测试的定义:在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。2.软件测试的...

2020-03-24 16:30:08 1065

原创 多线程并发 (七) 线程池

很高兴坚持学到了多线程并发计划中的最后一个知识点线程池的使用和原理。其实对线程池不陌生,只是简单的会使用,对于具体的功能实现,一直还是没有去看,最近乘着多线程并发的学习,来把线程池给记录下来。1.线程池引入、优点如果在一个任务量非常多,但是任务又非常短小,如果我们在处理这种任务时,为每个任务都创建一个线程,这样就会创建并且销毁线程消耗资源、浪费时间。为了充分发挥线程的利用价值,所以在...

2020-02-24 13:54:10 808

原创 多线程并发 (六) 了解死锁

总结:多线程并发 (一) 了解 Java 虚拟机 - JVM学习知道了创建一个线程会触发JVM创建一个私有的虚拟机栈、程序计数器,当前的虚拟机栈内存就是当前线程的运行内存,程序计数器就是记录当前线程运行的代码的地址。 多线程并发 (二) 了解 Thread学习了线程的运行状态、线程的创建方式、调度原理等。 多线程并发 (三) 锁 synchronized、volatile学习知道了多...

2020-01-17 17:22:37 3466 5

原创 多线程并发 (五) ReentrantLock 使用和源码

章节:多线程并发 (一) 了解 Java 虚拟机 - JVM多线程并发 (二) 了解 Thread多线程并发 (三) 锁 synchronized、volatile多线程并发 (四) 了解原子类 AtomicXX 属性地址偏移量,CAS机制多线程并发 (五) ReentrantLock 使用和源码对于多线程并发学过了并发产生的原因,并发产生的问题,并发产生问题的解决方式,对于之前介绍的并发问题...

2020-01-07 17:06:37 2025 2

原创 多线程并发 (四) 了解原子类 AtomicXX 属性地址偏移量,CAS机制

章节:多线程并发 (一) 了解 Java 虚拟机 - JVM多线程并发 (二) 了解 Thread多线程并发 (三) 锁 synchronized、volatile多线程并发 (四) 了解原子类 AtomicXX 属性地址偏移量,CAS机制多线程并发 (五) ReentrantLock 使用和源码了解了Java虚拟机,线程,锁,volatile概念之后对多线程开发算是比较熟悉了。解决线程并发...

2020-01-02 17:08:51 7269 1

原创 多线程并发 (三) 锁 synchronized、volatile

章节:多线程并发 (一) 了解 Java 虚拟机 - JVM多线程并发 (二) 了解 Thread多线程并发 (三) 锁 synchronized、volatile多线程并发 (四) 了解原子类 AtomicXX 属性地址偏移量,CAS机制多线程并发 (五) ReentrantLock 使用和源码通过前两篇学习引出两个问题 为什么会有锁?锁的作用是什么?第一个问题如果真正理解了第一篇文章,...

2019-12-31 15:51:21 3620 7

原创 多线程并发 (二) 了解 Thread

章节:多线程并发 (一) 了解 Java 虚拟机 - JVM多线程并发 (二) 了解 Thread多线程并发 (三) 锁 synchronized、volatile多线程并发 (四) 了解原子类 AtomicXX 属性地址偏移量,CAS机制多线程并发 (五) ReentrantLock 使用和源码通过上一篇多线程并发 (一) 了解 Java 虚拟机 - JVM了解了java 虚拟机的构成...

2019-12-30 14:46:20 7519 19

原创 多线程并发 (一) 了解 Java 虚拟机 - JVM

章节:多线程并发 (一) 了解 Java 虚拟机 - JVM多线程并发 (二) 了解 Thread多线程并发 (三) 锁 synchronized、volatile多线程并发 (四) 了解原子类 AtomicXX 属性地址偏移量,CAS机制多线程并发 (五) ReentrantLock 使用和源码 目录1.Java 虚拟机执行流程2.Java虚拟机结构3.运行时...

2019-12-27 14:30:29 4384 4

原创 源码学习《8》Handler,Message,MessageQueue,Looper,ThreadLocal 通讯机制

关于Handler通讯之前也看了好几遍,记忆慢慢模糊了,希望通过这次详细的整理能记忆的更久。本篇涉及的类比较多,为了更好的记忆,我采用了先整体在局部的叙事方式。先整体把流程梳理,再详细说明流程中涉及到的某些类。首先通过以往的章节源码学习,我们对一下流程应该都熟悉了init 进程,zygote进程,systemserver进程的启动 PMS启动后解析manifest.xml文件数据到app...

2019-12-17 18:47:23 533

原创 源码学习《7》Classloader 类加载机制 (热修复 2)实现篇

通过上一篇对Classloader的分析,对classloader的原理有了初步的了解。今天就在了解的基础上实现类的热修复。在做热修复之前首先我们来看看 MutilDexEnable 这个属性。1. MutilDexEnable 指定class文件到dex中我们知道如果我们项目很大,方法超过了65535 个方法数,就需要使用分包处理,大致是这样的android { defau...

2019-12-13 16:06:26 704

原创 源码学习《6》Classloader 类加载机制 (热修复 1)原理篇

不管是android 还是java项目我们知道我们的java文件都会通过 javac命令编译成二进制class文件,然后虚拟机再通过classloader类对class文件进行加载生成Class对象。其中java 和 android的classloader实现上还是有区别的,java主要加载的是 .class 而 android加载的是.dex 文件。本篇主要分析android classload...

2019-12-12 14:59:36 786

原创 源码学习《5》PMS 的启动 和 AndroidManifast.xml 解析流程

通过前两篇文章学习我们大致了解了,apk 资源的加载 和 XML 标签创建对象的过程,今天就来学习一下 Android app启动后Manifast中的 标签是怎么被识别的,activity / service等四大组件对象的创建 android 8.0。Manifast.xml的加载和解析? Activity 等四大组件的包装对象的创建?其实Manifast是在PackageManage...

2019-11-18 18:21:24 656 1

原创 源码学习《4》Launcher 启动 app 和 apk 资源的加载流程 (App 换肤原理 2)

Android开发中我们的apk资源是如何被加载到的,我们知道当我们点击桌面launcher 的图标拉起我们的app显示我们的页面资源。这个是如何被加载的呢?今天就引出两个看源码的问题 基于 8.0 源码:不同版本源码实现略有差异。Launcher启动app的流程? Apk资源是如何被加载到页面上的?1. Launcher 启动app的流程做过 launcher app 的同学都知...

2019-11-15 13:47:36 1256

原创 源码学习《3》Layout.xml 的解析和 xml 标签生成 View 对象的过程(App 换肤原理 1)

今天要学习源码的两个问题:Layout.xml布局是怎么加载解析的 Layout.xml中的 view 标签又是怎么被转化成对象的针对这两个问题引出源码学习的流程,带着问题去看源码。总体流程:问题 1 布局是怎么加载的 :首先我们最熟悉的代码肯定是:public class MainActivity extends AppCompatActivity { @...

2019-11-08 17:40:10 1014

原创 Android中的反射

在android开发中经常会用到反射的知识,举几个反射的例子分析反射。在android中有些源码中的类是hide的or私有的,我们不能够直接得到具体的对象,但是这些类在我们应用程序运行之后他的对象确实是被创建并且存在于内存中的,只是是私有的,我们直接拿不到,所以就需要通过反射去得到这个对象,但是我们通过反射得到的对象并不是我们运行程序中代码使用的对象,反射得到的是新的对象,所以我们就需要把这个...

2019-09-10 16:12:11 895 2

原创 Java虚拟机引发的连环血案

(个人总结系列)我们是不是经常在回顾java虚拟机结构,每个结构的作用,线程并发,锁,volatile,垃圾回收,我也是看了就忘,最近就把这些知识点给串起来了,这样能增强记忆,也便于我们回顾知识点。由于个人原因,平时很忙,就不会去把每个知识点都给大家分析到位,有些不会的知识点可以根据图去搜索,然后学习,学完之后你就知道为什么一个一个的知识点可以被引出来。《01》每个线程在创建的...

2019-09-06 15:26:53 488 1

原创 Android 进阶知识归纳

Java相关:1.多线程并发,锁,线程池原理 https://www.cnblogs.com/skywang12345/p/java_threads_category.html为什么notify(), wait()等函数定义在Object中,而不是Thread中? wait(),notify(),notifyAll(),yeild(),join(),sleep(),interr...

2019-09-02 14:23:45 1184 1

原创 Android 绘制录音波浪 + 拓展: 让“字体”迎波而浪

效果图: 1.绘制录音曲线效果公式和网站介绍 我们要绘制这种效果,最直观方便的方式就是采用三角函数的cos/sin的函数,首先我们需要一个重要的网站: Desmos:https://www.desmos.com/calculator可以把我们的三角函数以图刑的方式显示,公式:y=Asin(ωx+φ)...

2019-08-23 15:29:37 1646

原创 源码学习总结《2》Android 应用程序进程启动

通过上一篇学习android系统启动我们了解到了,init进程启动,zygote进程启动,systemserve进程启动,AMS等服务启动过程,最后启动第一个launcher 桌面进程启动。我们还有一个分支没有学习,就是应用进程的创建,今天就来学习应用进程的启动流程。应用进程的启动可分为两部分:AMS请求zygote进程创建应用进程 zygote进程创建应用进程1.AMS请求zygote创...

2019-08-21 16:12:03 572 2

原创 Java8和enum枚举简单使用 优化代码

1.减少大量的 if/else,switch/case使用枚举,可以减少我们的判断,枚举也能简单封装成策略模式public enum Season { SPRING(1){ @Override public void run() { Log.i("Season","SPRING"); } },SU...

2019-08-09 15:27:17 4003 2

原创 源码学习总结《1》Android 系统启动流程

对于NDK开发学习已经完结,并且成功的做出相应的案例,银行卡/身份证卡号识别,现在呢,伟大的学习路程又要开始了,接下来就是要学习系统源码framework相关的知识。(只做个人学习总结,学过就留点痕迹~~,不做长篇大论,谢谢 ^_^ )对于android源码学习,最开始肯定要了解以下android系统是怎么启动的,这是对android系统启动流程学习的个人总结,第一次学习源码还是要有个辅助 比...

2019-08-05 18:22:41 447

原创 OpenCv NDK 银行卡/身份证号识别(4) 基于openCv SVM的机械学习模型训练识别

上一篇我们把银行卡号给分割提取出来,为我们本篇机械模型训练提供了素材,因为我们最终是要把分割出的字符图片给识别出他是具体的数字几,而不能就仅仅把截取到的图片展示出来,图片他仅仅还是图片,所以我们要知道具体的图片对应的数字,所以就用到了,机械学习中的SVM 支持向量积的分类器。百度百科支持向量机(Support Vector Machine, SVM)是一类按监督学习(supervised ...

2019-07-27 14:43:27 1627

原创 OpenCv NDK 银行卡/身份证号识别(3) 银行卡/身份证图像处理和卡号区域剪切

通过前两篇我们已经对Opencv有所了解了,接下来就要真正的来处理我们的图像,然后把卡号给提取出来。首先我们先简单分析以下银行卡然后把处理流程列出来:由上图我们很容易知道既然我们要找到卡号,银行卡的外边轮廓,然后根据比例找到卡号的位置,处理流程:把采集到的图片根据银行卡边缘进行剪切,得到银行卡的区域 根据比例把卡号区域剪切出来,得到卡号的区域(具体怎么截取自己可以想不同的算法识...

2019-07-26 16:16:07 4076 14

原创 OpenCv NDK 银行卡/身份证号识别(2) Bitmap和Mat相互转化

我们都知道在我们android程序中一个图片的表达是使用的Bitamp来存储的,而在Opencv中图片的存储是Mat矩阵的形式。所以如果我们想把我们android的图片传给opencv,就要先把bitmap转成Mat类型,所以我们先来了解以下Mat是个什么东西。1.Mat简单介绍一个图片都是有很多像素点组成的,所以mat矩阵就是保存我们这个图片的像素点的集合。每个像素点又都是又RGBA...

2019-07-26 14:55:00 1354

原创 OpenCv NDK 银行卡/身份证号识别(1) OpenCv NDK项目集成

最近一直在学习ndk开发相关的知识点,其实也是一路迷茫不知道从哪里下手,其实想做ndk相关的开发还是要有一定的c和c++的基础,特别是对指针,结构体,c++的类,函数指针,命名空间,&引用等等,防止在开发的过程中出现问题而不知到具体原因。之前也有几篇文章对c和c++记录了一些容易错和重要的知识点:1.JNI/NDK 开发 C/C++ 典型基础知识点2.JNI/NDK开发 C 调用...

2019-07-26 10:09:41 1505 2

原创 JNI/NDK开发 配置CMakelist文件加载第三方 so

我们知道我们正常加载so文件都是通过 static { System.loadLibrary("native-lib"); }这是我们纯加载so来做项目,项目没有配置CMakelist文件,如果配置了CMakelist文件我们加载so就不是这样的了,加载方式如下:1. 首先我们使用的CMakelist开发的所以项目中会有这两个文件:2.如果我们要加...

2019-07-12 20:26:39 1828 5

原创 JNI/NDK开发 C 调用java方法

android NDK开发方式有很多种,随着android studio的崛起谷歌官方的开发方式是 cmake 形式的开发,在eclpse时代大多数使用的是android.mk等方式。今天主要使用cmake方式学习整个流程。1.创建c/c++项目在我们创建项目的时候我们可以勾选上support c/c++,这样我们创建的项目就有默认支持了cmake,add_library( # S...

2019-07-03 15:36:02 712 1

原创 JNI/NDK 开发 C/C++ 典型基础知识点

1.引入动态裤// path 路径:加载一个具体路径下的so库,可以是从服务器下载下来的(必须要下载到data/data/目录下面)。System.load(path);//path 加载本地 lib下面的so库。System.loadLibrary(path);2.c语言中方法不能重载,c++中方法能重载。3.JNIEnv对象JNIEnv:在c中是结构体指针(方法中是二...

2019-07-03 14:58:29 888 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除