<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[limushan的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/limushan</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; limushan]]></copyright><item><title><![CDATA[Retrofit 框架原理和源码分析]]></title><link>https://blog.youkuaiyun.com/limushan/article/details/118516149</link><guid>https://blog.youkuaiyun.com/limushan/article/details/118516149</guid><author>limushan</author><pubDate>Mon, 05 Jul 2021 10:38:40 +0800</pubDate><description><![CDATA[一、简单使用
具体使用流程和方法说明详见：使用教程
简单的代码示例：
//步骤1：创建接口类
public interface WanAndroidService {
    @GET("article/list/{index}/json")
    Call&lt;JsonObject&gt; getArticles(@Path("index") int index);
}

//步骤2:构建R...]]></description><category></category></item><item><title><![CDATA[Retrofit 框架使用]]></title><link>https://blog.youkuaiyun.com/limushan/article/details/118516148</link><guid>https://blog.youkuaiyun.com/limushan/article/details/118516148</guid><author>limushan</author><pubDate>Mon, 05 Jul 2021 10:36:44 +0800</pubDate><description><![CDATA[本文主要介绍Retrofit的使用

官网
一、定义

一个类型安全的 HTTP客户端请求框架，适用于Android和Java

Retrofit是一个Restful的HTTP网络请求框架的封装。网络请求实际上由OKHttp完成的，而Retrofit仅负责网络请求接口的封装
二、依赖添加
Gradle方式：
implementation 'com.squareup.retrofit2:retro...]]></description><category></category></item><item><title><![CDATA[Java 动态代理]]></title><link>https://blog.youkuaiyun.com/limushan/article/details/117734698</link><guid>https://blog.youkuaiyun.com/limushan/article/details/117734698</guid><author>limushan</author><pubDate>Tue, 08 Jun 2021 10:36:13 +0800</pubDate><description><![CDATA[一、简介
1.1 定义
给某一个对象提供一个代理，并由代理对象控制对真实对象的访问，代理模式是结构型设计模式的一种

代理模式详解

根据字节码文件的创建时机来分类，可以分为静态代理和动态代理
1.2 静态代理
在程序运行前就已经存在代理类的字节码文件，代理类和被目标类的关系在运行前就确定了
1.3 动态代理
代理类在程序运行期间优JVM根据反射等机制动态生成，在程序运行前并不存在代理类的字节码文...]]></description><category></category></item><item><title><![CDATA[Java so文件混淆]]></title><link>https://blog.youkuaiyun.com/limushan/article/details/90761529</link><guid>https://blog.youkuaiyun.com/limushan/article/details/90761529</guid><author>limushan</author><pubDate>Mon, 03 Jun 2019 09:39:00 +0800</pubDate><description><![CDATA[So文件混淆
一、 混淆目的
JNI开发过程中利用javah生成本地层对应的函数名类似于java_com_XX这种形式，很容易被逆向者在逆向so的时候在IDA的Exports列表中找到


如下：




image.png

我们的目的就是让这个函数在IDA中不能轻易找出，增加破解难度。
二、 混淆方法
1. 原理
当我们在Java中调用System.l...]]></description><category></category></item><item><title><![CDATA[Java 泛型通配符上下界理解及应用]]></title><link>https://blog.youkuaiyun.com/limushan/article/details/88890035</link><guid>https://blog.youkuaiyun.com/limushan/article/details/88890035</guid><author>limushan</author><pubDate>Thu, 21 Mar 2019 20:31:00 +0800</pubDate><description><![CDATA[一.通配符的应用
实践检验真理，所以在说明通配符上下界的理解的时候，先说明下什么时候使用通配符
关于泛型
类型通配符的作用是为了代替泛型类的类型实参。
当我们使用泛型类作为参数时，我们不想固定具体的泛型类型实参，而是想接收任意类型，或者某个类及其子类或超类类型作为类型实参，这个时候就需要使用通配符了，使用泛型类&lt;?&gt;作为类型实参
总结来说通配符...]]></description><category></category></item><item><title><![CDATA[Android 混淆]]></title><link>https://blog.youkuaiyun.com/limushan/article/details/88360928</link><guid>https://blog.youkuaiyun.com/limushan/article/details/88360928</guid><author>limushan</author><pubDate>Fri, 08 Mar 2019 00:15:00 +0800</pubDate><description><![CDATA[一.混淆开启

混淆：是将计算机程序的代码，转换成一种功能上等价，但是难于阅读和理解的形式的行为。加代码混淆意义在于不想开源应用，为了加大反编译的成本，但是并不能彻底防止反编译

在Application主工程的build.gradle文件里面设置

开启混淆：minifyEnabled true

配置混淆文件：proguardFiles getDefa...]]></description><category></category></item><item><title><![CDATA[Android 打包上传Maven库]]></title><link>https://blog.youkuaiyun.com/limushan/article/details/88265228</link><guid>https://blog.youkuaiyun.com/limushan/article/details/88265228</guid><author>limushan</author><pubDate>Wed, 06 Mar 2019 20:55:00 +0800</pubDate><description><![CDATA[一.Maven私服搭建


