<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[gogo_wei的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/gogo_wei</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; gogo_wei]]></copyright><item><title><![CDATA[Proguard那些事儿]]></title><link>https://blog.youkuaiyun.com/gogo_wei/article/details/122096555</link><guid>https://blog.youkuaiyun.com/gogo_wei/article/details/122096555</guid><author>gogo_wei</author><pubDate>Wed, 22 Dec 2021 22:40:57 +0800</pubDate><description><![CDATA[提到Proguard，做Android的小伙伴想必是耳熟能详的，它虽然不是由Google开发维护的，Google却将其内置在了Android开发的SDK包中，在编译过程中起到了压缩、优化、混淆Android代码的作用，可以说是Android开发必不可少的一个工具。
Proguard做了什么
如下图所示，在Android应用源码的编译过程中，Proguard将Java bytecode转化为了Optimized Java bytecode，也就是说，Proguard起到了优化Java字节码的作用 。

Pro]]></description><category></category></item><item><title><![CDATA[Git内部原理分析]]></title><link>https://blog.youkuaiyun.com/gogo_wei/article/details/122075580</link><guid>https://blog.youkuaiyun.com/gogo_wei/article/details/122075580</guid><author>gogo_wei</author><pubDate>Wed, 22 Dec 2021 00:23:21 +0800</pubDate><description><![CDATA[Git内部原理分析Git基本认知一种分布式版本控制系统集中式版本控制系统分布式版本控制系统记录快照 而非差异比较基于差异的版本控制基于快照流的版本控制更高效且可靠Git分区Git对象管理对象的存取数据对象树对象提交对象标签对象Git引用Git分支HEAD引用标签引用远程引用常用命令揭秘git statusgit initgit addgit commitgit resetgit checkout
本文使用的素材大部分来自git官方文档。
Git基本认知
一种分布式版本控制系统
Git是一种分布式版本控制系统]]></description><category></category></item><item><title><![CDATA[API网络数据安全]]></title><link>https://blog.youkuaiyun.com/gogo_wei/article/details/98625045</link><guid>https://blog.youkuaiyun.com/gogo_wei/article/details/98625045</guid><author>gogo_wei</author><pubDate>Tue, 06 Aug 2019 15:57:12 +0800</pubDate><description><![CDATA[TCP/IP作为互联网使用的标准协议集，在设计之初就是建立在接入主机互相信任的前提下，缺乏对安全方面的考虑，并且为了保证网络的开放性，TCP/IP协议的内容是完全公开的。因此，只使用TCP/IP协议在互联网上传输的数据，实际上都是不安全的。
在SDK开发场景下，通常会在API设计时加入一些网络安全的措施，这里主要从数据防泄露、内容防篡改、身份放伪装、请求防重放几个方面分析如何保证API网络数据安全...]]></description><category></category></item><item><title><![CDATA[Pjsip编译脚本Android/IOS]]></title><link>https://blog.youkuaiyun.com/gogo_wei/article/details/90274581</link><guid>https://blog.youkuaiyun.com/gogo_wei/article/details/90274581</guid><author>gogo_wei</author><pubDate>Thu, 16 May 2019 23:47:51 +0800</pubDate><description><![CDATA[整理了一份pjsip库的编译脚本，实现一行命令编译PJSIP的Android/IOS库。
Github地址
https://github.com/wei-gong/Android-IOS-Pjsip-Compile-Script
编译Android使用的.so库
将下面的脚本文件拷贝到pjsip的根目录中，直接运行即可开始编译，生成的so库在pjsip-apps/src/swig/java/and...]]></description><category></category></item><item><title><![CDATA[模拟Doze模式进行调试]]></title><link>https://blog.youkuaiyun.com/gogo_wei/article/details/85248780</link><guid>https://blog.youkuaiyun.com/gogo_wei/article/details/85248780</guid><author>gogo_wei</author><pubDate>Tue, 25 Dec 2018 15:31:20 +0800</pubDate><description><![CDATA[Doze是Android6.0推出的一种省电模式，手机在不插电并静置不动一段时间后，会进入IDLE状态，在这个状态下会阻止应用访问网络，并且会推迟Amarm、Job、Syn等操作。
为了方便调试应用在IDLE状态下的表现，可以通过adb命令使设备快速进入IDLE状态。


