<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[just_hu的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/just_hu</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; just_hu]]></copyright><item><title><![CDATA[解决 Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8]]></title><link>https://blog.youkuaiyun.com/just_hu/article/details/125822130</link><guid>https://blog.youkuaiyun.com/just_hu/article/details/125822130</guid><author>just_hu</author><pubDate>Sat, 16 Jul 2022 17:34:22 +0800</pubDate><description><![CDATA[解决新建一个AndroidStudio出现的 Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8的问题]]></description><category></category></item><item><title><![CDATA[Glide 加载webp动图实战（解决图片每帧间隔过长，动图单次播放，二次播放动图时首帧是动图最后一帧的问题）]]></title><link>https://blog.youkuaiyun.com/just_hu/article/details/124892781</link><guid>https://blog.youkuaiyun.com/just_hu/article/details/124892781</guid><author>just_hu</author><pubDate>Sun, 22 May 2022 01:13:05 +0800</pubDate><description><![CDATA[零、前言

最近接了一个需求，要在某个地方加上动图的特效，最后方案确定下来有两种实现的方式

一、lottie动画来展示

二、类gif动图的方式来展示

考虑到时间的成本，优先使用类gif的方式来实现。

主要是原因第三方图片加载框架已经封装好了一套完整的图片展示的流程，包括图片下载，展示，回收，缓存等。我们直接进行调用即可，但是由于ui给出的动图是webp格式的，所以在使用过程中出现挺多棘手的问题，好在最后找到原因并解决。



一、具体的实现代码

添加...]]></description><category></category></item><item><title><![CDATA[Attribute “layout_anchorGravity“ already defined with incompatible format.]]></title><link>https://blog.youkuaiyun.com/just_hu/article/details/123212552</link><guid>https://blog.youkuaiyun.com/just_hu/article/details/123212552</guid><author>just_hu</author><pubDate>Tue, 08 Mar 2022 11:17:29 +0800</pubDate><description><![CDATA[在整理一个老项目替换aar包的build过程中发现报了
Attribute "layout_anchorGravity" already defined with incompatible format.

这个问题问题
进一步发现可能是design包的引用出了问题
使用gradlew命令输出工程依赖的信息
./gradlew dependencies  &gt; dependence.txt

发现确实如此，项目中有23，27两个版本
最后在主工程里面强制规定死版本解决这个问题
configuration]]></description><category></category></item><item><title><![CDATA[Mac cannot open terminal Fail to start...]]></title><link>https://blog.youkuaiyun.com/just_hu/article/details/118639849</link><guid>https://blog.youkuaiyun.com/just_hu/article/details/118639849</guid><author>just_hu</author><pubDate>Sat, 10 Jul 2021 20:20:20 +0800</pubDate><description><![CDATA[最近换了mac，是新芯片m1的那款，在使用过程中出现了几个坑，写篇文章记录一下。



由于正式版本的到现在为止还没有更新m1版本的AndriodStudio，所以我一直用的都是开发的预览版本进行日常的开发。

https://developer.android.google.cn/studio/archive

 预览版本我下了3个分别是



在开发的过程中还是出现了几个小问题 ，Arctic Fox版本两个都有一个问题，无...]]></description><category></category></item><item><title><![CDATA[nodejs环境的安装与踩坑]]></title><link>https://blog.youkuaiyun.com/just_hu/article/details/117703370</link><guid>https://blog.youkuaiyun.com/just_hu/article/details/117703370</guid><author>just_hu</author><pubDate>Tue, 08 Jun 2021 15:08:19 +0800</pubDate><description><![CDATA[nodejs 安装

推荐这个https://www.cnblogs.com/coder-lzh/p/9232192.html



nrm ls 命令报错

http://www.qishunwang.net/news_show_38906.aspx

const NRMRC = path.join(process.env.HOME, '.nrmrc');

