自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(73)
  • 资源 (2)
  • 收藏
  • 关注

原创 Ubuntu添加程序图标到启动器

快捷启动的需求ubuntu上有些应用安装后,会自动添加快捷图标到启动器,有些应用或者程序不会自动添加,特别是一些免安装程序。那么如何添加快捷图标到启动器呢?且看下文。.desktop配置文件/usr/share/applications目录下面有很多.desktop配置文件,启动器中的图标,都有对应该的.desktop文件,我们也需要添加一个对应程序的desktop文件。具体怎么创建文件就...

2020-03-04 11:36:39 1417

原创 Android应用开发之锁屏上显示Activity

应用场景锁屏上显示Activity的需求,很多应用有这个场景需求,如音乐锁屏、QQ锁屏消息、系统的来电界面等API介绍API level 27之前WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKEDdeprecated in API level 278.1开始FLAG_SHOW_WHEN_LOCKED被废弃,兼容之前系统版本可以使用getW...

2020-03-02 20:02:51 4092

原创 tar命令

tar命令格式tar -[cxt][vf]必选参数(不能同时使用):-c:创建归档文件-x:解压-t:查看压缩文件内容可选参数:-z:gzip压缩,处理.tar.gz格式-j:bz2压缩,处理.tar.bz2格式-v:显示所有过程必选参数:-f:最后一个参数,后接归档文件名创建归档文件不带压缩qinhai@qinhai-550-051cn:~/test$ touch...

2019-10-20 20:03:47 285

原创 Android NDK之JNI头文件生成

命令行生成头文件命令格式示例:javah -jni -encoding UTF-8 -d D:\AndroidStudioProjects\MyJNIDemo\app/src/main/jni -classpath D:\AndroidStudioProjects\MyJNIDemo\app\build\intermediates\javac\debug\compileDebugJavaWit...

2019-04-09 10:48:47 595

原创 Android命令行之logcat

logcat使用方式方式一:直接执行adb logcatC:\Users\hai.qin>adb logcat方式二:先进入adb shell,再执行logcatC:\Users\hai.qin>adb shellHWDUK:/ $ logcatHWDUK:/ $ which logcat/system/bin/logcat日志消息优先级优先级由以下某个字符值...

2019-04-08 15:30:44 379

原创 Android之Protocol Buffers使用

