Android
文章平均质量分 85
Gdeer
这个作者很懒,什么都没留下…
展开
-
详解 View 的构造函数
我们经常用到自定义 View,它有四个参数,但往往不太关心它们,等用到的时候就很容易混淆,今天来看看它们到底是什么意思。View( Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes ) AttributeSet attrs从 xml 中提取的 Attribute 集合,通过 context.obtainStyledAttributes 生成的 TypedA原创 2020-10-12 10:31:39 · 609 阅读 · 0 评论 -
集成 Google 登录
官网:https://developers.google.com/identity/sign-in/android/start-integrating基本按官网步骤进行,下面列举一些错误码。错误码code=7NETWORK_ERROR,检查网络是否通畅(是否科学)code=10sha1 签名不对如果已经设置过一遍,在设置的地方修改 sha1,最终的值不会改变,需要删除后重新添加才能生效。在 consoler 中可以查看和删除生成的 key。code=12500A non-recove.原创 2020-05-27 23:03:25 · 1656 阅读 · 0 评论 -
应用覆盖安装后桌面图标消失问题
一、现象当一个 app 有两个入口 Activity(标记了 main、launcher 的 Activity,如集成了 LeakCanary 的 app),安装后,桌面上会出现两个图标。当在 androidManifest 中删除一个 activity 或将其 disable,再覆盖安装,桌面上的两个图标都会消失(有些机器会这样,如 mix2;在模拟器上只有被删除或者 disable 的那个...原创 2020-04-11 12:14:19 · 2416 阅读 · 0 评论 -
Gradle 理解:incremental task
基于 Gradle 5.3.1文章目录一、概述1.1 incremental task 与 incremental task action1.2 判断标准二、执行实例2.1 IncrementalReverseTask 类2.2 IncrementalReverseTask 类型的 task2.3 第一次执行2.4 无改变第二次执行2.5 更新 input 后执行2.6 移除 input 后...原创 2020-04-06 11:56:24 · 5269 阅读 · 0 评论 -
为什么 Dialog 不能用 Application 的 Context
抛出的异常:Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an applicationat android.view.ViewRootImpl.setView(ViewRootImpl.java:685)at android.view...原创 2020-04-05 10:44:10 · 456 阅读 · 0 评论 -
ConnectivityManager.CONNECTIVITY_ACTION 广播的粘性
项目中在 Application 初始化的时候监听了 ConnectivityManager.CONNECTIVITY_ACTION (即网络状态变化)的广播。结果每次 Application 初始化的时候都会收到这个广播,找了很久都没发现是哪里发的。后来才发现,原来这个广播是一个粘性广播,在每次注册的时候都会直接收到当前网络状态的一个广播。...原创 2020-03-13 16:44:15 · 1983 阅读 · 0 评论 -
Gradle 理解:configuration、dependency
概念什么是 dependencies 的 configuration?不同的 configuration 用来引用不同领域(或不同用途)的 dependencies。如:implementation、api、testRuntime。也就是 configuration 用来管理一批 dependencies。configuration 的继承与复合...原创 2020-03-12 22:23:23 · 9080 阅读 · 1 评论 -
Gradle 理解:Artifact
文章目录一、概念ArtifactPublishArtifactConfigurablePublishArtifactartifact {}artifact {} 中内容二、使用2.1 使用 archives2.2 使用自定义 Configuration2.3 使用 maven 插件2.4 使用 maven-publish 插件一、概念Artifact翻译为:构件、工件。代表的是一个领域对象...原创 2020-03-11 23:23:36 · 3430 阅读 · 0 评论 -
MotionLayout 的使用
文章目录一、概述二、设置项2.1 MotionScene 设置项2.1.1 基础项2.1.2 可配置属性2.2 MotionLayout 设置项一、概述MotionLayout 是 ConstraintLayout 的子类。每个 MotionLayout 需引用一个 MotionScene,其中包含相应布局的所有运动描述。MotionLayout:布局信息MotionScene:运动描...原创 2020-03-01 17:30:59 · 951 阅读 · 0 评论 -
设计模式:工厂方法模式与抽象工厂模式
文章目录一、定义1.1 工厂方法模式1.2 抽象工厂模式二、类图三、实例3.1 Retrofit(2.5.0)3.2 Okhttp3(3.12.0)3.3 Glide(4.9.0)一、定义1.1 工厂方法模式工厂方法模式,又称工厂模式着重于方法,一个工厂只有一个方法,生产一种产品。(我称之为,单方法工厂模式)abstract class BaseFactory { abstra...原创 2020-02-25 21:51:42 · 192 阅读 · 0 评论 -
Retrofit 源码解析
文章目录一、名词解释二、使用三、原理四、问题一、名词解释Service:定义的接口类ServiceMethod:Service 中的方法Call<R>:参数类型是 R 的 Call,实际发起网络请求的类responseType(R):Call<> 的参数类型;如 Call<AClass> 的 responseType 为 AClassCallAdap...原创 2020-02-25 21:30:19 · 193 阅读 · 0 评论 -
ARouter 源码解析
一、名词解释Postcard:明信片,用于发起启动请求path:指定一个请求的路径:如 /modulea/homegroup:path 的分组,为 path 中的第一个节点:如 moduleaRouteMeta:存储基础路由数据(如 Activity 类对象等)xxxService:接口,用于提供某种功能,继承了 IProvider 接口;如要使用,需自己实现接口routes:path...原创 2020-02-21 17:23:51 · 259 阅读 · 0 评论 -
后台启动 Activity
Android 21 及以上,可以通过 makeTaskLaunchBehind 来在后台启动一个 Activity。执行代码:val intent = Intent(this, ActivityA::class.java)intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT)val compat = ActivityOptionsCompa...原创 2020-02-18 20:01:09 · 948 阅读 · 0 评论 -
加载外部 apk 中的资源
文章目录原理实例原理apk 中的资源放在 resources.arsc、assets 中,它们都要靠 AssetManager 来访问,我们又通过 Resources 来调用 AssetManager。要访问外部 apk 中的资源,就要通过该 apk 的 resources.arsc,创建一个新的 AssetManager 和一个新的 Resources。实例下面的例子,会在宿主 ap...原创 2020-02-18 16:38:15 · 662 阅读 · 1 评论 -
启动没有在 AndroidManifest 中注册的 Activity
文章目录一、报错二、思路三、启动流程3.1 hook 点的选择3.2 版本差异四、代码4.1 Hook4.2 替换点4.3 恢复点一、报错启动没有在 AndroidManifest 中注册的 Activity,会报错:android.content.ActivityNotFoundException: Unable to find explicit activity class {...};...原创 2020-02-12 22:15:05 · 2051 阅读 · 7 评论 -
ListView 嵌套 ListView,为什么里面的 ListView 不能滑动
ListView 嵌套 ListView,child 是不能滑动的,为什么呢?我们来看看。文章目录一、源码分析二、结论2.1 不做处理的 ListView 嵌套 ListView2.2 重写父 ListView 的 onInterceptTouchEvent(),使其返回 false一、源码分析ListView 的滚动在 scrollIfNeeded() 方法中实现。scrollIfNee...原创 2019-12-27 16:19:49 · 639 阅读 · 0 评论 -
ClassLoader 加载外部 apk 内的普通类
新建工程 SimpleApk,新建 Person 类:package com.gdeer.simpleapk;public class Person { private String name; public String getName() { return name; } public void setName(String name) {...原创 2019-12-13 16:31:28 · 375 阅读 · 0 评论 -
Android Studio run 失败 Failed to process
Failed to process E:\WeatherAndroid\app\build\intermediates\transforms\profilers-transform\debug\63.jar同步成功、run 失败。在特定机型上出现该问题,如移动 M652,api 22,5.1。在 stackoverflow 上查到,可以通过关闭 Advanced profiling 来解决...原创 2019-12-11 16:31:38 · 1085 阅读 · 0 评论 -
Kotlin 和 Groovy 的 lambda 对比
文章目录一、格式1.1 完整格式1.2 简化格式二、trailing lambda2.1 三个参数2.2 一个参数三、it3.1 作为入参3.2 赋值给变量四、lambda 的返回值五、无用变量的处理六、外部变量的访问七、invoke一、格式1.1 完整格式// Kotlinval sum: (Int, Int) -> Int = { x: Int, y: Int -> x +...原创 2019-10-29 10:36:12 · 1917 阅读 · 0 评论 -
以彼之道,还施彼身:Android 模拟定位
思路两种方式:TestProvider反射将高德地图返回的数据再传给我们自己的应用。原创 2019-10-28 16:15:05 · 548 阅读 · 0 评论 -
将自己的库发布到 JitPack
JitPack 的 GitHub 地址:https://github.com/dcendents/android-maven-gradle-plugin文章目录集成插件打 tag集成插件在 module 集成插件:// 根 build.gradlebuildscript { repositories { mavenCentral() /...原创 2019-10-28 15:13:41 · 319 阅读 · 0 评论 -
Kotlin 基础:泛型
本文介绍 Kotlin 中的泛型,可与 Java 中的泛型 配合食用。文章目录一、为什么要有泛型二、泛型的分类三、泛型的关键字3.1 T3.2 out3.3 in四、泛型类、方法的定义4.1 泛型类的定义4.2 泛型方法的定义五、泛型类、方法的使用5.1 泛型实现类5.2 通配类5.2.1 AClass\一、为什么要有泛型效率、成本减少样板代码的编写二、泛型的分类泛型类泛型方...原创 2019-10-25 16:03:14 · 267 阅读 · 0 评论 -
LocationManager 可用的位置提供器
LocationManager本Markdown编辑器使用[StackEdit][6]修改而来,用它写博客,将会带来全新的体验哦: Android 中一般有三种位置提供器可供选择: GPS_PROVIDER NETWORK_PROVIDER PASSIVE_PROVIDER原创 2015-11-27 23:03:44 · 1134 阅读 · 0 评论 -
Activity全局切换动画
有时候我们觉得系统自带的Activity切换动画不好,想要换一换,可以用下面的方法进行全局替换,先上代码(styles.xml): <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="android:windowAnimationStyle">@style/AnimationActivi原创 2016-04-22 00:14:53 · 1708 阅读 · 4 评论 -
《Android 开发艺术探索》笔记:(8)Window 和 WindowManager
Android 中的 Window 有两种概念。一种是 Window 抽象类,它的具体实现是 PhoneWindow,用来进行操作,比如生成 DecorView(PhoneWindow 通常只用在 Activity、Dialog 上)。另一种是以 View 为实体的抽象概念,用来显示。外界访问 Window (显示)要通过 WindowManager,WindowManager 会进一步访问 ...原创 2016-05-02 15:16:37 · 696 阅读 · 0 评论 -
《Android 开发艺术探索》笔记:(3)View 的事件体系
View 基础知识View 是 Android 中所有控件的基类,ViewGroup 也继承了 View。 Android 中,x 轴和 y 轴的正方向分别为右和下。 位置参数:(left , top ): View 左上角原始坐标(right, bottom): View 右下角原始坐标(x , y ): View 左上角最终坐标translationX: View原创 2019-03-03 00:27:19 · 1188 阅读 · 2 评论 -
Dialog 全屏显示
style window原创 2017-03-22 20:46:35 · 798 阅读 · 0 评论 -
Android values 文件的寻找顺序
android values 文件的寻找顺序在 720x1280 xhdpi 的机器上:values-xhdpi-720x1280(上面的 1080x1920 不会访问)values-xhdpi-480x800values-xhdpi-320x480(到底)values-xhvalues-xxhvalues-xxxh(到顶)values-hvalues-mvalues...原创 2018-03-25 18:55:36 · 1186 阅读 · 0 评论 -
RxJava-1 指南
本文基于扔物线的 给 Android 开发者的 RxJava 详解 提炼简化,感谢。RxJava 是什么一个词:异步。说到根上,它就是一个实现异步操作的库,而别的定语都是基于这之上的。RxJava 好在哪里一个词:简洁。能把什么复杂逻辑都能穿成一条线的简洁。API 介绍和原理解析1.概念:扩展的观察者模式四个基本概念:Observable、O...原创 2018-05-03 10:54:39 · 184 阅读 · 0 评论 -
《Android 开发艺术探索》笔记:(4)View 的工作原理
ViewRoot 和 DecorViewViewRoot 对应于 ViewRootImpl,用来对 view 进行操作,它和最顶层 view 一起组成了显示上的 Window。DecorView 是 Activity、Dialog 中最顶层的 View。View 的绘制流程总述:View 的绘制流程是通过 ViewRoot 完成的。在 ActivityThread 中,当 Ac...原创 2018-04-27 23:52:06 · 277 阅读 · 0 评论 -
Android 中的 ClassLoader
ClassLoaderClassLoader 是用来加载 class 的类,它是一个抽象类。通过一个类的二进制名,一个 classLoader 会尝试去定位或生成组成一个类需要的数据。一个典型的策略是把类名转化为文件名,然后从文件系统读取这个文件名的 class 文件。二进制名:&quot;java.lang.String&quot;&quot;javax.swing.JSpinner$DefaultEditor...原创 2018-04-29 18:26:43 · 509 阅读 · 0 评论 -
Can not perform this action after onSaveInstanceState
protected void onSaveInstanceState (Bundle outState)在 Activity 可能被 kill 之前调用,保存每个实例的状态,使它们可以在 onCreate(Bundle) 或 onRestoreInstanceState(Bundle) 方法中恢复(outState 会传给这两个方法)。比如,A 启动了 B,A 不可见了,A 就会通过执行这...原创 2018-06-23 21:34:41 · 665 阅读 · 0 评论 -
一个最简单的自定义 Gradle Task
Gradle脚本的执行的三个过程:初始化 分析有哪些module将要被构建,为每个module创建对应的 project实例。这个时候settings.gradle文件会被解析。配置:处理所有的模块的 build 脚本,处理依赖,属性等。这个时候每个模块的build.gradle文件会被解析并配置,这个时候会构建整个task的链表(这里的链表仅仅指存在依赖关系的task的集...原创 2018-06-25 00:00:19 · 1835 阅读 · 0 评论 -
Error: java.lang.SecurityException: install operation deny
在安装应用时,出现了这样的报错:06/19 13:23:47: Launching app$ adb push /Users/gdeer/emptytest/app/build/outputs/apk/app-debug.apk /data/local/tmp/com.gdeer.emptytest$ adb shell pm install -t -r &amp;quot;/data/local/tm...原创 2018-06-19 14:03:36 · 2109 阅读 · 0 评论 -
Android 获取 apk 签名信息
已知 keystore 文件(不一定是 keystore 后缀):keytool -list -v -keystore tianqi_key.key已知 apk 文件:1. 改为 zip 并解压2. 获取 META-INF 中的 CERT.RSA3. keytool -printcert -file CERT.RSA在名称为 mykeystore 的密码库生成别名为 myk...原创 2018-06-19 17:12:48 · 1632 阅读 · 0 评论 -
Java 中打印 Exception 的方式汇总
e.getMessage(): exepct ‘[‘, but error, pos 1, json : sssse.getLocalizedMessage(): exepct ‘[‘, but error, pos 1, json : sssse.toString(): com.alibaba.fastjson.JSONException: exepc...原创 2018-06-20 13:19:14 · 1958 阅读 · 0 评论 -
android 开发中的 charles 使用技巧
charles 是一个抓包工具,可以记录当前网络的请求。在 android 开发中使用 charles 能给我们提供很多便利。如何使用在电脑上打开 charles,在顶部的工具栏中选择 Proxy/Proxy Settings,设置端口号,勾选 Enable transparent HTTP proxying。 然后为手机设置代理,打开 wifi 管理,进入高级选项,设置代理为手...原创 2018-06-28 00:00:01 · 2001 阅读 · 0 评论 -
Gradle 指南(一)Android 中的 gradle
新建一个 android 项目,查看一下 gradle 文件:settings.gradleGradle 使用 settings.gradle 来配置多 gradle 项目构建,新构建的项目的内容如下:include ':app'它告诉 Gradle app 目录是一个 Gradle 项目,当通过 as 新建一个 moduel,在 settings.gradle 中也会自动加入相应的目...原创 2018-10-17 23:20:03 · 219 阅读 · 0 评论 -
android studio 的 sync、make、clean、rebuild、build APK
syncidea 官网说明功能是:Synchronizing Changes in Gradle Project and IntelliJ IDEA Project即同步 gradle 项目和 idea 项目通过 as 的 help/Show Log in Finder(windows 可能略有不同), 查看 as 的 log(部分)2018-10-13 12:04:31,930 [e...原创 2018-10-13 14:09:54 · 2927 阅读 · 0 评论 -
android 开发过程中涉及到的清除缓存操作
android 开发过程中会遇到很多缓存,常常使人摸不清楚,这里总结一下,希望下次遇到缓存相关问题能有所帮助。Clean Project![在这里插入图片描述](https://img-blog.csdn.net/20181014182306599?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0dkZWVy/font/5a6L5L2T/fon...原创 2018-10-14 18:59:46 · 2871 阅读 · 0 评论