进入IDLE状态


#让设备电池进入未连接充电器的模式
adb shell dumpsys battery unplug
#...]]></description><category></category></item><item><title><![CDATA[Android消息推送总结]]></title><link>https://blog.youkuaiyun.com/gogo_wei/article/details/85239529</link><guid>https://blog.youkuaiyun.com/gogo_wei/article/details/85239529</guid><author>gogo_wei</author><pubDate>Mon, 24 Dec 2018 21:38:57 +0800</pubDate><description><![CDATA[现状
由于国内防火墙以及各手机厂商系统定制的原因，Android系统内置的GCM(已升级到FCM)推送服务在国内基本不能用，大家只能各自发挥，有的像QQ、微信一样自己搭建推送服务，有的集成像极光、个推等专门做推送服务的第三方库，有的则使用手机厂商提供的推送服务如华为推送、小米推送。但即便有这么多选择，目前也仍然没有一家能做到百分百可靠，究其根源还是各大厂商各自为战缺乏统一规范所致。而由于推送服务都...]]></description><category></category></item><item><title><![CDATA[Android自定义控件之短信验证码自动填充]]></title><link>https://blog.youkuaiyun.com/gogo_wei/article/details/84957910</link><guid>https://blog.youkuaiyun.com/gogo_wei/article/details/84957910</guid><author>gogo_wei</author><pubDate>Tue, 11 Dec 2018 16:56:34 +0800</pubDate><description><![CDATA[VerifyCodeView
VerifyCodeView是一个用于输入验证码的Android自定义控件，它支持数字类型的验证码，支持自定义外观，并且支持短信验证码自动填充。
项目地址：https://github.com/wei-gong/VerifyCodeView


在项目中引入VerifyCodeView


Gradle


dependencies {
    compile 'co...]]></description><category></category></item><item><title><![CDATA[字符编码基础知识]]></title><link>https://blog.youkuaiyun.com/gogo_wei/article/details/84549736</link><guid>https://blog.youkuaiyun.com/gogo_wei/article/details/84549736</guid><author>gogo_wei</author><pubDate>Mon, 26 Nov 2018 16:31:24 +0800</pubDate><description><![CDATA[本文主要是对字符编码相关基础知识的系统梳理，通过系统地了解字符编码的相关知识，能对很多由编码不匹配引起的乱码等问题有更深入地理解。

字符集与字符编码
字符集
字符集是多个字符的集合，字符集种类较多，每个字符集包含的字符个数不同。
字符编码
由于计算机只能识别二进制数据，如果计算机要准确的处理各种字符集，则需要将字符数据转换为二进制数据。而字符编码规定了如何将字符流转换为字节流。
区别
在Unic...]]></description><category></category></item><item><title><![CDATA[Android默认开启USB调试且不弹授权对话框]]></title><link>https://blog.youkuaiyun.com/gogo_wei/article/details/83120049</link><guid>https://blog.youkuaiyun.com/gogo_wei/article/details/83120049</guid><author>gogo_wei</author><pubDate>Wed, 17 Oct 2018 23:54:16 +0800</pubDate><description><![CDATA[这里使用的Android源码是基于Android4.4的。
如下图所示，修改persist.sys.usb.config=mtp,adb，修改ro.adb.secure=0。

这里我修改的是device目录下对应厂家和产品的脚本，如果需要统一修改可以去build/core/main.mk中对应修改。

...]]></description><category></category></item><item><title><![CDATA[Android实现局域网adb无线调试]]></title><link>https://blog.youkuaiyun.com/gogo_wei/article/details/83119792</link><guid>https://blog.youkuaiyun.com/gogo_wei/article/details/83119792</guid><author>gogo_wei</author><pubDate>Wed, 17 Oct 2018 23:28:22 +0800</pubDate><description><![CDATA[在研发过程中，有时会遇到需要不借助USB线调试的情况，这时就需要用到adb无线调试。
要使用无线调试，一定要PC机与Android机保证在同一个局域网内。
1、首先用USB线先连接设备，打开PC端命令窗口，输入以下命令：
	#连接adb
	adb shell
	#设置adb远程调试端口
	setprop service.adb.tcp.port 5555
	#启动adbd
	start adbd
