![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
android
文章平均质量分 80
二仪式
写一些自己研究过的东西。
展开
-
Go语言实战 读书笔记
这篇文章是我看《Go语言实战》时记得备忘录,如果有不对的地方,请大家指正。go语言定性Go(又称Golang)是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。GO是静态类型语言,但是有动态语言的感觉,静态类型的语言就是可以在编译的时候检查出来隐藏的大多数问题,动态语言的感觉就是有很多的包可以使用,写起来的效率很高。Go 语言是一种静态类型的编程语言。这意味着,编译器需要在编译时知晓程序里每个值的类型。如果提前知道类型信息,编译器就可以确保程序合理地使用值。这有助于减原创 2021-01-08 11:21:39 · 350 阅读 · 0 评论 -
快速生成单例代码模版
目的最好的程序员一定是最懒的程序员,当你厌烦了敲样板代码,不想让宝贵的时间浪费在已经滚瓜烂熟的语句,那么不妨试一下使用模版代码。效果原理实际就是用了android studio自带的liveTemplate功能。步骤首先打开Settings->Editor->Live Template->点击红色圆圈处新增将以下代码复制到 Template text:编辑框中...原创 2020-03-12 20:55:37 · 378 阅读 · 1 评论 -
maven publish aar 打包第三依赖方法
问题描述aar打包到maven库之后,引用的时候发现报错,具体原因是aar包中的第三方库的类没有找到。问题分析:通过maven库引用aar包,之所以可以引用第三方依赖库,是因为同时打包生成的pom文件中包含了对第三方库的依赖,如果pom文件中没有对应依赖,则在使用方会报ClassNotFound异常。解决方案:既然知道了造成问题的原因,方案就很简单了,在生成pom文件的时候同时打包对应的...原创 2020-03-02 15:05:10 · 3285 阅读 · 1 评论 -
Unable to find method 'org.gradle.api.tasks.TaskInputs.file
在配置greenDao项目的时候,经常会遇到这样的问题,全部的提示如下Unable to find method ‘org.gradle.api.tasks.TaskInputs.file(Ljava/lang/Object;)Lorg/gradle/api/tasks/TaskInputs;’.Possible causes for this unexpected error includ...原创 2019-11-06 11:41:58 · 5872 阅读 · 0 评论 -
自定义View通过findviewbyid返回为null解决方法
findviewbyid 返回为null,这个问题一般说明想要找的view没有在对应的layout上面。今天遇到一个同样的问题,但是确定view已经在layout上,但是仍然返回为null。虽然最终找到了问题原因,但是过程艰辛。具体代码如下MainActivity.javapublic class MainActivity extends Activity{ @Override...原创 2018-11-21 15:35:59 · 5141 阅读 · 1 评论 -
C++ Binder机制学习
核心内容Binder机制的核心实际上和Android中的Handler发送消息的机制很像,在Binder中负责发消息的是继承了BpInterface的子类,负责处理消息的是BnInterface的子类发送消息的具体函数是remote()->transact();处理消息的具体函数是onTransact();基础知识BpInterface和BpBinder中的p表示的意思就...原创 2018-11-08 22:58:15 · 2323 阅读 · 4 评论 -
init.rc 官方文档
这篇文章是从8.0的安卓源码中拿出来的,源码位置是o-base/system/core/init/README.mdAndroid Init LanguageThe Android Init Language consists of five broad classes of statements:Actions, Commands, Services, Options, and Impor...转载 2018-09-27 14:37:19 · 635 阅读 · 0 评论 -
ubuntu16.04 编译android 6 Marshmallow
之前一直是在别人配置的ubuntu上面编译android,心血来潮,也想自己搞一下,以下是我的配置方法。设置阿里源sudo gedit /etc/apt/sources.list把以下内容替换到sources.listdeb-src http://archive.ubuntu.com/ubuntu xenial main restricted #Added by sof...原创 2018-09-02 14:55:53 · 397 阅读 · 0 评论 -
保存git版本差异文件并保留目录结构
解释一下,我是想实现这么一个功能,比如发现2018-03-01到2018-03-05之间的提交导致了Android系统出现问题。但是具体哪个git仓库出的问题不清楚,需要分析这段时间都改了啥,需要你把这段时间的修改都导出来。第一步,生成diff文件git diff --before:2018-03-05 --after:2018-03-01 > issue.diff利用repo命...原创 2018-05-02 10:47:59 · 1964 阅读 · 0 评论 -
Android 8怎么修改USB默认为MTP
直接上代码 .\frameworks\base\services\usb\java\com\android\server\usb\UsbDeviceManager.java....case MSG_SYSTEM_READY: updateUsbNotification(); updateAdbNotification(); updateUsbFunctions(...原创 2018-03-08 15:33:12 · 4640 阅读 · 1 评论 -
Android配置蓝牙键值
Android配置蓝牙键值的步骤和一般的键值基本相同,但是有几点区别需要注意kl文件修改蓝牙键值的kl有特殊的形式key usage 0x0c008c HOME第一列表示这是一个键值,第二列可以先不管,第三列是蓝牙键值,第四列是Android键名,可以在前一篇博客中对此深入了解。linux键值映射getScanCode这个需求其实挺偏门的,因为我们在驱动层用多个红外键值对应了一个Android键值,原创 2017-09-26 11:44:14 · 5732 阅读 · 1 评论 -
绕过selinux权限一种方法
问题:在Android应用中删除一些敏感的文件夹会有权限问题,但是按照下面更改之后CTS认证会Fail。allow system_app system_app_data_file:file execute;allow system_app system_data_file:dir write;思路:依据一:init.rc中service的启动流程绝对不会有权限问题依据二:删除操作可以用rm -rf原创 2017-10-23 11:06:35 · 2897 阅读 · 0 评论 -
接收广播的两种方法
两种接收广播的方法。1. 静态注册的广播接收器接收广播2. 动态注册的广播接收器接收广播原创 2017-04-13 15:57:47 · 2760 阅读 · 0 评论 -
Android7.0 CTS 测试环境搭建 及CTS测试套件
这篇教程是我再搭建CTS环境过程中总结的步骤,具体的测试方法没有帖,基本上按照help里面提示的方法就可以了。博客最后贴出了我用到的CTS测试套件,已上传到百度网盘,有需要的可以直接取用。搭建步骤制作ubuntu14.04 U盘启动盘1. 打开软碟通(UltraISO),选择Ubuntu14.04镜像文件,打开,选择镜像文件2. 点击启动,写入硬盘镜像,3. 如果是Linux系统,选择便捷启动,原创 2017-09-26 15:36:39 · 2035 阅读 · 1 评论 -
Android键值添加和调试
这篇文章分为两个步骤,一是代码修改,二是串口调试。代码修改Android键值底层驱动实现,各个方案商都不一样,一般而言,在改动的时候会有文档可以参考。本博客从在Android层添加一个键值开始讲起kl文件kl文件的作用是把底层传上来的键值映射为Android键值,一般情况下,文件内容如下key 233 CUSTOM_KEYCODE第一列表示这行是普通的键值,第二列是linux键值,第三列是An原创 2017-09-25 18:48:19 · 2641 阅读 · 0 评论 -
Service生命周期
Service生命周期相关函数onCreate()onStartCommand()onBind()onUnbind()onStop()onDestroy()两条线Bind和Start线bindService是为了在Activity中直接调用Service中的公共函数startService函数的作用是通过intent传消息调用service中的私有函数使用Bind时的...原创 2018-11-29 12:27:02 · 929 阅读 · 2 评论 -
从源码看Handler和Runnable Thread 以及HandlerThread的关系
Handler的构造函数Handler是Android中的概念,其构造函数有以下几种public Handler();public Handler(Callback callback);public Handler(Looper looper);public Handler(Looper looper, Callback callback);public Handler(boolean...原创 2018-11-29 18:14:58 · 208 阅读 · 0 评论 -
检查json字符串用gson反序列化之后是否有空对象
使用场景gson转换之后的对象如果不经过检查就使用,很容易导致空指针错误。json中的每一个数据都单独做检查,就会导致代码冗长,而且不利于维护,因此我做了一个小工具,用来在gson对字符串转换完成之后进行校验,避免在使用对象的过程中出现问题。原理主要利用的是反射的方法,使用getClass()函数获得对象的类型,getDeclaredFields函数可以获得这个类的所有成员变量,包括私有的变...原创 2019-05-31 10:30:55 · 1028 阅读 · 0 评论 -
从xml布局文件映射到自定义View的两种方法
使用xml进行布局,然后映射到自定义View中进行事件绑定是现在最常用的画UI的方式。我一直以来的做法是,在java类的构造函数中inflate布局文件中的view,然后使用this.addView(view)的方法或者在inflate函数中进行关联。最近一个同事的做法让我发现还存在另外一种做法,虽然本质上差不多,但是中间涉及到的一些知识还是值得注意的。不知道你在开发过程中使用的是哪一种方式...原创 2019-04-17 18:23:01 · 1422 阅读 · 0 评论 -
TextView使用占位符设置内容
strings.xml 占位符作用:可以节省textview的个数,减少消耗。使用步骤strings.xml <string name="my_info">我叫%1$s,%2$d,不信可以%3$s一起玩!</string>layout.xml<TextView android:layout_width="wrap_content" android...原创 2019-04-17 17:49:50 · 801 阅读 · 0 评论 -
gradle使用笔记
gradle使用杂项minifyEnabled 表示不混淆,通常情况下,debug模式要设置为falsegradle导入aar步骤复制aar包到libs文件夹在应用的gradle文件中添加repositories { flatDir { dirs 'libs' }}在dependencies里面添加如下行,其中的yourAARfileName是你的aar包的...原创 2019-04-17 17:15:29 · 188 阅读 · 0 评论 -
Android使用Glide给图片加锯齿效果
效果,给图片顶部加上矩形图层思路:使用小型的图层重复来模拟锯齿状图形Glide版本:4.9.0Glide.with(this).load(bitmap) .transform(new SerrationTransformation(MainActivity.this)) .into(imageView);temp的示例:...原创 2019-03-01 18:29:42 · 1395 阅读 · 0 评论 -
Canvas Bitmap Paint 学习总结
Android开发者文档中关于绘图的描述The Canvas class holds the “draw” calls. To draw something, you need 4 basic components: A Bitmap to hold the pixels, a Canvas to host the draw calls (writing into the bitmap), a...原创 2019-03-01 16:29:36 · 260 阅读 · 0 评论 -
RxAndroid 学习笔记
这篇博客是学习RxAndroid过程中做的笔记,学习的博客为优美的异步nicolelili1的Rx相关文章概念FuncX X表示参数个数emit 发射retrofit 改造&lt;? extends T&gt;表示上界通配符,表示T和它的子类&lt;? super T&gt;表示下界通配符,表示T和它的父类响应式编程A=B+C A经过赋值之后,如果B的值改变了,A的...原创 2019-01-07 15:40:04 · 321 阅读 · 0 评论 -
android aidl使用方法和原理
AIDL设计原因跨进程通信IPC,以及跨进程调用RPC。节省工作量AIDL中的实现工具为了达到这个目的引入了IInterface,IBinder以及Binder类IInterface是什么:IInterface是一个interface,定义了一个asBinder函数。联想到什么:IInterface接口一定是和Binder一起使用的。/** * Base class for ...原创 2018-12-07 18:18:38 · 633 阅读 · 0 评论 -
在activity中调用service中的函数
不多说,直接上代码MainActivity.javapackage com.xxx.validatedemo;import android.app.Activity;import android.app.Service;import android.content.ComponentName;import android.content.Intent;import android....原创 2018-11-28 17:41:35 · 2523 阅读 · 0 评论 -
android 触点轨迹绘制(代码)
onTouchEvent函数:单点触控处理流程event是通过event.getAction()获得的,一般最少需要考虑下面这三种情况MotionEvent.ACTION_DOWN:手指 初次接触到屏幕 时触发。MotionEvent.ACTION_MOVE:手指 在屏幕上滑动 时触发,会多次触发。MotionEvent.ACTION_UP:手指 离开屏幕 时触发。多点触控ev...原创 2018-11-28 15:52:43 · 2566 阅读 · 0 评论 -
android sudio 3.0版本之后怎么查看函数消耗时间
3.0版本之后,曾经很好用的TraceView和DDMS没有了,Google更新了Profiler,但是很多功能的入口变得更深了,这里我说明一下新版本中查看函数运行时间的方法。首先点击如下图标打开Profiler,在程序中设置断点点击如下位置进入CPU模块开始录制,然后在断点结束,停止录制打开Top Down,选择Wall clock time查看各个函数运行所需的时间如图所示,sl...原创 2018-11-26 21:09:23 · 1332 阅读 · 1 评论 -
常用Andriod调试命令
因为工作的关系,经常需要用串口连接Andriod设备进行调试,命令用的多了,就想总结起来,让知识升华。按照我的理解,常用的有三种命令: 属性和值,应用层,功能下面对这三种调试命令分别介绍属性和值settings这个命令的作用是更改安卓数据库里面的值。举个例子settings put global device_provisioned 1settings pu...原创 2017-09-25 16:20:22 · 1039 阅读 · 0 评论 -
Android系统语言列表
一般情况Android系统语言的配置项文件一般在./device/xxx/xxx.mk文件中进行配置具体的语句是类似下面这行PRODUCT_LOCALES := en_US如果有多种语言,可以用空格进行隔开处理PRODUCT_LOCALES := en_US zh_CN语言和国家代码的格式是 xx_YY xx小写表示某种语言,YY大写表示某一个国家一种语言多个地区比如汉语分为中文大陆,中文香港和中文原创 2017-06-27 16:04:44 · 3466 阅读 · 0 评论 -
Android 多进程和多线程
综述进程指的是Process,线程指的是Thread。进程UID和PID每一个应用有一个UID,相当于Linux中的一个用户。每一个PID可以对应多个PID(进程号)。正常情况下,每一个应用都运行在自己的用户空间中,不能访问其他应用的数据。一个应用包含多个进程在一个APP中开启多个进程,可以通过在Androidmanifest中相应的组件中添加android:preocess属性,如果以:开头,那么原创 2016-08-02 17:19:56 · 505 阅读 · 0 评论 -
Messenger 使用介绍
综述:Messenger用于跨进程通信,Messenger可以传递的数据格式有Bundle可以传递的所有数据格式Messenger在API中的介绍如下 Reference to a Handler, which others can use to send messages to it. This allows for the implementation of message-based co原创 2016-08-01 17:36:49 · 2154 阅读 · 0 评论 -
getWidth()和getMeasuredWidth()的区别
文章出自stackoverflow 我也是因为对这个问题搞不颠,所以才去找答案,找来找去发现国外的这个解释不错,于是转过来安利给大家。As the name suggests the measuredWidth/height is used during measuring and layoutting phase. Let me give an example,A widget is aske翻译 2016-08-05 18:08:03 · 595 阅读 · 0 评论 -
Android 存储方式之SharedPreference SQLite ContentProvider
Android有五种存储方式,分别为 SharedPreference,Sqlite,ContentProvider,File,Internet对于后面两种先放下不提,先谈一谈SharedPreference,Sqlite和ContentProvider 一、SharedPreference 话题一:特点 SharedPreference适用于当前应用,相当于对整个应用的配置,不原创 2016-07-12 18:02:24 · 592 阅读 · 0 评论 -
AIDL实现跨进程通信最小代码
说明这个是我随意写的一个AIDL跨进程通信的demo。对于初学者来说需要注意的地方有以下几点:一个应用开启多个进程代码位置 AndroidManifest.xml 用android:process属性让service运行在另一个进程中。 <service android:name="com.renwj.bindertest.server.BinderServer"原创 2016-08-04 11:58:14 · 375 阅读 · 0 评论 -
SQLiteDatabase.query()各个参数的意义
SQLiteDatabase包含有四个参数不同的query函数,分别包含有7,8,9,10个参数。这么多的参数很难记,所以在这里以10个参数的query函数为例,梳理一下各个参数的意义。 Cursor query (boolean distinct, String table, String[] columns, String selection, String[] selection翻译 2016-08-03 11:58:59 · 23555 阅读 · 0 评论 -
View的事件传递机制
事件传递机制中最重要的两个函数原创 2016-07-20 16:35:15 · 401 阅读 · 0 评论 -
自定义View和自定义属性 注意点
这篇博客也算是一篇读书笔记把。我在学习自定义View的时候看到了 鸿洋_Android自定义View(一)中涉及到的例子,我就自己尝试也写了一遍,发现里面需要注意的问题如下: 1,在定义的时候把属性定义在value文件夹里面,xml文件的名字没有要求,定义的时候tag name是declare-styleable,里面的item标签是attr 如果有需要itme的属性要加上format 2原创 2016-07-28 17:55:50 · 357 阅读 · 0 评论 -
通知栏的最小代码
给通知栏发出一个通知的最小代码,包含代码,总结,注意,效果图四个部分原创 2016-07-29 15:08:58 · 322 阅读 · 0 评论 -
Intent探索
intent的分类Intent分为两种,显式intent和隐式intent,显式intent直接指明了接收的Activity,隐式intent没有直接指出接收的Activity,而是需要去AndroidManifest.xml文件中去匹配。Activity匹配隐式intent的条件有三个,Action,Category,Data这三个条件均位于intent-filter标签。Android本身库中提原创 2016-07-29 16:56:31 · 240 阅读 · 0 评论