<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[SuperBin的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/ZZB_Bin</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ZZB_Bin]]></copyright><item><title><![CDATA[android studio运行项目报错PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderExce]]></title><link>https://blog.youkuaiyun.com/ZZB_Bin/article/details/132298521</link><guid>https://blog.youkuaiyun.com/ZZB_Bin/article/details/132298521</guid><author>ZZB_Bin</author><pubDate>Tue, 15 Aug 2023 15:11:17 +0800</pubDate><description><![CDATA[android studio 解决问题PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target]]></description><category></category></item><item><title><![CDATA[js UTC、GMT时间问题记录]]></title><link>https://blog.youkuaiyun.com/ZZB_Bin/article/details/130269806</link><guid>https://blog.youkuaiyun.com/ZZB_Bin/article/details/130269806</guid><author>ZZB_Bin</author><pubDate>Thu, 20 Apr 2023 17:36:37 +0800</pubDate><description><![CDATA[UTC时间格式：2020-01-13T16:00:00.000Z，T表示分隔符，Z表示的是UTC。(相差北京时间8小时)对应的北京时间：2020-01-14 00:00:00。如果想实现国际化，数据库可以采用存放时间戳的方式，因为没有时区的影响，都是从1970年01月01日00时00分00秒计算的时间。时间格式：YYYY-MM-DDThh:mmZ，其中T表示时间的开始，Z表示时区。GMT时间格式：2023-04-13T12:00+08:00。在JS中使用new Date()，会自动转换成当前时区。]]></description><category></category></item><item><title><![CDATA[Windows11、win11、Windows10、win10系统安装]]></title><link>https://blog.youkuaiyun.com/ZZB_Bin/article/details/128787123</link><guid>https://blog.youkuaiyun.com/ZZB_Bin/article/details/128787123</guid><author>ZZB_Bin</author><pubDate>Sun, 29 Jan 2023 11:56:10 +0800</pubDate><description><![CDATA[UEFI不支持NFTS文件系统的启动U盘。使用系统自带的dism命令工具将原镜像文件中的install.wim拆分为多个小的文件，并拷贝到启动U盘里面的source下。命令中的第一个@改为win10镜像虚拟光驱的盘符，第二个@改为U盘盘符。用管理员打开CMD命令提示符。]]></description><category></category></item><item><title><![CDATA[Android-Firebase快速解决合规问题第4篇，解决FirebaseAnalytics库违规获取应用列表问题]]></title><link>https://blog.youkuaiyun.com/ZZB_Bin/article/details/126833757</link><guid>https://blog.youkuaiyun.com/ZZB_Bin/article/details/126833757</guid><author>ZZB_Bin</author><pubDate>Tue, 13 Sep 2022 16:57:49 +0800</pubDate><description><![CDATA[未经许可读取个人信息 | 获取应用列表。解决FirebaseAnalytics库违规获取应用列表问题。Firebase实在太恶心了，在国内强烈不建议使用！！！firebase生态库相互唤起，出问题了很难定位。]]></description><category></category></item><item><title><![CDATA[Android-Firebase快速解决合规问题第3篇，解决FirebaseCrashlytics库违规网络请求、获取AndroidId问题]]></title><link>https://blog.youkuaiyun.com/ZZB_Bin/article/details/125574650</link><guid>https://blog.youkuaiyun.com/ZZB_Bin/article/details/125574650</guid><author>ZZB_Bin</author><pubDate>Sun, 03 Jul 2022 20:00:06 +0800</pubDate><description><![CDATA[原因：FirebaseCrashlytics没有提供的对应的provider，FirebaseCrashlytics的初始化是依赖核心FirebaseApp初始化的时候去加载FirebaseCrashlytics，所以我们只能从
问题1：可以知道在app启动的时候就会发生网络流量请求，是在FirebaseCrashlytics库中发生。
问题2：从栈顶可以知道，最终是触发了getString方法获取android id，但是找不到从哪里调起来的，那就根据上一篇文章学到的方法，运行debug模式尝试定位问题。]]></description><category></category></item><item><title><![CDATA[Android-Firebase快速解决合规问题第2篇，解决FirebasePerformance库获取软件安装列表的行为]]></title><link>https://blog.youkuaiyun.com/ZZB_Bin/article/details/125472396</link><guid>https://blog.youkuaiyun.com/ZZB_Bin/article/details/125472396</guid><author>ZZB_Bin</author><pubDate>Mon, 27 Jun 2022 00:52:52 +0800</pubDate><description><![CDATA[安全合规检测，说App未经用户同意，存在获取软件安装列表信息的行为。
原因是firebase_performance库中，在初始化的时候会去获取软件安装列表，判断当前是否是主进程。第一篇文章已经介绍了解决方案，这里主要介绍如何定位问题、再去看如何解决问题。解决方案支持原生、flutter库，RN库。先把解决方案放在最上面，不想看详细的过程就直接复制粘贴使用吧。
在AndroidManifest.xml中接入以下代码，重点在tools:node=“remove”，将这个provider移除掉。
开发环境
de]]></description><category></category></item><item><title><![CDATA[Android-Firebase快速解决合规问题第1篇，汇总篇，无脑复制解决问题]]></title><link>https://blog.youkuaiyun.com/ZZB_Bin/article/details/125463025</link><guid>https://blog.youkuaiyun.com/ZZB_Bin/article/details/125463025</guid><author>ZZB_Bin</author><pubDate>Sat, 25 Jun 2022 19:50:06 +0800</pubDate><description><![CDATA[本篇文章只快速介绍解决方案，详细分析看其他文章。通过配置延迟Firebase初始化，Android延时和ReactNative也是同理。2020年7月工信部发布了《关于开展纵深推进APP侵害用户权益专项整治行动的通知》工信部信管函〔2020〕164号文。重点对专项行动中“APP、SDK违规处理用户个人信息”“设置障碍、频繁骚扰用户”“欺骗误导用户”“应用分发平台责任落实不到位”四方面10类问题进行集中排查。
2022年开始国内各大应用商店加大对APP合规的检查，像华为商店审核不通过就不让上架，其他商店在合规]]></description><category></category></item><item><title><![CDATA[Android ContentProvider初始化流程简化分析]]></title><link>https://blog.youkuaiyun.com/ZZB_Bin/article/details/125209192</link><guid>https://blog.youkuaiyun.com/ZZB_Bin/article/details/125209192</guid><author>ZZB_Bin</author><pubDate>Fri, 10 Jun 2022 00:41:28 +0800</pubDate><description><![CDATA[Android ContentProvider初始化流程简化分析→ ContentProvider#attachInfo() → ContentProvider#onCreate() → Application#onCreate()Android Code Search android官方在线阅读源码神器
此处分析android-12.0.0_r32源码frameworks/base/core/java/android/app/ActivityThread.java
mai...]]></description><category></category></item><item><title><![CDATA[android使用ContentProvider初始化sdk，初始化时机]]></title><link>https://blog.youkuaiyun.com/ZZB_Bin/article/details/125194890</link><guid>https://blog.youkuaiyun.com/ZZB_Bin/article/details/125194890</guid><author>ZZB_Bin</author><pubDate>Thu, 09 Jun 2022 15:25:40 +0800</pubDate><description><![CDATA[最近因为国内上架应用，检测出firebase有违规收集android id行为，明明在代码中延迟初始化了，但firebase依然有操作数据的行为，跟踪发现firebase采用了ContentProvider来初始化sdk，怪不得通过代码延时初始化并没有效果，简单整理一下ContentProvider的初始化原理。作为android四大组件之一，主要作用是封装底层具体实现，对内或对外提供数据。底层数据源可以是数据库、文件，或者网络，只需要ContentProvider提供的操作就能快速实现增、删、改、查。通常]]></description><category></category></item><item><title><![CDATA[关于flutter-geolocator库使用问题，解决android使用LocationManager定位问题]]></title><link>https://blog.youkuaiyun.com/ZZB_Bin/article/details/121553574</link><guid>https://blog.youkuaiyun.com/ZZB_Bin/article/details/121553574</guid><author>ZZB_Bin</author><pubDate>Fri, 26 Nov 2021 11:49:52 +0800</pubDate><description><![CDATA[文章目录相关知识问题现象分析问题解决问题修改源码使用方式
有需要直接定位到最下面。
相关知识