...]]></description><category></category></item><item><title><![CDATA[Android下实现局域网设备发现与通信]]></title><link>https://blog.youkuaiyun.com/gogo_wei/article/details/83118329</link><guid>https://blog.youkuaiyun.com/gogo_wei/article/details/83118329</guid><author>gogo_wei</author><pubDate>Wed, 17 Oct 2018 21:47:11 +0800</pubDate><description><![CDATA[Android下实现局域网设备发现与通信
在使用Android开发智能设备时，一般会分为用于遥控与管理的Host端，和用于执行个性功能的Slave端，二者可以借助网络或蓝牙等途径实现通信。

局域网设备发现
如果是借助网络通信，那就必须知道对方的ip地址，而常见的网络环境中ip地址一般是通过DHCP服务动态分配的，所以事先无法确定对方的ip地址。为了确定对方的地址，可以通过向局域网内发送查找设备的...]]></description><category></category></item><item><title><![CDATA[Android下实现STL模型3D渲染]]></title><link>https://blog.youkuaiyun.com/gogo_wei/article/details/83065380</link><guid>https://blog.youkuaiyun.com/gogo_wei/article/details/83065380</guid><author>gogo_wei</author><pubDate>Mon, 15 Oct 2018 21:48:40 +0800</pubDate><description><![CDATA[Android下实现STL模型3D渲染

STL文件
STL文件是在计算机图形应用系统中，用于表示三角形网格的一种文件格式，是最多快速原型系统所应用的标准文件类型。
STL文件有两种：一种是ASCII明码格式，另一种是二进制格式。

ASCII格式

ASCII码格式的STL文件逐行给出三角面片的几何信息，每一行以1个或2个关键字开头。
在STL文件中的三角面片的信息单元 facet 是一个带矢量...]]></description><category></category></item><item><title><![CDATA[Android中使用序列化]]></title><link>https://blog.youkuaiyun.com/gogo_wei/article/details/82914380</link><guid>https://blog.youkuaiyun.com/gogo_wei/article/details/82914380</guid><author>gogo_wei</author><pubDate>Sun, 30 Sep 2018 23:56:33 +0800</pubDate><description><![CDATA[Android中使用序列化
序列化与反序列化
序列化：将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间，对象将其当前状态写入到临时或持久性存储区。
反序列化：序列化的逆向操作，通过从存储区中读取对象的状态，重新创建该对象。
使用目的及场景
使对象持久化
一般情况下，只有当JVM处于运行时，java对象才可能存在，对象的生命周期不会比JVM的生命周期更长。但在现实应用中，存在JVM停止...]]></description><category></category></item><item><title><![CDATA[在Android中使用JNI]]></title><link>https://blog.youkuaiyun.com/gogo_wei/article/details/82810865</link><guid>https://blog.youkuaiyun.com/gogo_wei/article/details/82810865</guid><author>gogo_wei</author><pubDate>Sat, 22 Sep 2018 11:05:13 +0800</pubDate><description><![CDATA[在Android中使用JNI
JNI简介
JNI是Java Native Interface的缩写，使用JNI能够使运行在Java虚拟机上的程序和本地程序互相调用，本地程序可以是其它语言编写的，如C、C++ 或者汇编语言。当程序无法完全使用Java编写时（例如需要调用C/C++的库、与硬件进行交互、提高程序的性能、提高安全性防止反编译），可以通过JNI来编写本地方法。JNI还可以用于修改现有的本地...]]></description><category></category></item><item><title><![CDATA[密码学基础]]></title><link>https://blog.youkuaiyun.com/gogo_wei/article/details/81879876</link><guid>https://blog.youkuaiyun.com/gogo_wei/article/details/81879876</guid><author>gogo_wei</author><pubDate>Mon, 20 Aug 2018 23:53:48 +0800</pubDate><description><![CDATA[密码学基础

​   注：本文不涉及复杂的算法，主要是梳理密码学知识体系，为以后系统地深入地学习打好基础。

