<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[大山]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/jinkui</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; jinkui]]></copyright><item><title><![CDATA[APK 签名轮替方案 v3]]></title><link>https://blog.csdn.net/jinkui/article/details/115406238</link><guid>https://blog.csdn.net/jinkui/article/details/115406238</guid><author>jinkui</author><pubDate>Fri, 02 Apr 2021 18:59:13 +0800</pubDate><description><![CDATA[Android 9 支持 APK 密钥轮替，使得应用能够在 APK 更新过程中更改其签名密钥。为了实现轮替，APK 必须指示新旧签名密钥之间的信任级别。为了支持密钥轮替，我们将 APK 签名方案从 v2 更新为 v3，以允许使用新旧密钥。
V3 签名特性
在 Android 9 及更高版本中，可以根据 APK 签名方案 v3、v2 或 v1 验证 APK。较旧的平台会忽略 v3 签名而尝试验证 v2 签名，然后尝试验证 v1 签名。
签名轮替后，android 9 上升级到新版本后，不能再安装旧版签名的 a]]></description><category></category></item><item><title><![CDATA[Android 11 签名压缩 so 库]]></title><link>https://blog.csdn.net/jinkui/article/details/115303636</link><guid>https://blog.csdn.net/jinkui/article/details/115303636</guid><author>jinkui</author><pubDate>Mon, 29 Mar 2021 15:56:51 +0800</pubDate><description><![CDATA[Android 11 要求，预装的apk，target sdk 为 30 以上，必须在 apk 中使用未压缩的 so 库。
检查方式，运行命令 unzip -v your_app.apk ‘lib//.so’
如果 so 库文件显示 Defi，表示经过压缩
$ unzip -v demo.apk 'lib/*/*.so'
Archive:  demo.apk
 Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
--------  --]]></description><category></category></item><item><title><![CDATA[HTTP 常用知识]]></title><link>https://blog.csdn.net/jinkui/article/details/115012376</link><guid>https://blog.csdn.net/jinkui/article/details/115012376</guid><author>jinkui</author><pubDate>Fri, 19 Mar 2021 18:16:01 +0800</pubDate><description><![CDATA[HTTP是Hyper Text Transfer Protocol（超文本传输协议）的缩写：

基于TCP/IP通信协议来传递数据；
客户端/服务端（C/S）的架构模型；
无状态的请求/响应协议。

Http 报文格式
请求报文
一个HTTP请求的消息以下四个部分组成：请求行（request line）、请求头部（header）、空行和请求数据。
GET /hello.txt HTTP/1.1
User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zl.]]></description><category></category></item><item><title><![CDATA[int 包装类型 Integer]]></title><link>https://blog.csdn.net/jinkui/article/details/114927046</link><guid>https://blog.csdn.net/jinkui/article/details/114927046</guid><author>jinkui</author><pubDate>Wed, 17 Mar 2021 13:44:25 +0800</pubDate><description><![CDATA[int 是 java 内置的基本数据类型，对应有一个包装类型 Integer。
Integer 内部有一个缓存 IntegerCache，通过享元模式，将最常用的 Integer 缓存，节省内存。
private static class IntegerCache {
    static final int low = -128;
    static final int high;
    static final Integer[] cache;
    static Integer[] archiv]]></description><category></category></item><item><title><![CDATA[阅读 jdk 代码之导入 idea]]></title><link>https://blog.csdn.net/jinkui/article/details/114871955</link><guid>https://blog.csdn.net/jinkui/article/details/114871955</guid><author>jinkui</author><pubDate>Tue, 16 Mar 2021 11:05:18 +0800</pubDate><description><![CDATA[下载代码
https://github.com/openjdk/jdk 下载 jdk 最新代码。
git clone https://github.com/openjdk/jdk.git
导入 idea ide
打开 idea，open 下载的 jdk 代码目录，等待导入。
设置项目的 sdk， idea 菜单 File -&gt; Project Structure ：