替换成  const NRMRC = path.join(process.env[(process.platform == 'win32...]]></description><category></category></item><item><title><![CDATA[git使用ssh方式生成密钥clone代码及踩坑]]></title><link>https://blog.youkuaiyun.com/just_hu/article/details/117670404</link><guid>https://blog.youkuaiyun.com/just_hu/article/details/117670404</guid><author>just_hu</author><pubDate>Mon, 07 Jun 2021 18:10:30 +0800</pubDate><description><![CDATA[之前一直使用的是http的方式进行clone下载源码，最近一个工程需要自动化编译，过程中发现一直被拒绝了，仔细的看了一下发现是采用的ssh的方式进行源码的clone。调整的过程中踩了几个小坑，花了几个小时时间。记录一下防止再犯。

首先要确定自己的信息配置的正确（特别是邮箱，最好和你目标网站用的邮箱要一致）

git config --global --list

如果不对的话，可以通过以下方式调整

git config --global user.name "用户名" git config --glob]]></description><category></category></item><item><title><![CDATA[源码分析--Picasso into流程简析]]></title><link>https://blog.youkuaiyun.com/just_hu/article/details/115542950</link><guid>https://blog.youkuaiyun.com/just_hu/article/details/115542950</guid><author>just_hu</author><pubDate>Fri, 09 Apr 2021 11:24:21 +0800</pubDate><description><![CDATA[很长时间没更新博文了，这里随便更新一个前段时间看的Picasso的源码，这里只简要的描述了一下大概的流程，想要加深印象还是建议读者自己去看一下具体的源码，这个框架的源码并不是很难。如果发现文章有错误，可以在评论或者私信指出，我会加以改正。
requestCreator
public void into(ImageView target) {
    into(target, null);
  }
  
  public void into(ImageView target, Callback callbac]]></description><category></category></item><item><title><![CDATA[flutter报错 flutter can not clear a fixed-length list]]></title><link>https://blog.youkuaiyun.com/just_hu/article/details/108674112</link><guid>https://blog.youkuaiyun.com/just_hu/article/details/108674112</guid><author>just_hu</author><pubDate>Fri, 18 Sep 2020 22:42:19 +0800</pubDate><description><![CDATA[最近有点时间，后知后觉的学了一下Flutter。

Flutter的语法有点类似与java，但是细节不同于java，在使用过程出现了该问题

在对一个List错误的初始化之后就会出现这个问题。

具体是


List&lt;ArticleDataDataData&gt; _articleDataList = new List(0);

这样初始化之后的结果是创建了一个固定长度的list，在对这个list进行重新赋值（改变原来长度）之后就会报这个错误

调整list的初始化方法就可以避免这个错误