简介Protocol Buffers是Google提供的一种持久化数据格式的机制,类似JSON、XML等数据格式。目前有3个版本的库,可以在Android中使用,按照支持特性的多少,从小到大依次为:nano、lite、java版本。集成步骤1、配置项目gradle dependencies { classpath 'com.google.protobuf:proto...

2019-04-01 16:00:50 1245

原创 Python之批量自动安装apk

引入初步学习了python的语法,做个安装apk的自动化脚本练习一下,注意这里用的是python2,python3有差异跑不起来。实现步骤1、导入模块# 内置的xml解析模块import xml.etree.ElementTree as ET# 用于进程连接交互的模块import subprocess# 系统模块import os2、获取应用列表# 定义函数,获取指定目录下...

2019-03-29 15:36:49 2397 1

原创 Git之Github配置SSH key

生成SSH key在公司PC,生成用于github的SSH key:$ ssh-keygen -t rsa -C "[email protected]” -f ~/.ssh/github_id_rsa这里文件名加了github前缀以示区分,因为公司一般都有自己的git仓库,也需要用到SSH key。执行完上述命令,~/.ssh/目录会生成下面两个文件,一个公钥,一个私钥:github_id_rsa...

2019-03-28 15:49:02 317

原创 Ubuntu16.04安装搜狗输入法

下载https://pinyin.sogou.com/linux/我下载的是64位版本:sogoupinyin_2.2.0.0108_amd64.deb安装官方指南:https://pinyin.sogou.com/linux/help.php在16.04上直接双加安装即可,安装完成后还需做一些配置。配置进入设置-语言支持,如果提示语言支持安装,请先安装,然后把系统键盘输入方式从...

2019-03-20 11:21:26 134

原创 Android应用框架之Dagger依赖注入框架初步

主要注解javax.inject包@Inject@Scope和@Singleton@Named和@Qualifierdagger包@Module和@Provides@Component@SubcomponentLazy:非注解类,用于延迟注入注解使用@Inject注解用于标记需要注入的依赖,或者标记用于提供依赖的构造方法。在Dagger2中@Inject有3种使用...

2019-03-19 18:07:22 412

原创 Android应用框架之数据库框架Room简介

Room是什么Room是Android官方提供的一个数据库框架,对Sqlite进行了一层抽象和封装,最开始Google出于对Android应用架构生态的考虑,作为应用架构的一部分开发了这个库,目前依然在维护和优化,不过已经从原来的仓库迁移到了androidx系列组件下面。所以,后来者建议从androidx开始。Room的版本老版本,即Pre-androidx版本包路径:android....

2019-03-13 10:17:54 1966

原创 Android应用开发之运行时权限

运行时权限Android M即6.0开始,对于某些用户敏感权限,系统不再默认授权,不仅要在AndriodManifest中声明,还要弹出系统权限框,让用户主动授权。出于此限制,很多应用不得不修改原来的交互,加入运行时权限判断,避免因为无权限导致的功能不可用。关于应用权限的详细介绍,可以参考官方文档:应用权限下面的例子是我平时项目中的一个简单应用。代码实例public class Ma...

2019-03-08 11:03:38 184

原创 Rxjava应用场景之EditText搜索限流

应用场景在平时开发过程中,关键字搜索的场景还是挺多的,为了避免频繁请求,必须要对请求触发做一定限制,对用户体验进行优化。这里通过Rxjava中debounce操作符,做一个限流实现。代码实现这里使用的是Rxjava2.0,首先,请先添加依赖dependencies { compile 'io.reactivex.rxjava2:rxjava:2.1.3' compile ...

2019-03-05 12:48:59 1691

原创 Rxjava应用场景之网络请求重试

应用场景这里使用平时开发过程中经常遇到的一个场景作为例子讲解,网络请求失败重试,当在业务层面,比如登录超或者token失效,需要重新获取token才能发起当前请求时,我们就可以使用retry完成该需求,这里其实涉及请求的嵌套。代码分析首先别忘了添加rxjava相关依赖,这里使用的是Rxjava1.0:dependencies { implementation 'io.reactiv...

2019-03-05 10:22:08 722

原创 Android内存分析之procrank命令

procrank命令简介procrank是/system/xbin/下的一个命令,在整机开发的时候,使用该命令查看应用进程的内存情况很方便。但是这个命令正常在debug/eng模式编译的时候才有,如果你是做第三方应用开发,如果可以root的手机的话,通过往该手机中push该命令,应该也可以使用该命令。C:\Users\hai.qin>adb shellK700AN:/ # which ...

2019-03-04 13:45:21 15275

原创 Android之aar包中R文件混淆问题

问题提出解决问题要对症下药,先看报错日志: java.lang.NoSuchFieldError: No static field a of type I in class Lcom/**/**/**/R$layout; or its superclasses (declaration of 'com.**.**.R$layout' appears in /data/app/com.**...

2019-02-21 18:04:28 3492

原创 android之cmd查看应用签名信息

查看keystore签名文件D:\>keytool -list -keystore D:\签名\myapp.keystore输入密钥库口令:需要输入keystore的密码才能查看。查看apk文件的签名信息步骤:首先修改apk后缀为.zip并解压在解压后的根目录找到这个文件:/META-INF/CERT.RSAcmd命令行执行:keytool -printc...

2019-02-02 09:39:13 1166

原创 Launcher3之IconCache实现分析

IconCache类简介分析IconCache源码之前,先了解下这个类在launcher中扮演了什么样的角色?从字面可以看出,它是一个缓存类,缓存了跟Icon相关的信息,实际它主要缓存了应用的桌面图标bitmap和label,除了memory缓存,还持久化到了数据库。下面我们就具体看下源码实现。Icon资源获取每个应用Icon的图标资源是怎么获取到的?声明下,这里我们聊的是原生aosp l...

2019-01-30 17:59:04 1806

原创 Windows7下安装MySQL

下载安装包官网下载地址:https://dev.mysql.com/downloads/mysql/我下载的版本是:mysql-8.0.14-winx64.zip解压安装包将以上安装包解压到指定目录,如我解压后的路径:D:\web\mysql-8.0.14添加配置打开文件夹D:\web\mysql-8.0.14 ,在该文件夹下创建 my.ini 配置文件,编辑 my.ini 配置以...

2019-01-24 13:54:23 130

原创 Launcher3之应用卸载过程分析

引言在之前的文章,"Launcher3之新安装应用加载过程分析"一文,已经跟大家分析了新应用安装的过程,这篇文章再跟大家分享下它的姊妹篇,launcher3中应用卸载的过程。应用卸载过程分析1、launcher中卸载的发起对于用户来说,Android手机中,应用的卸载入口大概就两个,一个在系统设置,一个是在launcher中通过拖动图标触发。这里从代码层面,来看下launcher中是怎么触...

2019-01-23 17:48:34 3348

原创 Launcher3之新安装应用加载过程分析

引言对于Android手机用户来说,每天接触着各式各样的手机应用,应用的安装、更新和卸载操作并不陌生,更不用说看这篇文章的开发者了。那么,当一个新应用安装完成以后,launcher中需要做哪些事情,来完成向用户提供应用图标入口的功能呢?该篇我就跟大家来探讨下,新应用安装后,launcher中的加载过程。Workspace新应用加载过程分析1、外部交互接口应用安装的实现并不是launche...

2019-01-17 14:00:11 1760

原创 CentOS服务器安装Tomcat

友情提示:本篇是在阿里云服务器CentOS 7上安装tomcat下载Tomcat官网下载这里下载的是tomcat8.5,最新的版本tomcat9.0都有了,下载完后的安装包:apache-tomcat-8.5.37.tar.gzFileZilla上传文件到服务器上个截图:填入对应的信息:外网IP:即阿里云服务器外网IP端口:端口一定要填22,阿里云服务器默认对外开放了22端口。...

2019-01-15 11:32:40 683

原创 CentOS服务器安装OpenJDK

友情提示:这里是在阿里云服务器CentOS 7上安装openjdk查看yum库中的Java安装包[root@abc home]# yum -y list java* 安装openjdk正常安装的版本是1.8.0,安装命令如下:[root@abc home]# yum -y install java-1.8.0-openjdk-devel最后看到Complete!,基本就OK了。J...

2019-01-14 16:25:20 680

原创 Android Studio如何支持java8特性

Android Studio对Java8特性的支持Android Studio 3.0及以上版本支持所有Java7语言功能,以及部分Java8语言功能,这里要注意一下,不是所有Java8特性都支持。Android官网罗列的:支持的Java 8语言功能和API使用默认工具链所谓默认工具链,就是Android studio官方自带的工具集,用于Java8特性编译处理,非第三方工具,当然兼容性和...

2019-01-11 11:43:01 4921

原创 Launcher3之HandlerThread应用场景分析

HandlerThread是什么?HandlerThread是android SDK中android.os包下的类,继承于Thread类,所以是一个线程类,它存在的价值是什么呢?答案就是,HandlerThread可以创建一个自带Looper的线程,自动处理Looper创建时的同步问题。HandlerThread源码简析public class HandlerThread extends T...

2019-01-09 11:09:40 287

原创 版本控制之git开发工作流

引入git分布式特性带来了诸多便利,不过国内git版本管理并不是很规范,基本上还是单分支开发,远程仓库公用一份代码。拿我自己为例,以前开发,本地拉了一份代码下来后,基本都是直接在当前分支开发和提交,这个其实很不规范,而且会导致混乱。这里推荐认识一个工具git flow,它对于开发过程定义了一个工作流,值得借鉴。git flow原理可参考此篇文章:git flow的使用我的工作流这里列下...

2018-12-18 19:13:27 133

原创 Launcher3之XmlPullParser解析Workspace默认配置过程分析

引入上一篇介绍了Workspace数据库和表的创建过程,本篇接着上一篇介绍下,workspace首次加载默认配置到数据库的过程。这个默认配置是什么呢?就是我们首次使用launcher的时候,桌面上默认显示应用图标、文件夹、小部件等元素的配置。在实际的项目中,需要按照需求去配置哪些应用图标需要显示,哪些需要隐藏,就是在这个默认配置文件中修改的,这个文件就是default_workspace.xm...

2018-12-12 16:04:24 652

原创 Launcher3之Workspace数据库首次初始化分析

引言在Android手机上,我们通常说的桌面其实就是launcher应用,更狭义一点就是workspace,workspace是桌面在实现时的抽象定义。桌面上显示的应用图标、文件夹和小部件都是显示在workspace中的,我们可以增删应用快捷图标,增删文件夹,增删小部件,但是这些桌面上显示的元素状态是怎么保存下来的呢?答案是,launcher使用了一个专门的数据库保存了这些状态,以便下次重启后依...

2018-12-04 20:07:11 1108

原创 Beyond Compare3许可证被撤销

解决方案以win7下为例,步骤如下:找到目录C:\Users{user name}\AppData\Roaming\Scooter Software\Beyond Compare 3,删除该目录下所有文件重新打开Beyond Compare,重新输入密钥即可。...

2018-11-28 09:44:04 2357

原创 Launcher3中wait、notify应用场景分析

wait、notify方法介绍wait和notify是Java中的两个方法,可以用于线程间的协作,最典型的应用就是生产和消费者模式。不过,没有真正用过的同学可能会认为它们是Thread或者Runnable的方法,其实不然,它们是Object父类的方法。先看下Object.java中wait和notify方法的定义:wait方法: public final void wait(long...

2018-11-15 09:45:43 753 1

原创 App变现之百度原生广告

DU Ad platform简介DU Ad platform,即百度移动广告平台,该平台面向个人和企业用户,提供广告接入服务,以SDK的方式集成到App中。集成入门添加应用和广告单元步骤:1、打开官网http://ad.duapps.com/zh_CN/,注册登录2、选择"我的应用"标签,添加应用3、点击已创建应用的右侧编辑按钮,进入编辑页面,创建广告单元创建应用:创建广告单...

2018-11-09 16:11:37 817

原创 RecyclerView你所不知道的秘密

问题是什么问题还要从接入百度广告说起,这里要说的是百度原生广告,接入过广告的同学可能知道,接入广告SDK,广告的点击事件基本都是由SDK处理的,开发者只需要传入需要被点击的View即可。虽然这给开发者省了不少事,有时候出了问题,反而会阻碍我们去分析问题。下面这个接口,就是向百度广告用来注册点击事件的接口:NativeAd.registerViewForInteraction(View vie...

2018-11-09 11:49:27 495

原创 Android Kotlin开发之Hello World

Kotlin简介Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,被称之为 Android 世界的Swift,由 JetBrains 设计开发并开源。Kotlin 可以编译成Java字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。在Google I/O 2017中,Google 宣布 Kotlin 成为 Android 官方开发语言。Kotli...

2018-10-26 10:22:39 556

原创 App变现之Admob原生广告

Admob介绍admob是Google的移动广告平台,集成admob的SDK到APP中,获取广告数据展示出来,可以给我们带来广告收益。对于大流量的应用,如果可以在合适的位置,无缝的加入广告,可以带来可观的广告收入,这已经是一个公开的成功商业模式。有心的小伙伴可以往这个方向尝试,财务自由指日可待哦!先上张admob原生广告的效果图,这是一张内容类型的原生广告。Admob广告类型Admob...

2018-10-23 19:57:19 6102

原创 Ubuntu下安装typora

简介Typora是一款由Abner Lee开发的轻量级Markdown编辑器,适用于OS X、Windows和Linux三种操作系统,是一款免费软件。安装官网下载安装地址:https://typora.io/#linux安装命令:# or run:# sudo apt-key adv --keyserver keyserver.ubuntu.com--recv-keys BA300B7...

2018-09-30 00:05:06 6854

原创 find命令简单使用

格式find [路径] [参数]示例根据文件名查找文件或文件夹find . -iname "*.mk"这里需要将文件名放在引号,不加引号搜不到结果根据路径查找文件夹find . -path *applock* -type d路径中需要包含此字符串,才能搜到结果,另外,前后需要用*号补全路径根据路径查找文件find . -path *applock* -type f这里是...

2018-09-29 17:13:56 304

原创 compile、implementation和api

问题最近android studio在打开项目后,自动同步build.gradle配置的时候,Build窗口总是提示:Configuration 'compile' is obsolete and has been replaced with 'implementation' and 'api'.It will be removed at the end of 2018. For more ...

2018-09-21 10:32:50 658

原创 Android中Retrofit2使用入门

简介Retrofit2是square公司开源的网络库,该公司的另一个库Okhttp,相信大家应该同样熟悉,在Retrofit流行之前,Okhttp是我们使用比较多的几个网络库之一。Retrofit虽然时下最流行,其实并没有替代Okhttp,Retrofit默认还是基于Okhttp去完成底层网络处理的,只是在上层做了进一步的封装,使开发者更易使用而已。本篇我们就来谈一谈Retrofit2的使用。...

2018-09-14 17:56:33 3141 2

原创 compileSdkVersion、minSdkVersion和targetSdkVersion的区别

compileSdkVersioncompileSdkVersion就是你创建Android项目的时候选择的SDK版本,编译过程会检查是否有使用废弃API,所以升级compileSdkVersion有助于发现是否有废弃的API,为使用新API做好准备,但是修改compileSdkVersion不会影响应用的行为,因为最终compileSdkVersion不会被打包进apk中。minSd...

2018-09-11 10:51:52 346

原创 android-apt和annotationProcessor

几个名词APT是什么apt是Annotation Processing Tool的缩写,顾名思义,就是注解处理工具,用于编译时对注解进行解析,自动生成代码,并编译代码生成class文件,大体就是这个过程。android-apt是什么android-apt是一个开发者开发并开源的注解处理框架,因为一开始Android没有默认的支持,dagger、ButterKnife等流行的...

2018-09-10 18:04:26 717

idegen.iml和idegen.ipr

android13-s1-release分支版本

2022-08-27

统一日志工具类

封装了Android Log类的功能,便于统一控制日志输出,通过BuildConfig.DEBUG控制日志是否输出,在debug版本自动开启日志,正式版本关闭日志

2018-09-05

FloatingGroupExpandableListView

顶部带有Group Indicator的ExpandableListView

2014-12-08

空空如也

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

TA关注的人

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