添加 sdk， 选中左侧 Platform Settings 下面的 SDKs，点击中间的 +，添加 sdk；
Name 栏修改名称，]]></description><category></category></item><item><title><![CDATA[String长度限制]]></title><link>https://blog.csdn.net/jinkui/article/details/114845294</link><guid>https://blog.csdn.net/jinkui/article/details/114845294</guid><author>jinkui</author><pubDate>Mon, 15 Mar 2021 18:41:43 +0800</pubDate><description><![CDATA[String长度有限制吗？是多少？
Java中String是有长度限制的，在JVM编译中还有规范。
String其实是使用的一个char类型的数组来存储字符串中的字符的。
public final class String
    implements java.io.Serializable, Comparable&lt;String&gt;, CharSequence,
               Constable, ConstantDesc {

    @Stable
    private f]]></description><category></category></item><item><title><![CDATA[Android System Server]]></title><link>https://blog.csdn.net/jinkui/article/details/89638876</link><guid>https://blog.csdn.net/jinkui/article/details/89638876</guid><author>jinkui</author><pubDate>Sun, 28 Apr 2019 15:18:14 +0800</pubDate><description><![CDATA[System Server

Android 系统服务进程 system_server，运行着各种服务，比如 PMS, AMS, WMS 等等。 该进程是启动时，由 Zygote 启动。

frameworks/base/core/java/com/android/internal/os/ZygoteInit.java


private static Runnable forkSystemSer...]]></description><category></category></item><item><title><![CDATA[Android Zygote Fork]]></title><link>https://blog.csdn.net/jinkui/article/details/89638796</link><guid>https://blog.csdn.net/jinkui/article/details/89638796</guid><author>jinkui</author><pubDate>Sun, 28 Apr 2019 15:16:17 +0800</pubDate><description><![CDATA[Zygote

zygote 孵化器是 Android 应用进程的模板，通过其 fork 出来。 Zygote初始化最后进入 select 循环， 等待客户端的请求 fork 应用进程。



frameworks/base/core/java/com/android/internal/os/ZygoteServer.java


Runnable runSelectLoop(String abi...]]></description><category></category></item><item><title><![CDATA[Android Zygote]]></title><link>https://blog.csdn.net/jinkui/article/details/89638597</link><guid>https://blog.csdn.net/jinkui/article/details/89638597</guid><author>jinkui</author><pubDate>Sun, 28 Apr 2019 15:12:52 +0800</pubDate><description><![CDATA[Android 启动

Android 底层是 Linux 系统，Linux 启动后的第一个进程是 init， init 通过 init.rc 配置文件启动一系列的进程，其中 zygote 进程是 Android 系统的核心，是一个 Android 进程的孵化器，所有 Android 进程都是基于这个进程克隆出来的，包括 system_service。





init