List]]></description><category></category></item><item><title><![CDATA[源码分析--Glide源码 三 Glide的缓存]]></title><link>https://blog.youkuaiyun.com/just_hu/article/details/106484009</link><guid>https://blog.youkuaiyun.com/just_hu/article/details/106484009</guid><author>just_hu</author><pubDate>Wed, 03 Jun 2020 23:52:33 +0800</pubDate><description><![CDATA[写在前面
对于一个应用来讲所需要的图片不可能总是来自他自己的apk包中，总会有一些实时的图片来自于网络、服务器中，而为了流量、加载速度等方面的考虑，我们做不到每一次都是从网络中下载，为了解决这个问题，我们提出了缓存这个概念。
如果你发现本文中有任何错误，请在评论区留言或者私信我，我会第一时间改正，谢谢！
0 图片的三级缓存
对于图片来讲，缓存是十分有必要的，在Android的发展史中，图片的缓存慢慢分成了三级。
内存缓存 本地缓存 网络
相对具体的可以参看这篇文章：三级缓存
1 Glide中的内存缓存
相比]]></description><category></category></item><item><title><![CDATA[源码分析--Glide源码 加载图片 二 into 网络下载图片的过程]]></title><link>https://blog.youkuaiyun.com/just_hu/article/details/106470170</link><guid>https://blog.youkuaiyun.com/just_hu/article/details/106470170</guid><author>just_hu</author><pubDate>Mon, 01 Jun 2020 22:42:28 +0800</pubDate><description><![CDATA[上一篇博文中讲了with，load的过程，因为大部分都是初始话，所以总的来讲还是比较好理解的，这篇博文讲的是into的过程，这个过程就会用到前两个步初始话的对象，这一步也是Glide的核心、难点所在。
into
Glide.with(MainActivity.this).load(s).into(imageView);
传入的一般都是ImageView，进入到into源码中看一下
//DrawableRequestBuilder.java
public Target&lt;GlideDrawable&gt;]]></description><category></category></item><item><title><![CDATA[源码分析--Glide源码 加载图片 一 with与load]]></title><link>https://blog.youkuaiyun.com/just_hu/article/details/106407592</link><guid>https://blog.youkuaiyun.com/just_hu/article/details/106407592</guid><author>just_hu</author><pubDate>Mon, 01 Jun 2020 04:02:22 +0800</pubDate><description><![CDATA[写在前面
有一段时间没有写过博客了，中间了看了一些杂七杂八的东西，也过了一部分的面试题，顺带提一句面试题我都是在鸿洋的https://www.wanandroid.com/ 看的，里面分类很多也比较的全，建议收藏
打开百度搜索Gilde源码会出现几百万的搜索结果，但是我为什么还要再写这篇博客呢？
第一 可以给后来的人指路。第二 可以都在哪怕是复述的时候，提高自己表达沟通的能力，第三 在加强自己的理解，哪怕是后面忘了也可以通过这篇文章在快速的回想起代码中的一切。
这三点来说 第一点反而是最小的一点，重点在第二]]></description><category></category></item><item><title><![CDATA[kotlin---使用协程请求网络]]></title><link>https://blog.youkuaiyun.com/just_hu/article/details/105771061</link><guid>https://blog.youkuaiyun.com/just_hu/article/details/105771061</guid><author>just_hu</author><pubDate>Sun, 26 Apr 2020 16:41:32 +0800</pubDate><description><![CDATA[kotlin出来也已经有好长一段时间了，作为google官方指定唯一亲儿子，作为Android开发也有必要去了解一下。（真的学不动了T.T）

作为kotlin区别去java的独有特性---协程，在很多Android开发工程师刚接触kotlin时往往都是一头雾水，毕竟协程的使用区别于我们习惯采用的handler，AsyncTask，rxjava。网上的教程有很多，我这两天看也是十分挣扎，看了两天终...]]></description><category></category></item><item><title><![CDATA[源码分析--xutil3 网络源码分析]]></title><link>https://blog.youkuaiyun.com/just_hu/article/details/105770496</link><guid>https://blog.youkuaiyun.com/just_hu/article/details/105770496</guid><author>just_hu</author><pubDate>Sun, 26 Apr 2020 15:56:02 +0800</pubDate><description><![CDATA[这边查找的是同步请求的post方法（异步请求的方法也类似，最终同步异步都是会调用到同一块代码），流程如下


public &lt;T&gt; T postSync(RequestParams entity, Class&lt;T&gt; resultType) throws Throwable {
    return this.requestSync(HttpMethod.POST, enti...]]></description><category></category></item><item><title><![CDATA[杂谈-View的生命周期]]></title><link>https://blog.youkuaiyun.com/just_hu/article/details/105553503</link><guid>https://blog.youkuaiyun.com/just_hu/article/details/105553503</guid><author>just_hu</author><pubDate>Thu, 16 Apr 2020 11:18:46 +0800</pubDate><description><![CDATA[原文：https://blog.youkuaiyun.com/SEU_Calvin/article/details/72855537

我觉得写得很好，有几个方法我之前用过，但是仅限于用过

--------------------------------------------------------------------------------------------------------------...]]></description><category></category></item><item><title><![CDATA[问题汇总-Aspectjx]]></title><link>https://blog.youkuaiyun.com/just_hu/article/details/105514815</link><guid>https://blog.youkuaiyun.com/just_hu/article/details/105514815</guid><author>just_hu</author><pubDate>Tue, 14 Apr 2020 16:24:41 +0800</pubDate><description><![CDATA[最近研究了一下埋点技术 使用的是Aspectjx 框架

