Android开发
murphykwu
勿忘初心,方得始终!
展开
-
StatusBar log disable标志位
主要对StatusBar的disable标志位进行解读。04-06 20:50:12.210 D/StatusBar( 3200): disable1: 0x03a50000 -> 0x00000000 (diff1: 0x03a50000)04-06 20:50:12.211 D/StatusBar( 3200): disable2: 0x00000010 -> 0x00000010 (diff2: 0x00000000)04-06 20:50:12.212 D/StatusBar( 3原创 2021-04-12 17:20:25 · 482 阅读 · 0 评论 -
如何单独编译Android Q源码里面的应用
问题描述在面对Android系统工作时,很大一部分工作是对一些apk的bug进行修复。如何单独编译修改过的应用,快速进行验证,对提高工作效率非常重要。但是在Android Q中,很多应用都是用Android.bp代替了Android.mk。而且一些应用单独编译,也不会在指定目录生成应用的apk,而是生成dex或者odex格式。解决方法对于应用源码根目录里面包含Android.mk的情况,只需要在mk文件中添加:LOCAL_DEX_PREOPT := false对于应用源码根目录包含Android原创 2020-09-15 13:31:13 · 584 阅读 · 0 评论 -
Android Rescue party
什么是Rescue Party?官方解释救援程序[https://source.android.com/devices/tech/debug/rescue-party]“当该功能注意到核心系统组件陷入崩溃循环僵局时,就会派出“救援程序”。然后救援程序会通过一系列操作来上报相关情况,以期恢复设备。最后的解决方法是,救援程序使设备重新启动并进入恢复模式,然后提示用户恢复出厂设置。”实现在 Android 8.0 中,救援程序默认处于启用状态,其实现位于 /services/core/java/com/a原创 2020-08-20 15:18:41 · 542 阅读 · 0 评论 -
Could not resolve com.android.tools.build:gradle:3.0.1
在项目开发,使用gradle编译项目app代码的时候,碰到如下问题,辗转反侧夜不能寐,终于搞定。记录如下:出错logA problem occurred configuring root project ‘SHAKESHAKE’.Could not resolve all files for configuration ‘:classpath’.Could not resolve com....原创 2019-10-22 15:39:21 · 763 阅读 · 0 评论 -
container_of()详解
原地址:http://radek.io/2012/11/10/magical-container_of-macro/当你开始内核编程的时候,你会随便看看代码,那么你可能很快就会碰到这个神奇的预处理代码结构。它是用来干嘛的?正如它的名称那样,它获取的是它的容器的地址。该函数需要三个变量--指针,容器的类型,指向成员的指针。(译者注:最终返回的是,该成员所处的结构体的指针。知道成员的指针翻译 2015-08-12 15:47:58 · 4924 阅读 · 1 评论 -
IntentService源码详解
IntentService可以做什么:如果你有一个任务,分成n个子任务,需要它们按照顺序完成。如果需要放到一个服务中完成,那么IntentService就会使最好的选择。IntentService是什么:IntentService是一个Service(看起来像废话,但是我第一眼看到这个名字,首先注意的是Intent啊。),所以如果自定义一个IntentService的话,一定要原创 2014-07-07 14:44:11 · 3660 阅读 · 0 评论 -
Git常用命令
引文:原创 2014-07-15 11:36:21 · 1005 阅读 · 0 评论 -
使用不同的项目宏决定载入不同资源
经常在项目中,xu原创 2014-08-28 10:59:23 · 1298 阅读 · 0 评论 -
编译错误:找不到AudioProfileManager错误
frameworks/base/policy/src/com/android/internal/policy/impl/GlobalActions.java:965: cannot find symbolsymbol : class AudioProfileManagerlocation: class com.android.internal.policy.impl.GlobalActi原创 2014-09-17 20:36:27 · 2098 阅读 · 0 评论 -
SQLServer中的通配符和转义字符
通配符SQL中的通配符用来代替一个或者多个字符。SQL通配符与LIKE运算符一起使用。SQL Server中常用的通配符%匹配任意长度的(长度可以为0)字符如’m%n’匹配字符m和n之间有任意个字符的字符串,匹配的示例有man,min,mon,moon,..._匹配任意单个字符如’m_n’匹配字符m和n之间含有任意一个字符的字转载 2015-01-06 10:23:29 · 17262 阅读 · 0 评论 -
MTK编译环境中makefile文件中常用变量值
问题在开发中碰到一个需要编译时拷贝文件到out指定目录中的问题。在不了解编译系统中一些路径对应的变量值非常不方便。所以花了一点时间查找到了部分变量名以及对应的值。方法如果大家没有找到对应的变量名的值,可以尝试如下方法:选择一个模块的android.mk文件,在里面添加:$(warning "TARGET_EXTRA_DATA_PATH is $(TARGET_EXTRA原创 2015-03-12 19:21:34 · 2281 阅读 · 0 评论 -
导入三方包,出现ClassNotFoundException
在项目中需要引用settings模块里面的某个活动。在eclipse中导入settins.jar包之后,使用如下方式启动: Intent intent = new Intent(); intent.setAction("android.settings.INPUT_METHOD_SETTINGS"); intent.addCategory("android.intent.catego原创 2014-07-24 17:10:57 · 2418 阅读 · 1 评论 -
过时的PreferenceActivity导致Fragment显示问题
问题描述: 在一个点击preferenceactivity中某项显示一个Fragment的场景中,出现错误:java.lang.RuntimeException: This should be called after super.onCreate.百思不得其解。因为报错的那一行是在super.onCreate之后的,代码很简单应该也不会有错误。因为当时项目代码很大,且签名成原创 2014-07-23 11:05:16 · 5730 阅读 · 1 评论 -
LoaderManager使用详解(一)---没有Loader之前的世界
有关Loaders和LoaderManager一系列文章。翻译 2014-06-27 17:43:11 · 15033 阅读 · 4 评论 -
LoaderManager使用详解(二)---了解LoaderManager
了解LoaderManager这篇文章将介绍LoaderManager类,这是该系列的第二篇文章。一:Loaders之前世界二:了解LoaderManager三:实现Loaders四:实例:AppListLoader注意:要了解这一LoaderManager这部分知识,要求对Loaders如何工作有基本了解。Loaders的实翻译 2014-06-27 17:48:20 · 32158 阅读 · 7 评论 -
LoaderManager使用详解(四)---实例:AppListLoader
实例:AppListLoader这篇文章将是我的第四篇,也就是最后一篇该系列的文章。请在评论里面告诉我他们是否有用。前面几篇文章的链接如下:一:Loaders之前世界二:了解LoaderManager三:实现Loaders四:实例:AppListLoader应大众的要求,我已经写了一个示例应用演示如何正确的实现一个自定义L翻译 2014-06-27 17:55:46 · 6792 阅读 · 18 评论 -
格式化字符串问题
今天在开发应用中原创 2014-07-16 17:21:51 · 1030 阅读 · 0 评论 -
Android随笔
从业几年,发现对Android的了解非常qianbo原创 2014-05-04 20:49:41 · 1085 阅读 · 0 评论 -
Android中一些有用的小方法(不定时更新)
在Android中,有些方法非常有用,但是一时想不起来怎么用。所以将这些方法积累在这里,自己可以时常上来看看熟悉一下,如果能够帮到朋友们就更好了。获取当前系统时间:前置条件: import android.os.SystemClock;使用方法: long startTime = SystemClock.uptimeMillis();扩展用法原创 2014-03-17 10:57:22 · 4693 阅读 · 1 评论 -
如何使用程序代码设定偏好应用
quote:基于代码Android 4.4项目开发中遇到一个需求,在系统有多个桌面应用的情况下,开机启动指定的桌面。这个跟我们平常有多个桌面时,一般会弹出框让我们选择偏好桌面。这篇文章中,我们将来看看如何在程序代码中设定某个应用为偏好桌面。如何找到系统中所有的桌面应用程序private PackageManager mPackageManager;privat原创 2015-05-29 11:55:00 · 832 阅读 · 0 评论 -
给三方应用进行系统签名
问题:在安装一个三方应用的时候出现:Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]网上查询是签名问题。所以需要用系统签名对这些apk文件进行签名。步骤如下:准备文件列表:文件名项目中的位置signapk.jarLINUX/android/out/host/linux-x86/fra原创 2015-06-02 16:34:28 · 798 阅读 · 0 评论 -
Java如何识别String中的换行符(\n)
问题背景:在一个EditText里面输入\n,在获取的String中直接获取的是“\n”这两个字符,而非作为一个回车。解决:String result = editextString.replaceAll("\\\\n", "\n")参考:https://www.javaworld.com/article/3188545/learn-java/java-101-regular-expr...原创 2018-12-04 13:49:31 · 40454 阅读 · 2 评论 -
Android:回车保存到SharePreference异常
背景在项目中发现,当通过SharePreference保存一个回车。如果重新安装应用,这个回车读出来的值就改变了。分析通过读取保存时候的EditText里面的String值,通过toCharArray转换成char数组,打印每个数组的ascii码。发现输出是10,10.也就是回车对应的ascii码。重新安装应用,从SharePreference里面读取保存的回车值,再次打印char数组,发...原创 2018-11-23 14:59:22 · 301 阅读 · 0 评论 -
android O如何获取当前锁屏状态
以下代码在Android O验证可行。主要作用:获取当前是否处于锁屏状态。主要是调用KeyguardManager里面的接口,同样可以使用其他接口判断当前是否是安全锁屏等。import android.app.KeyguardManager;KeyguardManager keyguardManager = (KeyguardManager) context.getSystemServi...原创 2018-11-07 14:31:55 · 1572 阅读 · 0 评论 -
RecyclerView报错:Scrapped or attached views may not be recycled
背景RecyclerView由于需要处理大量数据,它的ViewHolder经常会复用,在性能提高的同时也有可能导致某些View的状态异常,导致JE问题。log:java.lang.IllegalArgumentException: Scrapped or attached views may not be recycled. isScrap:false isAttached:tru原创 2018-01-23 11:44:33 · 1106 阅读 · 0 评论 -
SwitchPreference响应点击事件
问题背景需要响应SwitchPreference(CheckBoxPreference的升级版)的点击事件,但是在点击之后,checkbox先变化,然后再弹出我们需要的流程。这个显然跟用户体验有出入了。 用户一般假设,当我们设置完毕之后,这个checkbox状态才会改变。初始方案在onPreferenceClick里面对点击的Preference的key进行判断,并进入我们弹出的新流程。这个会产生原创 2016-12-02 23:05:14 · 9053 阅读 · 1 评论 -
Android Studio中调试Android源码
如果Android程序员想往更高一级发展,对Android系统的了解深入程度决定了你以后的终点。所以对于系统源码的了解可谓事半功倍。如果我们死扛源代码,会浪费很多时间在判断代码走哪个分支上面,对于一些多层嵌套的代码,基本上到后面就忘记前面到底走哪个分支了。如果能够实时看到程序的流程,那么对于我们理解的吃透代码就非常有价值了。本文将从代码下载,编译,生成AS项目文件,导入和调试入手,让读者可以从无到有原创 2016-08-04 11:59:02 · 6991 阅读 · 5 评论 -
Android6.0来电号码电话薄名称匹配
本文将介绍系统接收到来电之后,如何在电话薄中进行匹配联系人的流程。分析将从另外一篇文章(基于Android6.0的RIL框架层模块分析)中提到的与本文内容相关的代码开始。//packages/service/***/Call.javapublic void handleCreateConnectionSuccess( CallIdMapper idMapper, Par原创 2016-07-20 17:54:50 · 4118 阅读 · 1 评论 -
Android6.0中的Handler消息模型
在Android应用开发和系统功能开发中,经常用到多线程,而Handler消息模型在线程间的消息传递机制中占有重要的地位。对于Handler的理解,最好的参考资料是Android Developer上面的Handler介绍。 通过一个Handler,可以允许我们发送和处理一个Thread中的消息队列(MessageQueue)中的消息(Message)。Handler有两种主要的用法:将M原创 2016-07-19 12:08:42 · 1147 阅读 · 0 评论 -
基于Android6.0的RIL框架层模块分析
本文与另外一篇分析RIL底层模块的文章是姐妹篇: 基于Android6.0的RIL底层模块分析 根据手机网络制式的不同,通常系统中会扩展Phone.java这个类,扩展成GSMPhone和CDMAPhone。这个类主要是抽象整个手机来处理通信过程中与其他模块的交互。我们以GSMPhone为例,分析来电流程如何从底层传递到上层。该分析主要基于代码,所以会比较啰嗦。以GSMPhone为例,在Phone原创 2016-06-22 10:45:58 · 6567 阅读 · 0 评论 -
基于Android6.0的RIL底层模块分析
看代码的时候不要看到细节里面,先构建模块的运行框架,后续有需要再深入细节。必要的时候需要拿一个本子将主要流程画出来或者写出来。我们先看看,从系统刚开机是如何启动RIL功能的。首先先查看一下init.rc(这个文件包含一些初始化的服务或者功能,在开机阶段占有很重要的地位)。service ril-daemon /system/bin/rild class main socket ri原创 2016-06-14 12:39:42 · 2431 阅读 · 0 评论 -
Android RIL框架层相关模块类简介
InCallService里面有一个InCallServiceBinder extends IInCallService.Stub,在onBind中会返回这个内部类的实例。里面有一个mPhone实例,InCallService里面的一些设置,如下,都是对这个mPhone相关函数的包装。 同时这个InCallService里面还有一个空函数,是由继承它的子类来实现,比如InCallServiceIm原创 2016-06-21 17:49:00 · 1846 阅读 · 0 评论 -
Android Binder设计与实现 - 设计篇
关键词摘要引言面向对象的Binder IPCBinder 通信模型1 Binder 驱动2 ServiceManager 与实名Binder3 Client 获得实名Binder的引用4 匿名 BinderBinder 协议1 BINDER_WRITE_READ 之写操作2 BINDER_WRITE_READ 从Binder读出数据3 struct binder_transa转载 2016-06-03 15:20:56 · 526 阅读 · 0 评论 -
LoaderManager使用详解(三)---实现Loaders
这篇文字将介绍Loader类,并且介绍自定义Loader的实现。这是本系列的第三篇文章。一:Loaders之前世界二:了解LoaderManager三:实现Loaders四:实例:AppListLoader重中之重,如果你还没有读过前面两篇文章,我建议你在深入之前先读一读那两篇文章。先简短的总结一下这篇博客覆盖了什么内容。Loader之前的世翻译 2014-06-27 17:51:53 · 12426 阅读 · 9 评论 -
如何修改音乐的匹配字数
在Android整机开发中碰到一个问题,在谷歌的快速搜索应用中,需要输入3个或以上的字符(中文or英文),程序才会进行匹配,并提供符合的音乐文件名称。产品那边要求改成1个字就匹配。所以一顿好找,终于找到问题所在。android\frameworks\base\core\java\android\app\SearchableInfo.java 在该文件中,可以看到如下代码,定义了最小匹配字数,当原创 2014-03-26 10:26:01 · 1191 阅读 · 0 评论 -
系统字体大小设置
问题: 在项目中遇到需要修改字体大小的问题。当修改设置里面字体大小的时候,根据情况决定当前应用是否需要同步系统的字体大小。一般在需要完整显示字体的应用中有此需求。华为荣耀的手机桌面似乎就针对这个做了判断,不管系统字体修改成什么样,似乎都是一个默认值,反正我是没有用肉眼看到有什么改变。虽然有点固定,但是好歹也整成了可以完整显示应用名称了。分析: 在设置中既然有该功能,原创 2014-04-30 16:17:17 · 9492 阅读 · 4 评论 -
AlertDialog或者Dialog显示的内容异常
在Android中显示一个Dialog,为了性能更优化,会遵循这样一个机制。现在缓存中查找是否有包含该DialogID的对话框,如果有的话直接调用;反之就重新创建一个。该方法对于性能优化比较有用,但是对于我们每次显示对话框都要求显示不同内容的需求来说就有点麻烦了。方法就是在创建这个Dialog之前先将他从缓存中移除。如下: switch(id) { case原创 2012-12-19 16:14:32 · 2954 阅读 · 0 评论 -
ProgressDialog不显示
在程序中有如下代码:proDialog.setMessage(mContext.getResources().getString(R.string.installing)); proDialog.show(); installBatch2();//在程序运行期间显示进度条,使界面更友好一点 proDialog.cancel();这一段代码是在一个按钮的响应函数里面,原创 2012-12-14 17:38:55 · 9635 阅读 · 1 评论 -
如何重置桌面
在软件开发过程中,有时候会碰到需要重置桌面的情况。类似的效果为清空桌面程序的用户数据,这样系统会从defaultworkspace.xml文件重新读取桌面程序图标排列,让桌面按照我们的要求重置。验证可行的方法:sharedUserid=android.uid.system;(经过测试设置成android.uid.packageinstaller也可以调用clear函数)使用原创 2012-12-25 09:21:15 · 4162 阅读 · 0 评论 -
java.lang.IllegalArgumentException: no dialog with id 1 was ever shown via Activity#showDialog
这个是因为使用dismissDialog(id)的时候,系统并没有发现有Dialogid为指定数据的Dialog,所以最好把dismissDialog替换成removeDialog(dialogid)为好。原创 2012-12-24 19:04:50 · 9592 阅读 · 3 评论