init.zygot...]]></description><category></category></item><item><title><![CDATA[PHP HTTP请求签名]]></title><link>https://blog.csdn.net/jinkui/article/details/74925779</link><guid>https://blog.csdn.net/jinkui/article/details/74925779</guid><author>jinkui</author><pubDate>Mon, 10 Jul 2017 15:44:33 +0800</pubDate><description><![CDATA[请求url通常需要附带签名参数，以防被篡改。通常是md5生成指纹, 后端通过同样的方法进行验证。]]></description><category></category></item><item><title><![CDATA[PHP HTTP添加自定义头]]></title><link>https://blog.csdn.net/jinkui/article/details/74925681</link><guid>https://blog.csdn.net/jinkui/article/details/74925681</guid><author>jinkui</author><pubDate>Mon, 10 Jul 2017 15:43:39 +0800</pubDate><description><![CDATA[一般客户端和服务器传递数据都通过请求参数，很少添加自定义头。服务器端将头放在全局数据_SERVER里，参数都以HTTP开头，例如：客户端在http头里添加了SSOTK参数， 服务器端可这样读取：if(array_key_exists('HTTP_SSOTK', $_SERVER)) {
$token = $_SERVER['HTTP_SSOTK'];
}可以打印_SERVER，看看都有哪些内容：fo]]></description><category></category></item><item><title><![CDATA[PHP date, time, microtime]]></title><link>https://blog.csdn.net/jinkui/article/details/74925560</link><guid>https://blog.csdn.net/jinkui/article/details/74925560</guid><author>jinkui</author><pubDate>Mon, 10 Jul 2017 15:42:55 +0800</pubDate><description><![CDATA[time() Unix时间戳(1970为0)，单位为秒。 
microtime() 以 “msec sec” 的格式返回一个字符串，其中 sec（时间戳)，msec 是微秒部分。date() 格式化时间，默认时间是time()。ps: s（秒）、ms（毫秒）、μs（微秒）、ns（纳秒），其中：1s=1000ms，1 ms=1000μs，1μs=1000nstime()<?phpecho time()]]></description><category></category></item><item><title><![CDATA[PHP parse_str 解析字符串]]></title><link>https://blog.csdn.net/jinkui/article/details/74925484</link><guid>https://blog.csdn.net/jinkui/article/details/74925484</guid><author>jinkui</author><pubDate>Mon, 10 Jul 2017 15:42:15 +0800</pubDate><description><![CDATA[parse_str() 函数把查询字符串解析到变量中，主要用于页面之间传值（参数）。]]></description><category></category></item><item><title><![CDATA[PHP explode 和 implode 用法]]></title><link>https://blog.csdn.net/jinkui/article/details/74925324</link><guid>https://blog.csdn.net/jinkui/article/details/74925324</guid><author>jinkui</author><pubDate>Mon, 10 Jul 2017 15:41:10 +0800</pubDate><description><![CDATA[explode() 函数把字符串分割为数组；implode() 函数把数组元素组合为一个字符串。]]></description><category></category></item><item><title><![CDATA[Kotlin 单例]]></title><link>https://blog.csdn.net/jinkui/article/details/72832170</link><guid>https://blog.csdn.net/jinkui/article/details/72832170</guid><author>jinkui</author><pubDate>Thu, 01 Jun 2017 16:00:39 +0800</pubDate><description><![CDATA[单例的实现方法，可以通过同伴对象，或者 lazy。]]></description><category></category></item><item><title><![CDATA[Kotlin 注解]]></title><link>https://blog.csdn.net/jinkui/article/details/72832153</link><guid>https://blog.csdn.net/jinkui/article/details/72832153</guid><author>jinkui</author><pubDate>Thu, 01 Jun 2017 15:59:59 +0800</pubDate><description><![CDATA[Kotlin 的注解完全兼容 Java 的注解。]]></description><category></category></item><item><title><![CDATA[Kotlin 反射]]></title><link>https://blog.csdn.net/jinkui/article/details/72832143</link><guid>https://blog.csdn.net/jinkui/article/details/72832143</guid><author>jinkui</author><pubDate>Thu, 01 Jun 2017 15:59:22 +0800</pubDate><description><![CDATA[反射是语言与库中的一组功能, 可以在运行时刻获取程序本身的信息。]]></description><category></category></item><item><title><![CDATA[Kotlin 泛型]]></title><link>https://blog.csdn.net/jinkui/article/details/72832134</link><guid>https://blog.csdn.net/jinkui/article/details/72832134</guid><author>jinkui</author><pubDate>Thu, 01 Jun 2017 15:58:42 +0800</pubDate><description><![CDATA[Kotlin 支持泛型， 语法和 Java 类似。]]></description><category></category></item><item><title><![CDATA[Kotlin 集合]]></title><link>https://blog.csdn.net/jinkui/article/details/72832117</link><guid>https://blog.csdn.net/jinkui/article/details/72832117</guid><author>jinkui</author><pubDate>Thu, 01 Jun 2017 15:58:01 +0800</pubDate><description><![CDATA[与 Java 不同， Kotlin 明确地区分可变的和不可变的集合(list, set, map, 等等)。可变的集合可以增删改集合元素；而不可变集合也提供了相应的方法，但是指向会创建新的集合，而不是在原来的集合上修改。Kotlin 的集合都在命名空间 kotlin.collections。
Arrays
数组通过 arrayOf()创建。
Lists
Maps
和 Java 的一样， 存储键值对。]]></description><category></category></item><item><title><![CDATA[Kotlin 高阶函数 与 Lambda 表达式]]></title><link>https://blog.csdn.net/jinkui/article/details/72832111</link><guid>https://blog.csdn.net/jinkui/article/details/72832111</guid><author>jinkui</author><pubDate>Thu, 01 Jun 2017 15:57:21 +0800</pubDate><description><![CDATA[高阶函数(higher-order function)是一种特殊的函数, 它接受函数作为参数, 或者返回一个函数. 这种函数的一个很好的例子就是 lock() 函数.]]></description><category></category></item></channel></rss>