Android
文章平均质量分 62
hauler~
这个作者很懒,什么都没留下…
展开
-
Android APK未签名提醒
最近新建了一个项目,在build.gradle中配置好了签名,在执行打包的时候打出的包显示已签名,但是在上传市场的时候提示未签名。于是排查了好久,发现在build.gradle中配置的minsdk =24,会导致不使用V1签名,于是我使用apksigner验证了一下,确实是没有使用V1签名。按道理apk设置了minsdk>=24应用市场就不需要校验V1签名,只需要校验V2即可,因为该APK根本不可能安装到仅支持V1签名的设备上。因此怀疑是应用市场在检测APK是否签名时仍然使用的是V1签名校验的方式。原创 2023-12-29 00:35:48 · 772 阅读 · 0 评论 -
Android隐私合规检测方法
背景:公司的APP被工信部通报:1.在用户确认隐私权限以前会获取用户的mac地址。2.在app内频繁的获取定位,超过了场景也必须的频次。排查过程收到通报我们一脸懵逼,我们排查业务代码中没有获取mac地址,并且我们的定位sdk只定位一次,于是想到了可能是三方sdk在获取mac地址。于是我们电话工信部下的全国APP技术检测平台咨询到他们是通过getHardwareAddress方法的调用来检测MAC地址的获取。至于第2条没有给出确切的回复,他们说可能是接口里频繁的带有用户位置信息,超出了..原创 2021-02-02 19:04:27 · 14720 阅读 · 28 评论 -
Glide原理之Engine#load
Engine类是Glide框架加载图片的入口。接下来我们分析load的过程。1. Engine#loadpublic <R> LoadStatus load( GlideContext glideContext, Object model, Key signature, int width, int height,...原创 2019-09-03 19:01:40 · 1081 阅读 · 0 评论 -
Glide原理之into过程
由于into过程篇幅过长,不利于阅读,因此把Engine#load过程单独拆出来分析。1.RequestBuilder#into /** * Sets the {@link ImageView} the resource will be loaded into, cancels any existing loads into * the view, and frees an...原创 2019-08-27 19:37:52 · 1547 阅读 · 0 评论 -
Glide原理之load过程
上文我们了解到Glide#with方法返回的是RequstManager对象,因此,load方法调用的是RequstManager.load方法。1. RequstManager#load /** * 先调用asDrawable然后调用RequestBuilder#load(String) * @return A new request builder for loadin...原创 2019-08-27 14:58:54 · 831 阅读 · 0 评论 -
Glide原理之with过程
本文基于Glide4.9.0版本讲解。Glide目前是Android开发中主流的图片加载框架。有必要花时间研究一下它的实现原理。因此,从本文开始将对Glide主要流程进行分析,由于Glide的加载链条比较长,便于理解我们分开分析,先分析Glide.with过程。1.Glide.with(FragmentActivity)/** * 根据FragmentActivity获...原创 2019-08-26 19:31:01 · 2039 阅读 · 1 评论 -
Activity.onWindowFocusChanged首次执行过程源码分析
触发onWindowFocusChanged的情况有多种,比如应用前后台来回切换、软键盘弹出或者隐藏、首次进入一个Activity后会在onResume方法之后调用等,我们以最后一种场景,分析它的执行过程。我们以ActivityThread.handleResumeActivity()方法作为切入点开始分析。public final class ActivityThread extend...原创 2019-08-13 19:45:33 · 2973 阅读 · 0 评论 -
Okhttp3源码分析
目录一.Interceptors1.RetryAndFollowUpInterceptor2.BridgeInterceptor3.CacheInterceptor4.ConnectInterceptor5.CallServerInterceptor二.StreamAllocation1.newStream()2.findHealthyConnection...原创 2019-05-15 18:04:17 · 2318 阅读 · 0 评论 -
Bitmap.Compress的变化
android 8.0以上,Bitmap中的方法添加了StrictMode.noteSlowCall方法, public boolean compress(CompressFormat format, int quality, OutputStream stream) { checkRecycled("Can't compress a recycled bitmap")...原创 2019-02-13 11:53:12 · 1115 阅读 · 0 评论 -
Android权限
Android 中有上百种权限,现在将所有的权限归为两类:普通权限和危险权限。普通权限是指那些不会威胁到用户安全和隐私的权限,这部分权限系统会自动帮我们进行授权不需要手动操作。危险权限则表示那些可能会触及到用户安全隐私或者对设备安全造成影响的权限,如获取手机联系人信息等权限,权限必须有用户授权才可以,否则程序无法使用相应的功能。下面列出 Android 中所有的危险权限,一共是9组24...原创 2018-12-13 17:23:36 · 433 阅读 · 3 评论 -
解决ViewPager FragmentPagerAdapter不刷新问题
ViewPager+FragmentPagerAdapter使用时发现notifyDataSetChanged()方法不起作用,查看FragmentPagerAdapter源码发现中FragmentPagerAdapter中的Fragment是从FragmentManager中根据tag取的。如果FragmentManager中有相应的Fragment就会复用。也就导致了ViewPager不刷...原创 2018-11-12 14:10:08 · 2217 阅读 · 0 评论 -
强制清除 gradle 依赖缓存
Windows: gradlew build --refresh-dependencies Mac: ./gradlew build --refresh-dependencies原创 2018-09-22 15:48:04 · 2264 阅读 · 0 评论 -
android RelativeLayout中android:layout_marginBottom的不起作用问题
RelativeLayout布局中:1、当设置为android:layout_height="wrap_content"时,最下面的控件layout_marginBottom属性无效,如果其他控件使用layout_above让自己处于最下面的控件之上,那么layout_marginBottom属性有效。2、当设置为android:layout_height="match原创 2018-02-07 16:45:03 · 1398 阅读 · 0 评论 -
CheckedTextView 文字居中
android:textAlignment="center"原创 2018-01-29 14:47:07 · 1903 阅读 · 0 评论 -
setBackground()版本兼容问题
在android 4.0系统中没有setBackground() 方法,所以在4.0系统手机上使用会出现异常:java.lang.NoSuchMethodError: x.x.x.setBackground所以低版本需要用setBackgroundDrawable来代替Drawable draeable = new BitmapDrawable(bitmap);原创 2018-02-05 11:51:58 · 1140 阅读 · 0 评论 -
Android Library 上传到JCenter仓库
如何创建android lib就不做描述了,废话不多说直接开始上传步骤:一、注册google邮箱,在申请个人账号的时候只有gmail邮箱才能申请成功。二、注册Bintray账号通过这个账号发布到JCenter上。注册地址官网:https://bintray.com/,但是现在这个地址默认是注册组织的,注册后会有一个月试用期。我们一般需要的是个人类型,正确的注册地址为:https://bintray...原创 2018-01-25 16:07:19 · 512 阅读 · 0 评论 -
Arrays.asList 转换数组后add或remove出现java.lang.UnsupportedOperationException异常
String[] array = {"a","b","c"};List<String> list = Arrays.asList(array);list.add("d");list.remove(0);add或remove时抛出java.lang.UnsupportedOperationException异常的原因是因为,Arrays.asList()方法返回的...原创 2018-01-31 10:44:42 · 985 阅读 · 0 评论