<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[ding_GC的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/ding_GC</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; ding_GC]]></copyright><item><title><![CDATA[Mac Flutter配置问题： Kotlin could not find the required JDK tools in the Java installation]]></title><link>https://blog.csdn.net/ding_GC/article/details/119323538</link><guid>https://blog.csdn.net/ding_GC/article/details/119323538</guid><author>ding_GC</author><pubDate>Mon, 02 Aug 2021 13:56:33 +0800</pubDate><description><![CDATA[Mac Android Studio 默认配置JDK环境，今天配置Maven环境时，在 Oracle 官网下载了最新的JDK 安装包，安装完毕之后。发现Flutter项目无法运行，报错信息为：



FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':business_hotelbundle:kaptGenerateStubsDebugKotlin'.
&gt; Kotlin co.]]></description><category></category></item><item><title><![CDATA[Android build.gradle 之 android-productFlavors 和 android-buildTypes]]></title><link>https://blog.csdn.net/ding_GC/article/details/105249647</link><guid>https://blog.csdn.net/ding_GC/article/details/105249647</guid><author>ding_GC</author><pubDate>Mon, 02 Aug 2021 13:47:25 +0800</pubDate><description><![CDATA[android {
    compileSdkVersion rootProject.ext.android.compileSdkVersion
    buildToolsVersion rootProject.ext.android.buildToolsVersion
    flavorDimensions "mode", "type"

    defaultConfig {
    ...]]></description><category></category></item><item><title><![CDATA[Mac OS 配置Java / adb／Android 等相关开发环境]]></title><link>https://blog.csdn.net/ding_GC/article/details/109269633</link><guid>https://blog.csdn.net/ding_GC/article/details/109269633</guid><author>ding_GC</author><pubDate>Sun, 25 Oct 2020 16:00:55 +0800</pubDate><description><![CDATA[配置 Java SDK



主要分为以下步骤：

到Oracle官网下载JDK1.8安装包。
	打开获取到的安装包按步骤安装到系统上。
	配置系统的环境变量。
	验证JDK1.8是否安装成功。
1.到Oracle官网下载JDK1.8安装包

https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html

下载需登录 Oracle 账号

2.下载完成后进行安装,Mac会默认安装到:资料库/Java/JavaVirtu.]]></description><category></category></item><item><title><![CDATA[Android 带有悬浮计时器的录屏实现]]></title><link>https://blog.csdn.net/ding_GC/article/details/107017369</link><guid>https://blog.csdn.net/ding_GC/article/details/107017369</guid><author>ding_GC</author><pubDate>Mon, 29 Jun 2020 13:20:53 +0800</pubDate><description><![CDATA[MediaRecorder