​   整理本文的过程中，主要参考了以下文档：

​   https://wenku.baidu.com/view/e837a8a86137ee06eff918a3.html?sxts=1534474835258

​   https://wenku.baidu.com/view/9763...]]></description><category></category></item><item><title><![CDATA[Android组件化总结]]></title><link>https://blog.youkuaiyun.com/gogo_wei/article/details/81294877</link><guid>https://blog.youkuaiyun.com/gogo_wei/article/details/81294877</guid><author>gogo_wei</author><pubDate>Tue, 31 Jul 2018 01:05:53 +0800</pubDate><description><![CDATA[Android组件化总结



1、什么是组件化

​   组件化指将一个工程拆分为多个子Module，每个Module作为一个组件。组件内部功能单一，具有高复用性，可独立编译与打包运行，组件之间互相不依赖但可以互相通信，在最终打包时可按需求任意搭配组合各组件。

2、为什么要组件化

组件化能有效的提高工作效率，控制产品质量，主要体现在以下几个方面：


大幅提升编译速度。传统的工程架构，稍微改...]]></description><category></category></item><item><title><![CDATA[Databinding之RecyclerViewAdapter使用与封装]]></title><link>https://blog.youkuaiyun.com/gogo_wei/article/details/81049652</link><guid>https://blog.youkuaiyun.com/gogo_wei/article/details/81049652</guid><author>gogo_wei</author><pubDate>Sun, 15 Jul 2018 02:20:14 +0800</pubDate><description><![CDATA[Databinding之RecyclerViewAdapter使用与封装

RecyclerViewAdapter大家都不陌生，那么在使用Databinding时，RecyclerViewAdapter该如何编写呢？

本文用一个邮箱类型列表作为案例，来讲解在使用Databinding时如何编写RecyclerViewAdapter，并且如何有效的封装RecyclerViewAdapter。


...]]></description><category></category></item><item><title><![CDATA[Unbuntu14.04下MailCore2 Android编译过程]]></title><link>https://blog.youkuaiyun.com/gogo_wei/article/details/80646127</link><guid>https://blog.youkuaiyun.com/gogo_wei/article/details/80646127</guid><author>gogo_wei</author><pubDate>Sun, 10 Jun 2018 23:19:14 +0800</pubDate><description><![CDATA[Unbuntu14.04下MailCore2 Android编译过程



MailCore2简述

MailCore2是一个旨在减轻使用电子邮件协议的痛苦的库。它能运行在iOS、OS X、Android、Windows和Linux上，支持SMTP、IMAP、POP3、RCF822、MIME和HTML消息渲染。

https://github.com/MailCore/mailcore2



编...]]></description><category></category></item><item><title><![CDATA[Android系统插入USB设备自动授权不弹出对话框]]></title><link>https://blog.youkuaiyun.com/gogo_wei/article/details/79726752</link><guid>https://blog.youkuaiyun.com/gogo_wei/article/details/79726752</guid><author>gogo_wei</author><pubDate>Wed, 28 Mar 2018 14:07:01 +0800</pubDate><description><![CDATA[Android系统插入USB设备时，系统会弹出询问权限的对话框，现在需要不弹对话框而直接授权。修改/frameworks/base/packages/SystemUI/src/com/android/systemui/usb/UsbPermissionActivity.java ，直接注释setupAlert()方法，并将mPermissionGranted设为true即可。...]]></description><category></category></item><item><title><![CDATA[Android在保留原launcher程序前提下，将应用设为默认Launcher]]></title><link>https://blog.youkuaiyun.com/gogo_wei/article/details/79724186</link><guid>https://blog.youkuaiyun.com/gogo_wei/article/details/79724186</guid><author>gogo_wei</author><pubDate>Wed, 28 Mar 2018 13:45:35 +0800</pubDate><description><![CDATA[    将应用设为Launcher很简单，只需在AndroidManifest.xml文件中添加以下两条属性即可：    &amp;lt;category android:name=&quot;android.intent.category.HOME&quot; /&amp;gt;    &amp;lt;category android:name=&quot;android.intent.category.DEFAULT&quot; /&amp;gt;    然而这样...]]></description><category></category></item></channel></rss>