下载nexus3
地址：https://www.sonatype.com/download-oss-sonatype
windows系统：











修改配置
解压下载包到：F:\MavenCenter\nexus-3.15.2-01-win64
修改文件位置：...\nexus-3.15.2-01\etc文件夹下n...]]></description><category></category></item><item><title><![CDATA[Android APT（Java注解应用）]]></title><link>https://blog.youkuaiyun.com/limushan/article/details/88096890</link><guid>https://blog.youkuaiyun.com/limushan/article/details/88096890</guid><author>limushan</author><pubDate>Sun, 03 Mar 2019 16:30:00 +0800</pubDate><description><![CDATA[关于Java注解
一.APT技术
APT(Annotation Process Tool)，注解处理器。用来在编译时扫描和处理注解，按照一定的规则，生成相应的java文件。
Android 目前比较流行的Dagger2, ButterKnife, EventBus3都采用了APT技术。
二.APT使用
1.  AbstractProcesser类
Java...]]></description><category></category></item><item><title><![CDATA[Java注解 annotation]]></title><link>https://blog.youkuaiyun.com/limushan/article/details/88054973</link><guid>https://blog.youkuaiyun.com/limushan/article/details/88054973</guid><author>limushan</author><pubDate>Fri, 22 Feb 2019 10:43:00 +0800</pubDate><description><![CDATA[一.什么是注解
官方解释：

Java 注解用于为Java程序提供元数据。作为元数据，注解不直接影响代码的执行，但也有一些注解实际上可以用于这一目的。

什么是元数据，即一种描述数据的数据。所以可以说注解是描述源代码的数据。
简单理解注解可以看出一个个标签，用来标记你的代码，是一种应用于类，方法，参数，变量，构造器及包的一种特殊修饰符。
二.注解的定义
注...]]></description><category></category></item><item><title><![CDATA[Android 全面屏黑边适配]]></title><link>https://blog.youkuaiyun.com/limushan/article/details/88053364</link><guid>https://blog.youkuaiyun.com/limushan/article/details/88053364</guid><author>limushan</author><pubDate>Wed, 13 Feb 2019 10:36:00 +0800</pubDate><description><![CDATA[问题：
全面屏底部会出现黑边
原因：
全面屏宽高比例比较特殊，不是之前的16:9。例如小米mix2s，屏幕宽高比是18:9。Android默认支持的最大宽高比例是1.86，小于全面屏手机的宽高比例。所有如果全面屏手机上的应用没有做适配，底部就会出现黑边。
解决方案：

方案1：设置resizeableActivity属性值

&amp;lt;application...]]></description><category></category></item><item><title><![CDATA[Android 9.0 加密适配]]></title><link>https://blog.youkuaiyun.com/limushan/article/details/86625981</link><guid>https://blog.youkuaiyun.com/limushan/article/details/86625981</guid><author>limushan</author><pubDate>Wed, 23 Jan 2019 15:56:00 +0800</pubDate><description><![CDATA[
  
    
            Android 9.0 加密报错：

NoSuchAlgorithmException: class configured for SecureRandom (provider: Crypto) cannot be found

调用方法:
private static byte[] getRawKey(byte[] seed) throws Except...]]></description><category></category></item><item><title><![CDATA[Android SQLite (二.数据库创建，升级及降级)]]></title><link>https://blog.youkuaiyun.com/limushan/article/details/83111803</link><guid>https://blog.youkuaiyun.com/limushan/article/details/83111803</guid><author>limushan</author><pubDate>Tue, 16 Oct 2018 20:24:00 +0800</pubDate><description><![CDATA[
  
    
            一.SQLite简介和常用语法
二.数据库创建，升级及降级
上篇文章简介和常用语法介绍了SQLite数据库的基本信息和一些常用的语法操作，本篇文章主要介绍Android开发过程中SQLite数据库的创建使用和常见问题处理。
一.SQLiteOpenHelper介绍
对于Android平台来说，我们可以使用系统提供的API轻松实现对SQLite数据库的操作
...]]></description><category></category></item><item><title><![CDATA[Android 横竖屏切换总结]]></title><link>https://blog.youkuaiyun.com/limushan/article/details/82882170</link><guid>https://blog.youkuaiyun.com/limushan/article/details/82882170</guid><author>limushan</author><pubDate>Sat, 01 Sep 2018 17:54:00 +0800</pubDate><description><![CDATA[
  
    
            一.Android切换横竖屏

应用的横竖屏设置
应用的横竖屏设置主要是通过Activity的screenOrientation属性控制，属性值如下：









主要有以下两种方式设置screenOrientation属性值

静态设置，即在Mainfest文件中配置screenOrientation属性
动态设置，即调用Activity的setR...]]></description><category></category></item><item><title><![CDATA[Android SQLite （一.简介和常用语法）]]></title><link>https://blog.youkuaiyun.com/limushan/article/details/82882161</link><guid>https://blog.youkuaiyun.com/limushan/article/details/82882161</guid><author>limushan</author><pubDate>Fri, 24 Aug 2018 19:37:00 +0800</pubDate><description><![CDATA[[一.SQLite简介和常用语法][二.数据库创建，升级及降级]