/**
 * Used to record audio and video. The recording control is based on a
 * simple state machine (see below).
 *
 * &lt;p&gt;&lt;img src="{@docRoot}images/mediarecorder_state_diagram.gif" border="0" /&gt;
 * &lt;/p&gt;
 *
 * &lt;p&gt;A c.]]></description><category></category></item><item><title><![CDATA[Android 硬件通讯之 蓝牙，USB，WIFI（二.WIFI）]]></title><link>https://blog.csdn.net/ding_GC/article/details/106075574</link><guid>https://blog.csdn.net/ding_GC/article/details/106075574</guid><author>ding_GC</author><pubDate>Tue, 12 May 2020 17:42:58 +0800</pubDate><description><![CDATA[WIFI通讯：双网络通讯

随着公司产品的不断迭代，发现上位机（App）与下位机（Vci）通讯，在收发长包数据时，蓝牙通道出现了丢字节，丢包现象。而这时候会提示用户使用USB串口通讯方式。但是USB串口通讯，必须局限于线束的连接。

为了优化这个问题，增加引入了WIFI上下位机通讯通道。

应用场景

App与硬件使用WIFI（无网）通道进行命令收到，并在App内强制使用4G通道进行Http请求



1，接收到WIFI接连的广播后，执行连接操作


    /**
     * 发现wifi设备
   .]]></description><category></category></item><item><title><![CDATA[Android 硬件通讯之 蓝牙，USB，WIFI（一.蓝牙）]]></title><link>https://blog.csdn.net/ding_GC/article/details/105763602</link><guid>https://blog.csdn.net/ding_GC/article/details/105763602</guid><author>ding_GC</author><pubDate>Tue, 12 May 2020 14:24:27 +0800</pubDate><description><![CDATA[1蓝牙



蓝牙通讯分为：经典蓝牙与低功耗蓝牙

现在所说的蓝牙设备，大部分都是在说4.0设备，ble也特指4.0设备。 在4.0之前重要的版本有2.1版本-基本速率／增强数据率(BR/EDR)和3.0 高速蓝牙版本，这些统称为经典蓝牙。



1.1 经典蓝牙



核心API:


BluetoothAdapter bluetoothAdapter = BluetoothAdapter...]]></description><category></category></item><item><title><![CDATA[ThreadLocal，ThreadLocalMap 和Thread 的关系]]></title><link>https://blog.csdn.net/ding_GC/article/details/102668252</link><guid>https://blog.csdn.net/ding_GC/article/details/102668252</guid><author>ding_GC</author><pubDate>Mon, 21 Oct 2019 17:28:21 +0800</pubDate><description><![CDATA[废话不多说，看图！！！







从上图我们可以发现Thread中持有一个ThreadLocalMap，这里你可以简单理解为就是持有一个数组，这个数组的元素是Entry类型。Entry的key是ThreadLocal类型的，value是Object类型。也就是一个ThreadLocalMap可以持有多个ThreadLocal。他们是一对多的关系



为什么ThreadLocalMap 设...]]></description><category></category></item><item><title><![CDATA[Android Studio 项目异常问题汇总]]></title><link>https://blog.csdn.net/ding_GC/article/details/84870971</link><guid>https://blog.csdn.net/ding_GC/article/details/84870971</guid><author>ding_GC</author><pubDate>Fri, 07 Dec 2018 10:52:58 +0800</pubDate><description><![CDATA[问题一

异常描述：Caused by: java.lang.RuntimeException: com.android.build.api.transform.TransformException: java.lang.RuntimeException: java.lang.RuntimeException: java.io.IOException: Failed to find byte co...]]></description><category></category></item><item><title><![CDATA[Android View事件体系汇总其三]]></title><link>https://blog.csdn.net/ding_GC/article/details/82873151</link><guid>https://blog.csdn.net/ding_GC/article/details/82873151</guid><author>ding_GC</author><pubDate>Thu, 27 Sep 2018 21:56:16 +0800</pubDate><description><![CDATA[上篇文章 Android View事件体系汇总其二 主要介绍了View的滑动与弹性滑动。接下来我们就来介绍View事件体系的核心知识与难点-View的事件分发机制。

介绍事件分发机制之前我们先来介绍三个重要的方法，点击事件的分发过程主要由着三个方式共同完成：

boolean dispatchTouchEvent(MotionEvent ev)

用于进行事件的分发，如果事件能够传递给View，...]]></description><category></category></item><item><title><![CDATA[Android View事件体系汇总其二]]></title><link>https://blog.csdn.net/ding_GC/article/details/82859926</link><guid>https://blog.csdn.net/ding_GC/article/details/82859926</guid><author>ding_GC</author><pubDate>Wed, 26 Sep 2018 22:38:03 +0800</pubDate><description><![CDATA[上一篇文章Android View事件体系总结其一主要介绍了View事件体系关联的一下基础参数与使用方法和场景。下面就开始进入正题，View的滑动相关。

在Android设备是上，滑动几乎是每个应用都会设计的问题。另外由于手机设别屏幕比较小，为了给用户展现更好的体验，就i需要使用滑动来显示或隐藏一些内容。

 

View滑动

实现滑动的效果主要有三种方式：

1，使用scrollTo/scr...]]></description><category></category></item><item><title><![CDATA[Android View事件体系总结其一]]></title><link>https://blog.csdn.net/ding_GC/article/details/82858928</link><guid>https://blog.csdn.net/ding_GC/article/details/82858928</guid><author>ding_GC</author><pubDate>Wed, 26 Sep 2018 21:39:40 +0800</pubDate><description><![CDATA[什么是View?

View是Android中所有控件的基类，是一种界面层的控件的一种抽象，它代表了一个控件。

View的位置参数

View的位置主要由它的四个顶点决定，分别对应View的四个属性：top,left,right,bottom。其中top是左上角纵坐标，left是左上角横坐标，right是右下角横坐标，bottom是右下角纵坐标。值得注意的是，这些坐标都是相对于View的父容器来...]]></description><category></category></item><item><title><![CDATA[设计模式六大原则与模式总结]]></title><link>https://blog.csdn.net/ding_GC/article/details/82798723</link><guid>https://blog.csdn.net/ding_GC/article/details/82798723</guid><author>ding_GC</author><pubDate>Fri, 21 Sep 2018 11:14:20 +0800</pubDate><description><![CDATA[设计模式六大原则：

 

一，单一职责原则（Single Responsibolity Principle）

     最简单的面向对象设计原则，它用于控制类的粒度大小。

 定义：一个类只负责一个功能区域中的相应职责，或者可以定义为：就一个类而言，应该只有一个引它变化的原因。

 

二，开闭原则（Open-Closed Principle）

定义：一个软件实体应当对扩展开放，对修改关闭。...]]></description><category></category></item><item><title><![CDATA[Git使用技能汇总]]></title><link>https://blog.csdn.net/ding_GC/article/details/80526420</link><guid>https://blog.csdn.net/ding_GC/article/details/80526420</guid><author>ding_GC</author><pubDate>Thu, 31 May 2018 17:45:05 +0800</pubDate><description><![CDATA[将本地代码上传到GitLab仓库打开Git Base Here切换到需要上传文件目录下或者在需要上传仓库的文件下打开 Git Base Here 命令行工具；按照顺序执行一下命令：git init ：将目录变成git可管理的仓库git add README.md ：将文件添加到暂存区中 git commit -m &quot;fisrt commit&quot;  ：将文件提交到仓库 git remote add o...]]></description><category></category></item><item><title><![CDATA[Retrofit2 ，Dagger2等常用框架注解功能介绍]]></title><link>https://blog.csdn.net/ding_GC/article/details/80513335</link><guid>https://blog.csdn.net/ding_GC/article/details/80513335</guid><author>ding_GC</author><pubDate>Wed, 30 May 2018 18:11:47 +0800</pubDate><description><![CDATA[Retrofit2 注解相关@GET,@POST请求方法：提出一个Get/POST请求；另外还存在常见的请求方法注解 @PUT,@DELETE,@HEAD,@OPTIONS@HTTP 基本请求方法的扩展，用法如下    @HTTP(method = &quot;get&quot;,path = &quot;home&quot;,hasBody = false)
    Observable&amp;lt;SubHomeResponse&amp;gt; ...]]></description><category></category></item><item><title><![CDATA[Retrofit 拦截器-基础公共参数拦截器实现]]></title><link>https://blog.csdn.net/ding_GC/article/details/80492229</link><guid>https://blog.csdn.net/ding_GC/article/details/80492229</guid><author>ding_GC</author><pubDate>Tue, 29 May 2018 10:50:29 +0800</pubDate><description><![CDATA[为了紧跟潮流，之前在公司新开项目中设计使用了MVP+Retrofit+Dagger2模式的开发框架，但由于当时时间紧，任务中。尝试去通过拦截器添加基础参数，但是POST请求一直不成功，最终无奈放弃，使用了最Low的方式，GET，POST请求全部是用@QueryMap注解来添加请求参数，然后将基础参数封装一个公共的方法，每次请求接口是调用。这也成为了我心中一直的一个梗，久久不能释怀。后来曾多次尝试解...]]></description><category></category></item><item><title><![CDATA[设计模式之单例模式]]></title><link>https://blog.csdn.net/ding_GC/article/details/80453298</link><guid>https://blog.csdn.net/ding_GC/article/details/80453298</guid><author>ding_GC</author><pubDate>Mon, 28 May 2018 11:31:38 +0800</pubDate><description><![CDATA[单例模式定义确保某一个类仅有一个实例对象，而且自行实例化并向整个系统提供这个实例。单例模式使用场景确保某个类只有一个对象的场景，避免产生多个对象浪费资源，或者某种类型对象只应该有且只有一个。单例模式要素1，构造函数不对外开放，一般为private;2，通过一个静态方法或者枚举返回单例类对象；3，确保单例类的对象有且只有一个，尤其是在多线程环境下；4，确保单例类对象在反序列化过程中不会重新构建对象；...]]></description><category></category></item><item><title><![CDATA[微信Android热修复/热更新平台Tinker集成相关-完整版]]></title><link>https://blog.csdn.net/ding_GC/article/details/80351477</link><guid>https://blog.csdn.net/ding_GC/article/details/80351477</guid><author>ding_GC</author><pubDate>Thu, 17 May 2018 17:46:30 +0800</pubDate><description><![CDATA[之前在公司的项目中集成微信的热修复/热更新平台-Tinker，也是我自己主动提出，然后慢慢研究。将近持续了两个星期的时间。这期间也踩过了很多坑，期间朋友和Tinker热修复讨论QQ群也对我多次进行解惑，因此打算整理出来，以泽同道！主要功能点既然说明了是完整版，就代表这和其他Tinker热修复平台相关文档有所不同。因为公司项目功能比较多，几乎涵盖了使用Tinker平台所能使用的大部分基础功能，主要包...]]></description><category></category></item><item><title><![CDATA[Android 代码混淆配置规范]]></title><link>https://blog.csdn.net/ding_GC/article/details/80354312</link><guid>https://blog.csdn.net/ding_GC/article/details/80354312</guid><author>ding_GC</author><pubDate>Thu, 17 May 2018 17:38:58 +0800</pubDate><description><![CDATA[之前为项目集成微信热更新平台Tinker之前，应用并没有进行代码混淆，仅仅做了三方的APK加固。后来发现Tinker需要添加相关的混淆文件 tinkerMultiKeep.pro。所以就把之前欠的账补上，也在此进行总结记录一下。

项目混淆文件主要包含三部分：

1，基本混淆

2，依赖引用资源混淆

3，三方集成资源混淆

这其中几乎涵盖了大部分的三方框架和三方平台的混淆配置，具体混淆配置请按照...]]></description><category></category></item><item><title><![CDATA[JVM垃圾回收策略]]></title><link>https://blog.csdn.net/ding_GC/article/details/80338747</link><guid>https://blog.csdn.net/ding_GC/article/details/80338747</guid><author>ding_GC</author><pubDate>Wed, 16 May 2018 16:21:33 +0800</pubDate><description><![CDATA[1，java中内存区域划分


 

Java虚拟机在执行Java程序的过程中，会把它所管理的内存划分为若干不同的数据区域，包括：

 

      a.栈（虚拟机栈VM Stack ,本地方法栈Native Method Stack）

      b.堆 (Heap)

      c.方法区(Method Area)

      d.程序计数器（Program Counter Regis...]]></description><category></category></item><item><title><![CDATA[介绍一下Token？]]></title><link>https://blog.csdn.net/ding_GC/article/details/79733965</link><guid>https://blog.csdn.net/ding_GC/article/details/79733965</guid><author>ding_GC</author><pubDate>Wed, 28 Mar 2018 21:00:59 +0800</pubDate><description><![CDATA[Token在安全中应用广泛，如防止表单提交，防止有人伪造客户端请求。在实际的开发中，我们已经不需要在写Token，可以直接使用已经封装好的类就可以了。但是，我们需要了解这其中的原理，那我就简单的聊一下这方面。     什么是Token？ Token可以理解为令牌，服务器通过验证Token，来判断你是否有操作的权限。Token的重要特性是有效性，一般Token只是在一定时间内有效。超出时间就限制其操...]]></description><category></category></item></channel></rss>