android
文章平均质量分 66
李光宇
很懒...什么也没留下
展开
-
艺龙旅行闪退问题分析
三方app闪退其实一般来说就是crash,常见的crash应该是弹窗提示的,但是目前国内三方app一般不会弹窗的,而是直接退出。这个就是用到了UncaughtExceptionHandler,这个可以处理java未捕获的全局异常。为了验证这个想法,可以用apktool反编译apk来查看java -jar apktool_2.2.1.jar d yilonglvxing_9282.apk原创 2017-06-19 09:40:00 · 2523 阅读 · 0 评论 -
申请获取权限无效问题分析
最近拿到高通的新机器,开发中突然有同事发现一个问题,Contacts替换后android.permission.CALL_PHONE权限获取不到,系统的联系人应用居然没法打电话看日志中拉起GrantPermissionsActivity的intent是已经发送的,那么就看权限对话框为何没有出现。android/packages/apps/PackageInstaller/src/com/a原创 2017-09-13 14:38:57 · 4213 阅读 · 0 评论 -
mtk和高通是如何把自己的内容打包到系统镜像中的
有人问我这样一个问题,就是高通或者mtk是如何将自己的内容打包到system.img中的。接触编译比较少的,所以对这个还是陌生的,不过目前android的相关资料太详实了,自己看文章和追踪代码过程记录如下。文章首推“老罗Android之旅”,其中有4篇文章讲解编译系统的,这个是强烈推荐大家看的。简略的原理如下:各个模块下都会有Android.mk文件,这个是编译脚本的片段。在一次Android原创 2017-08-28 17:35:26 · 2261 阅读 · 0 评论 -
系统换了新签名,但是apk还是用老签名才能运行
Android系统的签名文件都在build/target/product/security/目录下,芯片厂商或者方案商发布的源码都是google默认签名,手机终端商一般来说会换签名。新签名的apk在旧签名的系统上是无法运行,反过来也一样。不过今天遇到个奇葩的问题,问题手机的Dialer.apk只用旧签名的才能运行,push新签名的apk会没有反应Dialer的签名见Android.mk原创 2017-09-14 13:48:54 · 486 阅读 · 0 评论 -
移动运营商订制短信卡片无法点击
移动定制机的软件要求很多。最近遇到个奇葩的问题,就是何如移动只能短信sdk后原创 2017-09-08 11:07:02 · 652 阅读 · 0 评论 -
GlowPadView
packages/apps/InCallUI/src/com/android/incallui/widget/multiwaveview下都是GlowPadView相关的文件动画Ease.javastatic class Linear { public static final TimeInterpolator easeNone = new TimeInterpolat原创 2017-03-15 08:55:38 · 678 阅读 · 0 评论 -
交通银行闪退问题
解决了艺龙闪退的问题后,认为解决交通银行闪退会是同类问题,可是我失望了,没有任何日志输出。只能反编译看了,返现smali文件夹很小,全部的文件只有如下。/home/lgy/decode/com.bankcomm.Bankcomm_3110/smali/com/secneo/apkwrapper/ApplicationWrapper.smali/home/lgy/decode/com.ba原创 2017-06-19 13:44:15 · 6452 阅读 · 0 评论 -
勿扰模式详细分析
之前也写过勿扰模式的大概分析文章勿扰模式代码结构简析不过只是大概讲了下相关文件的位置和作用,具体只分析了勿扰模式对来电铃声影响的代码。在做具体需求的时候发现勿扰模式远比我想象的复杂,本文记录下几个开发中遇到的勿扰模式相关知识。系统通知拦截的实现勿扰模式控制的就是通知的行为,发送通知的时候控制通知铃声是否响,通知的UI是否展现等等。入口的方法就在发送通知的时候frameworks/b原创 2017-10-13 11:39:13 · 4318 阅读 · 3 评论 -
cdma拨号的细节记录
cdma拨号是没有alerting状态的,即接通基站后就是active状态。所以即使对方没有接通,手机也会开始通话计时。针对这种问题,运营商后续加入了接通的上报事件,这样接通后手机的计时会重置。但youyu原创 2017-10-13 10:21:34 · 831 阅读 · 0 评论 -
Shape画圆环的注意点
最近UI有需求要画个圆环,当然想到用shape,本着copy来代码就能用的原则百度了下,发现好多例子都是这样写的 <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="ring" android:innerRadius="100dp" androi原创 2017-09-05 14:41:08 · 6255 阅读 · 3 评论 -
其实和app无关的anr问题分析
每个Android程序员都会遇到anr问题,anr问题的根源是代码处理中超时,例如超时广播处理超时10s之类的。处理的方法百度google可以见到千篇一律的主线程不要做耗时操作,这个是没错,不过依据我个人这几年的经验来看,大部分app遇到的anr问题和app自生是没有任何关系的。看一份日志:08-19 12:14:57.269475 1111 1130 E ANRManager: ANR原创 2017-08-25 15:28:40 · 5072 阅读 · 2 评论 -
dex2oat导致机器很卡的问题分析
上周末碰到玩游戏爆卡,周一过来连上adb看个究竟,发现dex2oat进程占用的cpu很高,游戏运行中一直是大于70%dex2oat应该是在安装app的时候转化java代码到机器码,这样会大幅提高程序效率。对于app来说这个应该只会跑一次,但是在我手机上dex2oat一直是处于运行状态,这个很奇怪。看日志:08-21 12:21:47.476 I/dex2oat (15925): /sy原创 2017-08-21 14:34:54 · 8269 阅读 · 0 评论 -
UnsupportedOperationException: Failed to resolve attribute xxx系列的问题
接着上篇文章,讲到了有个UnsupportedOperationException的问题Caused by: java.lang.reflect.InvocationTargetException\\n\\tat java.lang.reflect.Constructor.newInstance(Native Method)\\n\\tat com.elong.mobile.plu原创 2017-06-19 10:10:04 · 20451 阅读 · 5 评论 -
procrank和dumpsys meminfo的pss大小不同的原因
常用的查看app运行内存消耗的有adb shell procranklgy@lgy-PC:~$ adb shell procrank|grep dialer19164 1646272K 68160K 8043K 6080K 9304K 284K com.android.dialer和adb shell dumpsys meminfolgy@lgy-PC原创 2017-06-30 16:27:22 · 3975 阅读 · 1 评论 -
一个SQLiteReadOnlyDatabaseException的问题
最近测试同事上报了随机的一个crash问题,看日志是SQLiteReadOnlyDatabaseException的问题。我自己写的ContentProvider代码就是在程序目录下放置数据,所以不是网上常见的缺少写sd卡权限的原因。具体分析要看日志:06-08 10:31:46.358 1913 1913 E AndroidRuntime: android.database.sqlite原创 2017-06-13 10:28:27 · 8163 阅读 · 3 评论 -
勿扰模式代码结构简析
勿扰模式是Android 7.0开始加入的功能。它的核心思想是拦截通知,例如原生中来电UI是通过通知拉起来的。代码分散在几部分。设置代码在Settings中原创 2017-08-08 11:05:26 · 2442 阅读 · 0 评论 -
“SIM卡状态”中的dBm和状态栏的信号格数是对应的吗?
Android手机设置中最后一项一般都是“关于手机”,在这个项目中可以找到查看sim卡状态的子页面。其中可以查看信号强度,测试人员可以依据dBm和状态栏的信号格数大致确认两者之间的关系。这个大部分情况下是ok的,不过对于Cdma网络来说这个就有可能出问题了。截图中的状态栏信号格数是双行的,这个是Cdma的特点,1X信号和EVDO信号同时注册的,1x用来语音通话,EVDO就和其名称一原创 2017-08-04 16:16:23 · 6101 阅读 · 0 评论 -
CarrierConfigManager解析
最近做一个高通项目的移植,发现网络设置中的cdma和gsm设置项目是同时出现的,之前mtk的项目也是遇到过同样的问题。修改起来很简单,不过要探究根源还是小费力气的。packages/services/Telephony/src/com/android/phone/MobileNetworkSettings.javaprivate void updateBody() { ...原创 2017-08-04 18:05:35 · 4995 阅读 · 2 评论 -
radiolog不全的问题
最近遇到一个bug,发现rillog中大部分信息是没有的,问题根本无法排查。从telephony framework最常用的Rlog开始分析frameworks/base/telephony/java/android/telephony/Rlog.java public static int d(String tag, String msg) { return原创 2017-07-26 15:52:46 · 695 阅读 · 0 评论 -
subid和slotid
概述slotid或者phoneid是指卡槽,双卡机器卡槽一值为0,卡槽2为1,以此类推,不过国内也就双卡和单卡机器了,三卡机器只听说在遥远的印度有。subid用过数据库的同学比较好理解,subid就是主键递增项,值从1开始,机器每插入一个新卡(iccid是没有见的,值就会加1,iccid每个sim卡是唯一的)。插入双卡后数据库中就会有subid值为1和2的两个数据条目,拔卡插卡交换卡槽数据原创 2017-03-02 14:57:07 · 13837 阅读 · 8 评论 -
weak global reference table overflow (max=51200)
最近有测试上报一个Dialer native crash的问题10-04 01:00:00.580 18664 18664 F art : art/runtime/runtime.cc:422] Runtime aborting...10-04 01:00:00.580 18664 18664 F art : art/runtime/runtime.cc:422] Abort原创 2017-10-13 11:29:32 · 7016 阅读 · 4 评论 -
Android应用双开实现
Android应用双开是某些特殊人群的需要,目前已知的双开方案个人总结为3种:1.反编译apk,然后修改uid等相关信息让系统弄认为apk有不同,然后重新安装。这个方法是简单粗暴的,不过目前主流的app估计都会预防这种修改方法的。对于手机厂商来说,拥有整个系统的代码权限,不会用这么低级的手段。此种方法我个人也无深入研究。2.插件化,在启动代理apk后动态加载需要双开的apk,此种方法是双开...原创 2017-10-23 16:44:20 · 23165 阅读 · 6 评论 -
BasicManageProfile申请设备管理user的流程分析
上篇双开中提及了BasicManagedProfile demo,本文分析下demo中申请manage profile user的流程development/samples/browseable/BasicManagedProfile/src/com/example/android/basicmanagedprofile/SetupProfileFragment.java priva原创 2017-10-24 09:16:25 · 2401 阅读 · 3 评论 -
Android EditText 换行和对齐问题研究
1.原生方法换行Android textview换行属性有BreakStrategy和hyphenationFrequencyandroid:breakStrategyBreak strategy (control over paragraph layout).Must be one of the following constant values.ConstantValueDescription...原创 2018-04-25 16:51:50 · 7141 阅读 · 0 评论 -
android:maxWidth无效
android:maxWidth用过几次,之前有效,今天再用就无效了。其实是有两个注意点的,记录下:1. android:adjustViewBounds="true"2.android:layout_width不能是match_parent原创 2018-05-07 15:19:26 · 6181 阅读 · 0 评论 -
WeakReference在android中的使用场景
android中绝大部分内存泄漏都是Context导致的,应为context的传递实在是太多了。基本原理就一条,如果class B持有class A,而class B的生命周期比class A长,A要销毁但是因为B的引用而无法销毁那么leak就发生了。实际代码中,class B一般是异步代码(执行时间长且不确定)或服务(一般和UI无关),class A是Context持有者或者就是Cont...原创 2018-10-12 10:45:49 · 2180 阅读 · 0 评论 -
gpu呈现模式分析柱状图无故爆表的原因
android开发估计都会用gpu呈现模式分析来看下app运行时候的表现,不过最近遇到一个奇怪的现象,配置很好的android机器,例如三星Galaxy和pixel2,都是四五千的机器,在一个app的页面gpu呈现模式分析柱状图却会稳定的超过绿线,熟悉android的应该知道这是帧率不足的表现,应该优化。不过同样的页面在一个低端的机器例如魅蓝却不会出现这种状况,这个很是郁闷。在RecyclerVi...原创 2018-10-08 16:35:59 · 1018 阅读 · 0 评论 -
android9.0后对hide方法反射限制的分析
和之前同事吃饭时候了解到一个消息,就是android9.0开始限制@hide方法的使用,即使是用反射也无法使用hide方法。把我吓出一身汗,app中用各种反射是家常便饭,尤其是对framework很熟的情况下。回公司赶快看下android的官方文档:https://developer.android.com/about/versions/pie/restrictions-non-sdk-int...原创 2018-10-08 16:49:52 · 12727 阅读 · 3 评论 -
android clipToPadding的一点理解
这个网上总结的很多,见android 关于 clipToPadding 和 clipChildren区别和作用最近遇到的一处android ui问题最终使用clipToPadding得到了完美的解决,下面谈下个人对clipToPadding的理解。这个是ViewGroup的属性,View是没有的 clipToPadding必须与paddingTop等属性一起用,不然没有任何意义 默认的...原创 2018-10-28 14:53:45 · 1393 阅读 · 0 评论 -
android button背景图片不拉伸的一种处理方法
一般来说UI给的图片比例应该和控件是正好符合的,但是实际操作过程中会发现可能不符合的情况,比例不对直接设置background的话background会被拉伸,这个时候一般来说如果能像ImageView一样设置scaleType为centerCrop或者center就好了。不过可惜的是button等其他控件是没有这个属性可以设置的。但是是有其他方法可以做到的,也很简单,使用bitmap的xml...原创 2018-10-25 20:21:38 · 5522 阅读 · 0 评论 -
crashlytics接入后不上报crash的问题
crashlytics接入十分简单,安装android studio的fabric插件,一路点击鼠标即可,一个字符的代码都不用敲。不过接入后可能会发现crash不上报啊,这个太坑了,笔者就正好遇到了这个问题。官方文档中也写了解决方法,就是把crashlytics的初始化代码挪到其他三方库初始化之后就OK了。其实这个原因大概也能猜测出来。java捕捉未捕获异常使用的是UncaughtEx...原创 2018-10-25 20:34:56 · 1851 阅读 · 0 评论 -
EditText自定义光标的问题
自定义光标按说很简单,xml中定义android:textCursorDrawable不过我自定义了一个Shape后发现与预期不符,不知原因在哪里,不想多追究了,直接拿原生的改吧。<inset xmlns:android="http://schemas.android.com/apk/res/android" android:inset="2dp" > <...原创 2018-04-25 16:43:31 · 1223 阅读 · 0 评论 -
TextView行高的问题
上文中提及了自定义选择背景,自定义后如果不是像原生一样填充满选择区域的话,例如每行有空隙,就会发现另一个问题,textview每行的高度居然有差异。具体来说是分为首行,尾行,单行,中间行四种。在Android TextView行间距解析中其实已经解释了这种现象的原因。StaticLayout.javaprivate int out(CharSequence text, int start, int...原创 2018-04-25 16:31:50 · 1415 阅读 · 0 评论 -
EditText选择背景自定义
默认的选择背景绘制流程TextView.java@Overrideprotected void onDraw(Canvas canvas) { … Path highlight = getUpdatedHighlightPath(); if (mEditor != null) { mEditor.onDraw(canvas, layout, highlig...原创 2018-04-25 16:06:31 · 811 阅读 · 0 评论 -
Create User流程
framework中User创建流程和PackageManagerService相关的详细流程原创 2017-10-24 10:59:45 · 4224 阅读 · 0 评论 -
开启User流程
startUser的流程原创 2017-10-26 14:48:32 · 1987 阅读 · 0 评论 -
installExistingPackageAsUser方法的分析
Android应用双开实现中用到installExistingPackageAsUser方法,下面分析下该方法的流程public int installExistingPackageAsUser(String packageName, int userId) { //检查安装app权限 mContext.enforceCallingOrSelfPermissio原创 2017-10-26 15:47:13 · 3481 阅读 · 0 评论 -
rxjava源码分析
Rxjava在Android界很火,不过博主工作并不接触网络开发,没有大批量多层次的使用异步任务的机会。一直听说但是并没有使用,更不会深入分析它的机制。不过出于好奇本文会研究下源码中个人关注的点,注意本文并不介绍rxjava如何使用。源码版本是RxJava-2.x,2018.1.5下载。rxjava的起点就是Observable.java1. create先看下create的d原创 2018-01-09 14:51:51 · 908 阅读 · 0 评论 -
okhttp,retrofit,volley,HttpClient,HttpUrlConnection之间的关系
Android网络开发不可避免的会接触到标题中的一些名词,本文整理下这个之间的关系。对软件来说有个万能定律定律就是有什么“解决不了的问题就加个中间层,如果还是解决不了就多加几层”基于unix的计算机操作系统可以分为内核层和用户层1.内核层的驱动框架和系统调用。按网络层次来说,物理设备网卡,线路等对应最底层,tcp和ip由内核实现。对上的系统调用就围绕socket展开(诸如绑定,监听等)原创 2018-01-04 12:21:17 · 1825 阅读 · 0 评论 -
RxAndroid的改动
RxAndroid基于RxJava,可以说就是RxJava。main目录除去测试目录只有4个java文件,添加了Android特有的schedulers。RxAndroid-2.x/rxandroid/src/main/java/io/reactivex/android/schedulers/HandlerScheduler.javaAndroid中的Handler可以控制代码的运原创 2018-01-09 15:14:09 · 262 阅读 · 0 评论