github：https://github.com/HujiangTechnology/gradle_plugin_android_aspectjx/



使用的过程中还是遇到了几个问题还是比较麻烦的，在这里mark一下

具体的使用文章可参考：https://blog.youkuaiyun.com/eclipsexys/article/detai...]]></description><category></category></item><item><title><![CDATA[rxjava2 源码分析  一]]></title><link>https://blog.youkuaiyun.com/just_hu/article/details/105416855</link><guid>https://blog.youkuaiyun.com/just_hu/article/details/105416855</guid><author>just_hu</author><pubDate>Thu, 09 Apr 2020 18:19:27 +0800</pubDate><description><![CDATA[最简单的流程


Observable.create(new ObservableOnSubscribe&lt;Integer&gt;() {
            @Override
            public void subscribe(@NonNull ObservableEmitter&lt;Integer&gt; e) throws Exception {
        ...]]></description><category></category></item><item><title><![CDATA[okhttp3 源码简析]]></title><link>https://blog.youkuaiyun.com/just_hu/article/details/105288327</link><guid>https://blog.youkuaiyun.com/just_hu/article/details/105288327</guid><author>just_hu</author><pubDate>Fri, 03 Apr 2020 11:00:37 +0800</pubDate><description><![CDATA[简析，简析！
核心是以下代码
  @Override protected void execute() {
      boolean signalledCallback = false;
      try {
        Response response = getResponseWithInterceptorChain();
        if (retryAndFollowUpIn...]]></description><category></category></item><item><title><![CDATA[开发中遇到的问题--cannot resolve symbol Androidjunit4(espresso)]]></title><link>https://blog.youkuaiyun.com/just_hu/article/details/105097272</link><guid>https://blog.youkuaiyun.com/just_hu/article/details/105097272</guid><author>just_hu</author><pubDate>Wed, 25 Mar 2020 16:10:32 +0800</pubDate><description><![CDATA[最近闲来无事看了一下 espresso 这个ui测试框架，但是发现报了 cannot resolve symbol Androidjunit4 这个问题，如图

断断续续 折腾了一个了一个上午怎么也弄不好，后来发现导入以下包，Sync一下后正常，mark一下


  // Android runner and rules support
    androidTestCompile 'com.a...]]></description><category></category></item><item><title><![CDATA[开发中遇到的问题-自定义viewgroup width match_parent失效]]></title><link>https://blog.youkuaiyun.com/just_hu/article/details/103890146</link><guid>https://blog.youkuaiyun.com/just_hu/article/details/103890146</guid><author>just_hu</author><pubDate>Wed, 08 Jan 2020 14:05:58 +0800</pubDate><description><![CDATA[自定义viewgroup 通过 LayoutInflater.from(context).inflate(R.layout.***, null) 生成的子布局width属性设置为match_parent之后，发现实际的效果并没有铺满全屏

原因是这个方法没有传入父布局，所以layout中的match_parent都失效了。

两种思路解决问题：



第一种方法 调整LayoutInflate...]]></description><category></category></item><item><title><![CDATA[开发中遇到的问题-AppCompatTextView在ListView，GridView中使用自适应字体大小出现的问题]]></title><link>https://blog.youkuaiyun.com/just_hu/article/details/102957767</link><guid>https://blog.youkuaiyun.com/just_hu/article/details/102957767</guid><author>just_hu</author><pubDate>Thu, 07 Nov 2019 16:37:01 +0800</pubDate><description><![CDATA[由于所需要展示内容长端不固定，所以在使用普通的TextView进行展示的过程中，会出现文本换行或者显示不全的问题。

为了解决这个问题，我采用了AppCompatTextView这个官方推荐的控件。具体的使用方法本文不讲解，需要的可以查看

https://blog.youkuaiyun.com/zhangphil/article/details/79942428

由于我是在listView中使用这个控件，...]]></description><category></category></item></channel></rss>