geolocator flutter一个比较好用的定位库
android原生提供的LocationManager，常用的定位库
谷歌定位服务Google Location Service，需要引入google服务
已经具备定位权限，并用户同意授权。

&lt;uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /&gt;

]]></description><category></category></item><item><title><![CDATA[Dart单线程模型和Flutter异常捕获]]></title><link>https://blog.youkuaiyun.com/ZZB_Bin/article/details/121497012</link><guid>https://blog.youkuaiyun.com/ZZB_Bin/article/details/121497012</guid><author>ZZB_Bin</author><pubDate>Thu, 25 Nov 2021 10:12:52 +0800</pubDate><description><![CDATA[文章目录Dart单线程模型加入队列Future.delayed总结下关于 Future 这些有趣的结论：验证Question1Question2总结异常捕获
Dart单线程模型

官方文档event-loop
翻译
Flutter之Timer原理解析-异步原理
先看经典的官方图

跟javascript类似，通过消息循环来执行任务。有两个队列，一个是微任务队列microtask queue，另一个是事件队列event queue。

基本流程就是，在执行完main()后，消息循环机制便启动了。微任务队列的优]]></description><category></category></item><item><title><![CDATA[Flutter-Dart入门，常用细节]]></title><link>https://blog.youkuaiyun.com/ZZB_Bin/article/details/120995800</link><guid>https://blog.youkuaiyun.com/ZZB_Bin/article/details/120995800</guid><author>ZZB_Bin</author><pubDate>Wed, 27 Oct 2021 19:33:11 +0800</pubDate><description><![CDATA[入门