一.简介

SQLite是一个轻量级的数据库，实现了自给自足的，无服务器的，零配置的，事务性的SQL数据库引擎。

二.基本SQL语法

SQLite 不区分大小写，但有一些命令是大小写敏感的，例如：GLOB和glob

1.数据类型

每个存储在SQLite的值都属于以下存储类之一
存储类
			说明
		NULL
			值是一...]]></description><category></category></item><item><title><![CDATA[GIT和SVN同时管理项目（Android为例，Android Studio）]]></title><link>https://blog.youkuaiyun.com/limushan/article/details/82882163</link><guid>https://blog.youkuaiyun.com/limushan/article/details/82882163</guid><author>limushan</author><pubDate>Thu, 02 Aug 2018 19:24:00 +0800</pubDate><description><![CDATA[
  
    
            前言
新公司，项目都是使用SVN管理的，但是SVN无法在本地切换分支,也没有暂存，分步commit等功能，实际开发中使用很不方便，但是项目远程仓库是配置的SVN，这个无法修改，怎么办呢？
下面提供个方案：GIT管理本地项目，SVN负责提交远程仓库
git配置
下载地址

git init
切换到项目目录，命令行，执行如下命令：初始化本地git仓库

git...]]></description><category></category></item><item><title><![CDATA[Andrid AIDL简介和使用]]></title><link>https://blog.youkuaiyun.com/limushan/article/details/81150839</link><guid>https://blog.youkuaiyun.com/limushan/article/details/81150839</guid><author>limushan</author><pubDate>Sat, 21 Jul 2018 16:10:00 +0800</pubDate><description><![CDATA[零.前言

本片文章主要介绍Android AIDL的概念和使用，着重介绍AIDL的使用。

一.基本概念

什么是Binder：简单的来讲，我们可以将Binder看成Android进程间通信的一种方式，是Android的特性之一。

什么是ALDL：AIDL ( Android Interface Definition Language ) Android接口定义语言。AIDL是一种编程规范，用...]]></description><category></category></item><item><title><![CDATA[Android 6.0+的权限问题]]></title><link>https://blog.youkuaiyun.com/limushan/article/details/58140003</link><guid>https://blog.youkuaiyun.com/limushan/article/details/58140003</guid><author>limushan</author><pubDate>Mon, 27 Feb 2017 16:50:41 +0800</pubDate><description><![CDATA[问题：Caused by: android.system.ErrnoException: open failed: EACCES (Permission denied) 
前段时间实现Android文件的创建时遇到这个问题，权限拒绝。明明权限在manifest文件列出了读取权限，为什么会失败，后来查找Android官方文档，发现Android 23+之后的API对权限进行了新的规定。
  系统权限分]]></description><category></category></item><item><title><![CDATA[Android library三方框架-jcenter仓库]]></title><link>https://blog.youkuaiyun.com/limushan/article/details/56011593</link><guid>https://blog.youkuaiyun.com/limushan/article/details/56011593</guid><author>limushan</author><pubDate>Mon, 20 Feb 2017 12:26:21 +0800</pubDate><description><![CDATA[上传Android library 到jcenter1.创建bintray官网账号 
注册地址：https://bintray.com/signup 
当然你也可以使用GitHub账号地址注册，这里需要注意邮箱地址不能是QQ邮箱地址 
2.创建jcenter仓库 
 
 
3.创建仓库的package–你的项目地址 
 
 
4.在project项目的gradle文件中添加上传插件 dependen]]></description><category></category></item><item><title><![CDATA[Android View的工作流程总结分析（二）-Measure]]></title><link>https://blog.youkuaiyun.com/limushan/article/details/53128679</link><guid>https://blog.youkuaiyun.com/limushan/article/details/53128679</guid><author>limushan</author><pubDate>Fri, 11 Nov 2016 14:47:30 +0800</pubDate><description><![CDATA[接上文，下面讲讲View工作的三大流程： 
一、Measure流程

Measure流程是三个流程里面最复杂的，先说下一个概念MeasureSpec 
MeasureSpec 封装了父View传递给子View的布局要求，它是根据子View的layoutParams属性（layout_windth,layout_height等等）和父View自身的宽高生成的一个尺寸需求。当前View会根据这个值来设]]></description><category></category></item><item><title><![CDATA[Android View的工作流程总结分析 (一) -performTraversals]]></title><link>https://blog.youkuaiyun.com/limushan/article/details/52912057</link><guid>https://blog.youkuaiyun.com/limushan/article/details/52912057</guid><author>limushan</author><pubDate>Mon, 24 Oct 2016 15:22:04 +0800</pubDate><description><![CDATA[Android View的工作流程

     Android View的工作流程主要有三大流程：
   measure 流程，测量获得View所需要的宽高
   layout 流程，布局决定View在屏幕中具体的位置（决定实际的宽高）
   draw 流程 绘制，真正将View的内容显示到匹配中

   View工作是从什么地方开始的呢？先说结论：ViewRootImpl调用per]]></description><category></category></item></channel></rss>