中文官方文档
英文官方文档，比较全

变量
数据类型
dart1.12加入空安全。
在dart中的一切皆是对象，包括数字、布尔值、函数等，它们和Java一样都继承于Object，所以它们的默认值也就是null。在dart主要有: 布尔类型bool、数字类型num(数字类型又分为int，double，并且两者父类都是num)、字符串类型String、集合类型(List, Set, Map)。
结构：【类型】【变量名】= 【赋值】
/// 变量
void variable(){
  bool isBoo]]></description><category></category></item><item><title><![CDATA[Android voice语音功能常见问题汇总，注意细节]]></title><link>https://blog.youkuaiyun.com/ZZB_Bin/article/details/120907906</link><guid>https://blog.youkuaiyun.com/ZZB_Bin/article/details/120907906</guid><author>ZZB_Bin</author><pubDate>Fri, 22 Oct 2021 17:30:34 +0800</pubDate><description><![CDATA[文章目录前言监听有线耳机、蓝牙耳机（音响）插入打开扬声器
前言

监听耳机操作
audioManager.setMode问题

监听有线耳机、蓝牙耳机（音响）插入
由于有线耳机、蓝牙耳机是两种传输形式，Android提供了两个广播监听。

监听有线耳机

//监听耳机
IntentFilter headsetIntentFilter = new IntentFilter();
headsetIntentFilter.addAction(AudioManager.ACTION_HEADSET_PLUG);
h]]></description><category></category></item><item><title><![CDATA[Android/Flutter WebView加载H5区分拍照和选择图片]]></title><link>https://blog.youkuaiyun.com/ZZB_Bin/article/details/120885958</link><guid>https://blog.youkuaiyun.com/ZZB_Bin/article/details/120885958</guid><author>ZZB_Bin</author><pubDate>Thu, 21 Oct 2021 16:29:39 +0800</pubDate><description><![CDATA[这里写自定义目录标题前言结论问题分析H5端Android-WebView端参考测试html文件
前言
在使用flutter_inappwebview时，H5中需要进行交互拍照、选择图片。但in_appwebview中实现的方式目前无法区分拍照还是选择图片。现在分析原因，看解决办法。
结论
先上结论

H5中使用以下方式调用，一定要加上capture，表明希望通过捕获的方式获取照片，也就是拍照。

&lt;input type="file" accept="image/*" capture&gt;


And]]></description><category></category></item><item><title><![CDATA[webview_flutter官方插件选择文件、图片的问题]]></title><link>https://blog.youkuaiyun.com/ZZB_Bin/article/details/120568434</link><guid>https://blog.youkuaiyun.com/ZZB_Bin/article/details/120568434</guid><author>ZZB_Bin</author><pubDate>Thu, 30 Sep 2021 16:50:40 +0800</pubDate><description><![CDATA[前言
webview_flutter官方的webview插件，很多功能缺失，现在H5有上传图片的需求，但官方的插件并不支持。

点击H5中的选择文件，没有任何响应，问题issues，官方库的issues上已经有提出相关问题。
原因分析
H5要想调用原生选择图片功能，需要webview重写WebChromeClient类中的onShowFileChooser方法。
解决方案
使用其他完善的webview替代

flutter_inappwebview 这个库目前最完善
flutter_webview_plug]]></description><category></category></item><item><title><![CDATA[2021Google I/O开发者大会汇总]]></title><link>https://blog.youkuaiyun.com/ZZB_Bin/article/details/118112846</link><guid>https://blog.youkuaiyun.com/ZZB_Bin/article/details/118112846</guid><author>ZZB_Bin</author><pubDate>Tue, 22 Jun 2021 20:45:43 +0800</pubDate><description><![CDATA[文章目录Smart canvas智能画布LaMDA语言模型-对话式人工智能Google LensGoogle MapWear OSAndroid12
来自 Google I/O 的 16 项更新将使您的生活更轻松
Smart canvas智能画布


转变 Google Workspace 中的协作方式
谷歌工作区Google Workspace
Google Workspace 宣布使用 Smart Canvas 实现协作的下一次发展。
一个具有实时协同办公功能的智能画布。整合表格、文档，todo事项等，]]></description><category></category></item><item><title><![CDATA[google play重签名问题修复，导致第三方登录失败问题]]></title><link>https://blog.youkuaiyun.com/ZZB_Bin/article/details/116798059</link><guid>https://blog.youkuaiyun.com/ZZB_Bin/article/details/116798059</guid><author>ZZB_Bin</author><pubDate>Fri, 14 May 2021 17:18:12 +0800</pubDate><description><![CDATA[文章目录Google play重签名问题统一签名参考
Google play重签名问题
第一次上架google play应用，如果选择了google play提供的签名方式，会在你的应用上架到google play时候用它的签名帮应用重新签名，会造成从google play下载的应用包签名和其他平台下载的应用包签名不同。
由于微信登录等第三方登录功能，需要上传唯一的包签名，也就是只有一个包可以使用微信登录。如果不把google play的重签名改成自有的签名文件，在google play下载的应用就无法使用]]></description><category></category></item><item><title><![CDATA[Mac环境jenkins多渠道配置打包Flutter、Android应用]]></title><link>https://blog.youkuaiyun.com/ZZB_Bin/article/details/115180313</link><guid>https://blog.youkuaiyun.com/ZZB_Bin/article/details/115180313</guid><author>ZZB_Bin</author><pubDate>Wed, 24 Mar 2021 20:10:13 +0800</pubDate><description><![CDATA[这里写目录标题Jenkins安装启动二级目录三级目录
Jenkins安装
两种安装方式：

各平台官网安装Jenkins步骤
mac官网安装jenkins步骤


使用命令行安装稳定版

brew install jenkins-lts


下载pkg安装包
官方下载安装包地址，官方不推荐使用这种方式

使用brew安装会自动安装openjdk，也可以使用自己环境的jdk
启动
启动、停止、重启命令
brew services start jenkins
brew services stop jenkins]]></description><category></category></item><item><title><![CDATA[Flutter各种虚线实战和虚线边框原理]]></title><link>https://blog.youkuaiyun.com/ZZB_Bin/article/details/112907929</link><guid>https://blog.youkuaiyun.com/ZZB_Bin/article/details/112907929</guid><author>ZZB_Bin</author><pubDate>Thu, 21 Jan 2021 11:13:01 +0800</pubDate><description><![CDATA[文章目录简介Flutter-Dotted-Border基本使用DottedBorder虚线边框封装核心代码分析思考_DashPainter封装边框的类绘制虚线的核心库path_drawingdash_path.dart绘制虚线核心类CustomPaint的size属性研究有size或child没有size和child总结
简介
Flutter中如何使用虚线

使用的是第三方库
Flutter-Dotted-Border其中的封装了基本的图形样式，矩形、圆角矩形、圆形、椭圆形，以及自定义虚线框。内部其实是使用]]></description><category></category></item><item><title><![CDATA[flutter框架结构图]]></title><link>https://blog.youkuaiyun.com/ZZB_Bin/article/details/110954964</link><guid>https://blog.youkuaiyun.com/ZZB_Bin/article/details/110954964</guid><author>ZZB_Bin</author><pubDate>Thu, 10 Dec 2020 16:19:50 +0800</pubDate><description><![CDATA[文章目录架构图框架Framwork引擎Engine嵌入层Embedder参考
架构图

Flutter的架构主要分成三层:Framework，Engine和Embedder。
框架Framwork
这一层纯dart实现，使用了两种设计风格Material Design和Cupertino(针对iOS)风格。

Widgets层：一套基础组件库。
Rendering层：ui布局渲染。
Animation、Painting、Gestures、Foundation是dart:ui库提供的对接底层动画，手势识别等功]]></description><category></category></item></channel></rss>