<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  
  <url>
    <loc>http://objectyan.me/2020/05/11/SpiderKeeper-Publish-Scrapy/</loc>
    
    <lastmod>2020-05-11T02:22:41.189Z</lastmod>
    
    <changefreq>always</changefreq>
    <data>
        <display>
            <title> SpiderKeeper 部署 Scrapy</title>
            <pubTime>2020-05-11T02:03:10.000Z</pubTime>
            
              
                <tag>Develop</tag>
              
                <tag>Python</tag>
              
                <tag>Scrapy</tag>
              
            
            <content>&lt;h4 id=&quot;安装环境&quot;&gt;&lt;a href=&quot;#安装环境&quot; class=&quot;headerlink&quot; title=&quot;安装环境&quot;&gt;&lt;/a&gt;安装环境&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;pip install scrapy&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;pip install scrapyd&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;pip install scrapyd-client&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;pip install spiderkeeper&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;启动-scrapyd&quot;&gt;&lt;a href=&quot;#启动-scrapyd&quot; class=&quot;headerlink&quot; title=&quot;启动 scrapyd&quot;&gt;&lt;/a&gt;启动 &lt;code&gt;scrapyd&lt;/code&gt;&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;scrapyd&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;启动-spiderkeeper&quot;&gt;&lt;a href=&quot;#启动-spiderkeeper&quot; class=&quot;headerlink&quot; title=&quot;启动 spiderkeeper&quot;&gt;&lt;/a&gt;启动 &lt;a href=&quot;https://github.com/DormyMo/SpiderKeeper&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;code&gt;spiderkeeper&lt;/code&gt;&lt;/a&gt;&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;spiderkeeper&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;&lt;img src=&quot;./run-spiderkeeper.png&quot; alt=&quot;启动 `spiderkeeper`后的截图&quot;&gt;&lt;/p&gt;
&lt;h4 id=&quot;配置-SpiderKeeper-发布-scrapy&quot;&gt;&lt;a href=&quot;#配置-SpiderKeeper-发布-scrapy&quot; class=&quot;headerlink&quot; title=&quot;配置 SpiderKeeper 发布 scrapy&quot;&gt;&lt;/a&gt;配置 SpiderKeeper 发布 scrapy&lt;/h4&gt;&lt;h5 id=&quot;1-浏览器打开-http-localhost-5000&quot;&gt;&lt;a href=&quot;#1-浏览器打开-http-localhost-5000&quot; class=&quot;headerlink&quot; title=&quot;1. 浏览器打开[http://localhost:5000/]&quot;&gt;&lt;/a&gt;1. 浏览器打开[&lt;a href=&quot;http://localhost:5000/]&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://localhost:5000/]&lt;/a&gt;&lt;/h5&gt;&lt;p&gt;&lt;img src=&quot;./spiderkeeper-web.png&quot; alt=&quot;SpiderKeeper界面&quot;&gt;&lt;/p&gt;
&lt;h5 id=&quot;2-点击-Create-Project-创建项目&quot;&gt;&lt;a href=&quot;#2-点击-Create-Project-创建项目&quot; class=&quot;headerlink&quot; title=&quot;2. 点击 Create Project 创建项目&quot;&gt;&lt;/a&gt;2. 点击 &lt;code&gt;Create Project&lt;/code&gt; 创建项目&lt;/h5&gt;&lt;h5 id=&quot;3-上传项目Egg文件&quot;&gt;&lt;a href=&quot;#3-上传项目Egg文件&quot; class=&quot;headerlink&quot; title=&quot;3. 上传项目Egg文件&quot;&gt;&lt;/a&gt;3. 上传项目Egg文件&lt;/h5&gt;&lt;h6 id=&quot;生成Egg文件&quot;&gt;&lt;a href=&quot;#生成Egg文件&quot; class=&quot;headerlink&quot; title=&quot;生成Egg文件&quot;&gt;&lt;/a&gt;生成Egg文件&lt;/h6&gt;&lt;figure class=&quot;highlight plain&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;scrapyd-deploy --build-egg output.egg&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;&lt;img src=&quot;./spiderkeeper-web-deploy.png&quot; alt=&quot;SpiderKeeper deploy 界面&quot;&gt;&lt;/p&gt;
&lt;h5 id=&quot;4-进入-Periodic-jobs-添加-Job&quot;&gt;&lt;a href=&quot;#4-进入-Periodic-jobs-添加-Job&quot; class=&quot;headerlink&quot; title=&quot;4.进入 Periodic jobs 添加 Job&quot;&gt;&lt;/a&gt;4.进入 Periodic jobs 添加 Job&lt;/h5&gt;&lt;p&gt;&lt;img src=&quot;./spiderkeeper-web-periodic-jobs.png&quot; alt=&quot;SpiderKeeper Periodic jobs 界面&quot;&gt;&lt;/p&gt;
</content>
            
              
                <breadCrumb title="Develop" url="http://objectyan.me/categories/Develop/"/>
              
                <breadCrumb title="Python" url="http://objectyan.me/categories/Develop/Python/"/>
              
                <breadCrumb title="Scrapy" url="http://objectyan.me/categories/Develop/Python/Scrapy/"/>
              
            
        </display>
    </data>
  </url>
  
  <url>
    <loc>http://objectyan.me/2020/04/30/Docker-Add-Registry-Mirrors/</loc>
    
    <lastmod>2020-04-30T09:51:17.795Z</lastmod>
    
    <changefreq>always</changefreq>
    <data>
        <display>
            <title> Docker 添加 Registry 镜像</title>
            <pubTime>2020-04-30T09:42:51.000Z</pubTime>
            
              
                <tag>Docker</tag>
              
                <tag>Config</tag>
              
            
            <content>&lt;h4 id=&quot;镜像地址&quot;&gt;&lt;a href=&quot;#镜像地址&quot; class=&quot;headerlink&quot; title=&quot;镜像地址&quot;&gt;&lt;/a&gt;镜像地址&lt;/h4&gt;&lt;figure class=&quot;highlight json&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;registry-mirrors&quot;&lt;/span&gt;: [&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;string&quot;&gt;&quot;https://registry.docker-cn.com&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;string&quot;&gt;&quot;http://hub-mirror.c.163.com&quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    ]&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;</content>
            
              
                <breadCrumb title="Docker" url="http://objectyan.me/categories/Docker/"/>
              
            
        </display>
    </data>
  </url>
  
  <url>
    <loc>http://objectyan.me/2020/04/20/Oracle-Edit-Database-File-Path/</loc>
    
    <lastmod>2020-04-29T07:35:04.779Z</lastmod>
    
    <changefreq>always</changefreq>
    <data>
        <display>
            <title> Oracle 修改数据库文件大小</title>
            <pubTime>2020-04-20T04:57:56.000Z</pubTime>
            
              
                <tag>Oracle</tag>
              
                <tag>Setting</tag>
              
            
            <content>&lt;h3 id=&quot;查询表空间信息&quot;&gt;&lt;a href=&quot;#查询表空间信息&quot; class=&quot;headerlink&quot; title=&quot;查询表空间信息&quot;&gt;&lt;/a&gt;查询表空间信息&lt;/h3&gt;&lt;figure class=&quot;highlight sql&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;SELECT&lt;/span&gt; D.FILE_NAME &lt;span class=&quot;string&quot;&gt;&quot;表空间地址&quot;&lt;/span&gt;, &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;keyword&quot;&gt;UPPER&lt;/span&gt;(F.TABLESPACE_NAME) &lt;span class=&quot;string&quot;&gt;&quot;表空间名&quot;&lt;/span&gt;, &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    D.AUTOEXTENSIBLE &lt;span class=&quot;string&quot;&gt;&quot;是否自动扩展&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    D.TOT_GROOTTE_MB &lt;span class=&quot;string&quot;&gt;&quot;表空间大小(M)&quot;&lt;/span&gt;, &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    D.TOT_GROOTTE_MB - F.TOTAL_BYTES &lt;span class=&quot;string&quot;&gt;&quot;已使用空间(M)&quot;&lt;/span&gt;, &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    TO_CHAR(&lt;span class=&quot;keyword&quot;&gt;ROUND&lt;/span&gt;((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * &lt;span class=&quot;number&quot;&gt;100&lt;/span&gt;,&lt;span class=&quot;number&quot;&gt;2&lt;/span&gt;),&lt;span class=&quot;string&quot;&gt;&#39;990.99&#39;&lt;/span&gt;) &lt;span class=&quot;string&quot;&gt;&quot;使用比&quot;&lt;/span&gt;, &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    F.TOTAL_BYTES &lt;span class=&quot;string&quot;&gt;&quot;空闲空间(M)&quot;&lt;/span&gt;, &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    F.MAX_BYTES &lt;span class=&quot;string&quot;&gt;&quot;最大块(M)&quot;&lt;/span&gt; &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;keyword&quot;&gt;FROM&lt;/span&gt; &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    (&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;keyword&quot;&gt;SELECT&lt;/span&gt; TABLESPACE_NAME, &lt;span class=&quot;keyword&quot;&gt;ROUND&lt;/span&gt;(&lt;span class=&quot;keyword&quot;&gt;SUM&lt;/span&gt;(&lt;span class=&quot;keyword&quot;&gt;BYTES&lt;/span&gt;) / (&lt;span class=&quot;number&quot;&gt;1024&lt;/span&gt; * &lt;span class=&quot;number&quot;&gt;1024&lt;/span&gt;), &lt;span class=&quot;number&quot;&gt;2&lt;/span&gt;) TOTAL_BYTES, &lt;span class=&quot;keyword&quot;&gt;ROUND&lt;/span&gt;(&lt;span class=&quot;keyword&quot;&gt;MAX&lt;/span&gt;(&lt;span class=&quot;keyword&quot;&gt;BYTES&lt;/span&gt;) / (&lt;span class=&quot;number&quot;&gt;1024&lt;/span&gt; * &lt;span class=&quot;number&quot;&gt;1024&lt;/span&gt;), &lt;span class=&quot;number&quot;&gt;2&lt;/span&gt;) MAX_BYTES &lt;span class=&quot;keyword&quot;&gt;FROM&lt;/span&gt; SYS.DBA_FREE_SPACE &lt;span class=&quot;keyword&quot;&gt;GROUP&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;BY&lt;/span&gt; TABLESPACE_NAME&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    ) F,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    (&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;keyword&quot;&gt;SELECT&lt;/span&gt; DD.FILE_NAME, DD.AUTOEXTENSIBLE, DD.TABLESPACE_NAME, &lt;span class=&quot;keyword&quot;&gt;ROUND&lt;/span&gt;(&lt;span class=&quot;keyword&quot;&gt;SUM&lt;/span&gt;(DD.BYTES) / (&lt;span class=&quot;number&quot;&gt;1024&lt;/span&gt; * &lt;span class=&quot;number&quot;&gt;1024&lt;/span&gt;), &lt;span class=&quot;number&quot;&gt;2&lt;/span&gt;) TOT_GROOTTE_MB &lt;span class=&quot;keyword&quot;&gt;FROM&lt;/span&gt; SYS.DBA_DATA_FILES DD &lt;span class=&quot;keyword&quot;&gt;GROUP&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;BY&lt;/span&gt; DD.FILE_NAME, DD.AUTOEXTENSIBLE, DD.TABLESPACE_NAME&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    ) D &lt;span class=&quot;keyword&quot;&gt;WHERE&lt;/span&gt; D.TABLESPACE_NAME = F.TABLESPACE_NAME &lt;span class=&quot;keyword&quot;&gt;ORDER&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;BY&lt;/span&gt; &lt;span class=&quot;number&quot;&gt;5&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;DESC&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h3 id=&quot;设置表空间大小&quot;&gt;&lt;a href=&quot;#设置表空间大小&quot; class=&quot;headerlink&quot; title=&quot;设置表空间大小&quot;&gt;&lt;/a&gt;设置表空间大小&lt;/h3&gt;&lt;figure class=&quot;highlight sql&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;-- 设置为自动扩展&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;alter&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;database&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;datafile&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&#39;/U01/oradata/system.dbf&#39;&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;AUTOEXTEND&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;ON&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;NEXT&lt;/span&gt; &lt;span class=&quot;number&quot;&gt;50&lt;/span&gt;M &lt;span class=&quot;keyword&quot;&gt;MAXSIZE&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;UNLIMITED&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;-- 设置为表空间的大小&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;alter&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;database&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;datafile&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&#39;/U01/oradata/system.dbf&#39;&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;resize&lt;/span&gt; &lt;span class=&quot;number&quot;&gt;10240&lt;/span&gt;m;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;_*注意：处理 &lt;code&gt;ORA-01653: 表 SYS.OBJ$ 无法通过 128&lt;/code&gt;的错误 _&lt;/strong&gt; &lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;添加表空间文件&quot;&gt;&lt;a href=&quot;#添加表空间文件&quot; class=&quot;headerlink&quot; title=&quot;添加表空间文件&quot;&gt;&lt;/a&gt;添加表空间文件&lt;/h3&gt;&lt;figure class=&quot;highlight sql&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;-- 自动扩展&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;ALTER&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;TABLESPACE&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&quot;SYSTEM&quot;&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;ADD&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;DATAFILE&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&#39;/U01/oradata/system01.dbf&#39;&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;SIZE&lt;/span&gt; &lt;span class=&quot;number&quot;&gt;500&lt;/span&gt;M &lt;span class=&quot;keyword&quot;&gt;AUTOEXTEND&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;ON&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;NEXT&lt;/span&gt; &lt;span class=&quot;number&quot;&gt;50&lt;/span&gt;M &lt;span class=&quot;keyword&quot;&gt;MAXSIZE&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;UNLIMITED&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;-- 不可扩展&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;ALTER&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;TABLESPACE&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&quot;SYSTEM&quot;&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;ADD&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;DATAFILE&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&#39;/U01/oradata/system01.dbf&#39;&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;SIZE&lt;/span&gt; &lt;span class=&quot;number&quot;&gt;500&lt;/span&gt;M;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h3 id=&quot;迁移表空间位置&quot;&gt;&lt;a href=&quot;#迁移表空间位置&quot; class=&quot;headerlink&quot; title=&quot;迁移表空间位置&quot;&gt;&lt;/a&gt;迁移表空间位置&lt;/h3&gt;&lt;h4 id=&quot;关闭数据库迁移&quot;&gt;&lt;a href=&quot;#关闭数据库迁移&quot; class=&quot;headerlink&quot; title=&quot;关闭数据库迁移&quot;&gt;&lt;/a&gt;关闭数据库迁移&lt;/h4&gt;&lt;figure class=&quot;highlight sql&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;-- 关闭数据库&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;shutdown database;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;-- 移动对应文件地址 *.dbf 并mount模式启动数据库,修改数据库位置&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;startup mount;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;alter&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;database&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;rename&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;file&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&#39;[原数据文件地址]&#39;&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;to&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&#39;[移动后数据文件地址]&#39;&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;-- 打开数据库 &lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;alter&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;database&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;open&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;在线迁移数据库&quot;&gt;&lt;a href=&quot;#在线迁移数据库&quot; class=&quot;headerlink&quot; title=&quot;在线迁移数据库&quot;&gt;&lt;/a&gt;在线迁移数据库&lt;/h4&gt;&lt;figure class=&quot;highlight sql&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;-- 离线表空间&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;alter&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;tablespace&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;SYSTEM&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;offline&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;-- 移动对应文件地址 *.dbf 并修改数据库位置&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;alter&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;database&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;rename&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;file&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&#39;[原数据文件地址]&#39;&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;to&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&#39;[移动后数据文件地址]&#39;&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;-- 加载表空间&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;alter&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;tablespace&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;SYSTEM&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;online&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;查询锁表并删除锁表&quot;&gt;&lt;a href=&quot;#查询锁表并删除锁表&quot; class=&quot;headerlink&quot; title=&quot;查询锁表并删除锁表&quot;&gt;&lt;/a&gt;查询锁表并删除锁表&lt;/h4&gt;&lt;figure class=&quot;highlight sql&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;-- 获取锁表信息&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;select&lt;/span&gt; * &lt;span class=&quot;keyword&quot;&gt;from&lt;/span&gt; v$&lt;span class=&quot;keyword&quot;&gt;session&lt;/span&gt; t1, v$locked_object t2 &lt;span class=&quot;keyword&quot;&gt;where&lt;/span&gt; t1.sid = t2.SESSION_ID&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;-- kill掉锁表记录&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;alter&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;system&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;kill&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;session&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&#39;[SID],[SERIAL#]&#39;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;</content>
            
              
                <breadCrumb title="Database" url="http://objectyan.me/categories/Database/"/>
              
            
        </display>
    </data>
  </url>
  
  <url>
    <loc>http://objectyan.me/2020/04/25/Liunx-Bash/</loc>
    
    <lastmod>2020-04-26T07:47:59.387Z</lastmod>
    
    <changefreq>always</changefreq>
    <data>
        <display>
            <title> Liunx Bash 命令</title>
            <pubTime>2020-04-25T23:38:01.000Z</pubTime>
            
              
                <tag>Bash</tag>
              
            
            <content>&lt;h3 id=&quot;文件类&quot;&gt;&lt;a href=&quot;#文件类&quot; class=&quot;headerlink&quot; title=&quot;文件类&quot;&gt;&lt;/a&gt;文件类&lt;/h3&gt;&lt;h4 id=&quot;perl命令替换&quot;&gt;&lt;a href=&quot;#perl命令替换&quot; class=&quot;headerlink&quot; title=&quot;perl命令替换&quot;&gt;&lt;/a&gt;perl命令替换&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;perl -p -i -e &lt;span class=&quot;string&quot;&gt;&quot;s/[查找字段]/[替换字段]/g&quot;&lt;/span&gt; [文件名]&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;h5 id=&quot;perl参数说明&quot;&gt;&lt;a href=&quot;#perl参数说明&quot; class=&quot;headerlink&quot; title=&quot;perl参数说明&quot;&gt;&lt;/a&gt;perl参数说明&lt;/h5&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;参数&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;-a&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;自动分隔模式&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-F&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;指定-a的分隔符，可以使用正则表达式&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-e&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;执行指定的脚本&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-i&amp;lt;扩展名&amp;gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;原地替换文件&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-l&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;自动添加换行&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-n&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;自动循环&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-p&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;自动循环+自动输出&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h4 id=&quot;sed命令替换&quot;&gt;&lt;a href=&quot;#sed命令替换&quot; class=&quot;headerlink&quot; title=&quot;sed命令替换&quot;&gt;&lt;/a&gt;sed命令替换&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;sed -i &lt;span class=&quot;string&quot;&gt;&quot;s/[查找字段]/[替换字段]/g&quot;&lt;/span&gt; [文件名]&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;h5 id=&quot;sed参数说明&quot;&gt;&lt;a href=&quot;#sed参数说明&quot; class=&quot;headerlink&quot; title=&quot;sed参数说明&quot;&gt;&lt;/a&gt;sed参数说明&lt;/h5&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;参数&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;-i&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;就地修改文件&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-r&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;搜索子目录&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-l&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;输出匹配的文件名&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;s&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;替换&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;d&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;删除&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
</content>
            
              
                <breadCrumb title="Linux" url="http://objectyan.me/categories/Linux/"/>
              
            
        </display>
    </data>
  </url>
  
  <url>
    <loc>http://objectyan.me/tags/index.html</loc>
    
    <lastmod>2020-04-20T01:42:16.594Z</lastmod>
    
    <changefreq>always</changefreq>
    <data>
        <display>
            <title> Tags</title>
            <pubTime>2017-08-16T09:04:16.000Z</pubTime>
            
            <content></content>
            
        </display>
    </data>
  </url>
  
  <url>
    <loc>http://objectyan.me/google43311e3cee1af806.html</loc>
    
    <lastmod>2020-04-20T01:42:16.593Z</lastmod>
    
    <changefreq>always</changefreq>
    <data>
        <display>
            <title> google-site-verification</title>
            <pubTime>2018-05-29T09:57:00.000Z</pubTime>
            
            <content>google-site-verification: google43311e3cee1af806.html</content>
            
        </display>
    </data>
  </url>
  
  <url>
    <loc>http://objectyan.me/doc/index.html</loc>
    
    <lastmod>2020-04-20T01:42:16.593Z</lastmod>
    
    <changefreq>always</changefreq>
    <data>
        <display>
            <title> 文档收藏</title>
            <pubTime>2017-09-26T03:01:32.000Z</pubTime>
            
            <content>&lt;ul&gt;
&lt;li&gt;Javascript &lt;ul&gt;
&lt;li&gt;WebPack API: (&lt;a href=&quot;https://doc.webpack-china.org/configuration/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://doc.webpack-china.org/configuration/&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;ul&gt;
&lt;li&gt;.Net (&lt;a href=&quot;https://docs.microsoft.com/en-us/dotnet/api/index&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://docs.microsoft.com/en-us/dotnet/api/index&lt;/a&gt;)&lt;ul&gt;
&lt;li&gt;.Net Core API: (&lt;a href=&quot;https://docs.microsoft.com/en-us/dotnet/api/index?view=netcore-2.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://docs.microsoft.com/en-us/dotnet/api/index?view=netcore-2.0&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;.Net Core JavaScriptServices: (&lt;a href=&quot;https://github.com/aspnet/JavaScriptServices#readme&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/aspnet/JavaScriptServices#readme&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;ul&gt;
&lt;li&gt;React Native: (&lt;a href=&quot;http://facebook.github.io/react-native/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://facebook.github.io/react-native/&lt;/a&gt;)    &lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Anrdoid: (&lt;a href=&quot;https://developer.android.google.cn/index.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developer.android.google.cn/index.html&lt;/a&gt;)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Gradle: (&lt;a href=&quot;https://gradle.org&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://gradle.org&lt;/a&gt;) &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Other&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hexo API: (&lt;a href=&quot;https://hexo.io/zh-cn/docs/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://hexo.io/zh-cn/docs/&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
</content>
            
        </display>
    </data>
  </url>
  
  <url>
    <loc>http://objectyan.me/plug/index.html</loc>
    
    <lastmod>2020-04-20T01:42:16.593Z</lastmod>
    
    <changefreq>always</changefreq>
    <data>
        <display>
            <title> 插件收藏</title>
            <pubTime>2017-09-26T03:01:32.000Z</pubTime>
            
            <content>&lt;ul&gt;
&lt;li&gt;Tools&lt;ul&gt;
&lt;li&gt;Font Icon App: (&lt;a href=&quot;https://icomoon.io/app/#/select&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://icomoon.io/app/#/select&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
</content>
            
        </display>
    </data>
  </url>
  
  <url>
    <loc>http://objectyan.me/about/index.html</loc>
    
    <lastmod>2020-04-20T01:42:16.592Z</lastmod>
    
    <changefreq>always</changefreq>
    <data>
        <display>
            <title> About</title>
            <pubTime>2017-08-16T09:05:27.000Z</pubTime>
            
            <content></content>
            
        </display>
    </data>
  </url>
  
  <url>
    <loc>http://objectyan.me/categories/index.html</loc>
    
    <lastmod>2020-04-20T01:42:16.592Z</lastmod>
    
    <changefreq>always</changefreq>
    <data>
        <display>
            <title> Categories</title>
            <pubTime>2017-08-16T09:05:27.000Z</pubTime>
            
            <content></content>
            
        </display>
    </data>
  </url>
  
  <url>
    <loc>http://objectyan.me/2016/08/31/Windows-Service-Nginx/</loc>
    
    <lastmod>2020-04-20T01:42:16.591Z</lastmod>
    
    <changefreq>always</changefreq>
    <data>
        <display>
            <title> Nginx + Winsw Windows服务</title>
            <pubTime>2016-08-31T09:43:02.000Z</pubTime>
            
              
                <tag>Windows Service</tag>
              
                <tag>Nginx</tag>
              
            
            <content>&lt;blockquote&gt;
&lt;p&gt;安装步骤&lt;br&gt;1.下载Nginx：&lt;a href=&quot;http://nginx.org/en/download.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;官网&lt;/a&gt;&lt;br&gt;2.下载winsw配置包：&lt;a href=&quot;./nginx-service.zip&quot;&gt;下载&lt;/a&gt;&lt;br&gt;3.解压zip文件&lt;br&gt;4.安装&lt;br&gt;　　c:/nginx/nginx-service install&lt;br&gt;5.卸载&lt;br&gt;　　c:/nginx/nginx-service uninstall&lt;/p&gt;
&lt;/blockquote&gt;
</content>
            
              
                <breadCrumb title="Windows" url="http://objectyan.me/categories/Windows/"/>
              
            
        </display>
    </data>
  </url>
  
  <url>
    <loc>http://objectyan.me/2015/12/08/Windows-Auto-Service/</loc>
    
    <lastmod>2020-04-20T01:42:16.590Z</lastmod>
    
    <changefreq>always</changefreq>
    <data>
        <display>
            <title> 安装完成Windows服务后自动打开</title>
            <pubTime>2015-12-08T10:32:15.000Z</pubTime>
            
              
                <tag>Develop</tag>
              
                <tag>.Net</tag>
              
                <tag>C#</tag>
              
                <tag>Windows Service</tag>
              
            
            <content>&lt;p&gt;使用DOS进程开启服务&lt;/p&gt;
&lt;p&gt;设置serviceProcessInstaller1控件的Account属性为“LocalSystem”&lt;br&gt;设置serviceInstaller1控件的StartType属性为”Automatic”&lt;/p&gt;
&lt;p&gt;在服务器上添加安装程序，在ProjectInstaller_AfterInstall(object sender, InstallEventArgs e)事件中，添加代码&lt;/p&gt;
&lt;figure class=&quot;highlight c&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;System.Diagnostics.&lt;span class=&quot;built_in&quot;&gt;Process&lt;/span&gt; p = &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; System.Diagnostics.&lt;span class=&quot;built_in&quot;&gt;Process&lt;/span&gt;();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;p.StartInfo.FileName = &lt;span class=&quot;string&quot;&gt;&quot;cmd.exe&quot;&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;p.StartInfo.UseShellExecute = &lt;span class=&quot;literal&quot;&gt;false&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;p.StartInfo.RedirectStandardInput = &lt;span class=&quot;literal&quot;&gt;true&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;p.StartInfo.RedirectStandardOutput = &lt;span class=&quot;literal&quot;&gt;true&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;p.StartInfo.RedirectStandardError = &lt;span class=&quot;literal&quot;&gt;true&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;p.StartInfo.CreateNoWindow = &lt;span class=&quot;literal&quot;&gt;true&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;p.Start();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;built_in&quot;&gt;string&lt;/span&gt; Cmdstring = &lt;span class=&quot;string&quot;&gt;&quot;sc start myservice&quot;&lt;/span&gt;; &lt;span class=&quot;comment&quot;&gt;//CMD命令&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;p.StandardInput.WriteLine(Cmdstring);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;p.StandardInput.WriteLine(&lt;span class=&quot;string&quot;&gt;&quot;exit&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;</content>
            
              
                <breadCrumb title="Develop" url="http://objectyan.me/categories/Develop/"/>
              
                <breadCrumb title=".Net" url="http://objectyan.me/categories/Develop/Net/"/>
              
                <breadCrumb title="C#" url="http://objectyan.me/categories/Develop/Net/C/"/>
              
            
        </display>
    </data>
  </url>
  
  <url>
    <loc>http://objectyan.me/2016/09/05/Windows-Apache-PHP/</loc>
    
    <lastmod>2020-04-20T01:42:16.590Z</lastmod>
    
    <changefreq>always</changefreq>
    <data>
        <display>
            <title> Windows 配置 Apache + PHP</title>
            <pubTime>2016-09-05T02:08:36.000Z</pubTime>
            
              
                <tag>Apache</tag>
              
                <tag>PHP</tag>
              
            
            <content>&lt;blockquote&gt;
&lt;h4 id=&quot;需要工具&quot;&gt;&lt;a href=&quot;#需要工具&quot; class=&quot;headerlink&quot; title=&quot;需要工具&quot;&gt;&lt;/a&gt;需要工具&lt;/h4&gt;&lt;p&gt;apache  &lt;a href=&quot;https://www.apachelounge.com/download/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;下载地址&lt;/a&gt;&lt;br&gt;php for windows  （与apache同版本，使用线程安全）&lt;a href=&quot;http://windows.php.net/download&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;下载地址&lt;/a&gt;&lt;br&gt;vc (Visual Studio C++) 根据 apache 与 php 的版本选择vc的版本&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id=&quot;安装部署&quot;&gt;&lt;a href=&quot;#安装部署&quot; class=&quot;headerlink&quot; title=&quot;安装部署&quot;&gt;&lt;/a&gt;安装部署&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;&lt;h5 id=&quot;先安装vc&quot;&gt;&lt;a href=&quot;#先安装vc&quot; class=&quot;headerlink&quot; title=&quot;先安装vc&quot;&gt;&lt;/a&gt;先安装vc&lt;/h5&gt;&lt;/li&gt;
&lt;li&gt;&lt;h5 id=&quot;解压apache-与-php&quot;&gt;&lt;a href=&quot;#解压apache-与-php&quot; class=&quot;headerlink&quot; title=&quot;解压apache 与 php&quot;&gt;&lt;/a&gt;解压apache 与 php&lt;/h5&gt;&lt;/li&gt;
&lt;li&gt;&lt;h5 id=&quot;修改apache-配置文件下-“C-quot-开头的路径为当前路劲地址&quot;&gt;&lt;a href=&quot;#修改apache-配置文件下-“C-quot-开头的路径为当前路劲地址&quot; class=&quot;headerlink&quot; title=&quot;修改apache 配置文件下 “C:&amp;quot; 开头的路径为当前路劲地址&quot;&gt;&lt;/a&gt;修改apache 配置文件下 “C:&amp;quot; 开头的路径为当前路劲地址&lt;/h5&gt;&lt;/li&gt;
&lt;li&gt;&lt;h5 id=&quot;配置apache-挂载-php-httpd-conf&quot;&gt;&lt;a href=&quot;#配置apache-挂载-php-httpd-conf&quot; class=&quot;headerlink&quot; title=&quot;配置apache 挂载 php (httpd.conf)&quot;&gt;&lt;/a&gt;配置apache 挂载 php (httpd.conf)&lt;/h5&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#挂载PHP&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;PHPIniDir &lt;span class=&quot;string&quot;&gt;&quot;*\php.ini&quot;&lt;/span&gt; &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;LoadModule php*_module &lt;span class=&quot;string&quot;&gt;&quot;*\php*\php*apache2_4.dll&quot;&lt;/span&gt; &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 将下面这行添加到 &amp;lt;IfModule mod_mime.c&amp;gt; 条件块中&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;AddType application/x-httpd-php .php&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 如果要使用语法高亮的 .phps 文件，需要添加&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;AddType application/x-httpd-php-source .phps&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#加载curl 查考地址 [复制文件-&amp;gt;windows/system32 libssh2.dll, php_curl.dll, ssleay32.dll, libeay32.dll 复制文件-&amp;gt;apache/bin libssh2.dll]&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;LoadFile &lt;span class=&quot;string&quot;&gt;&quot;×\php×\libeay32.dll&quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;LoadFile &lt;span class=&quot;string&quot;&gt;&quot;×\php×\ssleay32.dll&quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;</content>
            
              
                <breadCrumb title="Windows" url="http://objectyan.me/categories/Windows/"/>
              
            
        </display>
    </data>
  </url>
  
  <url>
    <loc>http://objectyan.me/2017/09/26/Webpack-Option/</loc>
    
    <lastmod>2020-04-20T01:42:16.589Z</lastmod>
    
    <changefreq>always</changefreq>
    <data>
        <display>
            <title> Webpack 结构与说明</title>
            <pubTime>2017-09-26T02:02:26.000Z</pubTime>
            
              
                <tag>Javascript</tag>
              
                <tag>WebPack</tag>
              
            
            <content>&lt;p&gt;_ webpack 是一个现代 JavaScript 应用程序的模块打包器(module bundler)。当 webpack 处理应用程序时，它会递归地构建一个依赖关系图(dependency graph)，其中包含应用程序需要的每个模块，然后将所有这些模块打包成少量的 bundle - 通常只有一个，由浏览器加载。 _&lt;/p&gt;
&lt;a id=&quot;more&quot;&gt;&lt;/a&gt;

&lt;h4 id=&quot;WebPack-的四个核心要素&quot;&gt;&lt;a href=&quot;#WebPack-的四个核心要素&quot; class=&quot;headerlink&quot; title=&quot;WebPack 的四个核心要素&quot;&gt;&lt;/a&gt;WebPack 的四个核心要素&lt;/h4&gt;&lt;h5 id=&quot;入口-Entry&quot;&gt;&lt;a href=&quot;#入口-Entry&quot; class=&quot;headerlink&quot; title=&quot;入口(Entry)&quot;&gt;&lt;/a&gt;入口(&lt;code&gt;Entry&lt;/code&gt;)&lt;/h5&gt;&lt;p&gt;webpack 创建应用程序所有依赖的关系图(dependency graph)。图的起点被称之为入口起点(entry point)。入口起点告诉 webpack 从哪里开始，并根据依赖关系图确定需要打包的内容。可以将应用程序的入口起点认为是根上下文(contextual root) 或 app 第一个启动文件。&lt;/p&gt;
&lt;hr&gt;
&lt;h5 id=&quot;输出-output&quot;&gt;&lt;a href=&quot;#输出-output&quot; class=&quot;headerlink&quot; title=&quot;输出(output)&quot;&gt;&lt;/a&gt;输出(&lt;code&gt;output&lt;/code&gt;)&lt;/h5&gt;&lt;p&gt;将所有的资源(assets)归拢在一起后，还需要告诉 webpack 在哪里打包应用程序。webpack 的 output 属性描述了如何处理归拢在一起的代码(bundled code)。&lt;/p&gt;
&lt;hr&gt;
&lt;h5 id=&quot;loader&quot;&gt;&lt;a href=&quot;#loader&quot; class=&quot;headerlink&quot; title=&quot;loader&quot;&gt;&lt;/a&gt;&lt;code&gt;loader&lt;/code&gt;&lt;/h5&gt;&lt;p&gt;webpack 的目标是，让 webpack 聚焦于项目中的所有资源(asset)，而浏览器不需要关注考虑这些（明确的说，这并不意味着所有资源(asset)都必须打包在一起）。webpack 把每个文件(.css, .html, .scss, .jpg, etc.) 都作为模块处理。然而 webpack 自身只理解 JavaScript。&lt;br&gt;webpack loader 在文件被添加到依赖图中时，其转换为模块。&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;在更高层面，在 webpack 的配置中 loader 有两个目标。&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;识别出(identify)应该被对应的 loader 进行转换(transform)的那些文件。(test 属性)&lt;br&gt;转换这些文件，从而使其能够被添加到依赖图中（并且最终添加到 bundle 中）(use 属性)&lt;/p&gt;
&lt;hr&gt;
&lt;h5 id=&quot;插件-plugins&quot;&gt;&lt;a href=&quot;#插件-plugins&quot; class=&quot;headerlink&quot; title=&quot;插件(plugins)&quot;&gt;&lt;/a&gt;插件(&lt;code&gt;plugins&lt;/code&gt;)&lt;/h5&gt;&lt;p&gt;然而由于 loader 仅在每个文件的基础上执行转换，而 插件(plugins) 更常用于（但不限于）在打包模块的 “compilation” 和 “chunk” 生命周期执行操作和自定义功能（查看更多）。&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;WebPack-Option&quot;&gt;&lt;a href=&quot;#WebPack-Option&quot; class=&quot;headerlink&quot; title=&quot;WebPack Option&quot;&gt;&lt;/a&gt;WebPack Option&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;29&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;30&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;31&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;32&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;33&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;34&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;35&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;36&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;37&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;38&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;39&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;40&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;41&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;42&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;43&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;44&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;45&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;46&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;47&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;48&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;49&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;50&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;51&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;52&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;53&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;54&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;55&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;56&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;57&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;58&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;59&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;60&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;61&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;62&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;63&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;64&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;65&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;66&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;67&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;68&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;69&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;70&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;71&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;72&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;73&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;74&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;75&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;76&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;77&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;78&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;79&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;80&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;81&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;82&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;83&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;84&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;85&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;86&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;87&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;88&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;89&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;90&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;91&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;92&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;93&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;94&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;95&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;96&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;97&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;98&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;99&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;100&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;101&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;102&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;103&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;104&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;105&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;106&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;107&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;108&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;109&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;110&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;111&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;112&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;113&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;114&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;115&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;116&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;117&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;118&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;119&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;120&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;121&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;122&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;123&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;124&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;125&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;126&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;127&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;128&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;129&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;130&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;131&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;132&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;133&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;134&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;135&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;136&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;137&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;138&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;139&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;140&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;141&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;142&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;143&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;144&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;145&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;146&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;147&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;148&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;149&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;150&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;151&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;152&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;153&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;154&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;155&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;156&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;157&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;158&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;159&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;160&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;161&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;162&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;163&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;164&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;165&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;166&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;167&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;168&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;169&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;170&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;171&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;172&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;173&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;174&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;175&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;176&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;177&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;178&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;179&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;180&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;181&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;182&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;183&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;184&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;185&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;186&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;187&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;188&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;189&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;190&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;191&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;192&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;193&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;194&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;195&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;196&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;197&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;198&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;199&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;200&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;201&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;202&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;203&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;204&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;205&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;206&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;207&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;208&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;209&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;210&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;211&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;212&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;213&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;214&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;215&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;216&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;217&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;218&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;219&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;220&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;221&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;222&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;223&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;224&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;225&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;226&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;227&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;228&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;229&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;230&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;231&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;module.exports = &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  entry: &lt;span class=&quot;comment&quot;&gt;# string | object | array&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  // 这里应用程序开始执行&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  // webpack 开始打包&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  output: &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    // webpack 如何输出结果的相关选项&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    path: &lt;span class=&quot;comment&quot;&gt;# string&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    // 所有输出文件的目标路径&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    // 必须是绝对路径（使用 Node.js 的 path 模块）&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    filename: &lt;span class=&quot;comment&quot;&gt;# string&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    // 「入口分块(entry chunk)」的文件名模板（出口分块？）&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    publicPath: &lt;span class=&quot;comment&quot;&gt;# string&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    // 输出解析文件的目录，url 相对于 HTML 页面&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    library: &lt;span class=&quot;comment&quot;&gt;# string,&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    // 导出库(exported library)的名称&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    libraryTarget: &lt;span class=&quot;comment&quot;&gt;# 通用模块定义  &lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    /* 可选值： &lt;span class=&quot;string&quot;&gt;&quot;umd&quot;&lt;/span&gt;   // 这是一种可以将你的 library 能够在所有的模块定义下都可运行的方式（并且导出的完全不是模块）。&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                        // 它将在 CommonJS, AMD 环境下运行，或将模块导出到 global 下的变量&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                &lt;span class=&quot;string&quot;&gt;&quot;var&quot;&lt;/span&gt;   // （默认值）当 library 加载完成，入口起点的返回值将分配给一个变量&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                &lt;span class=&quot;string&quot;&gt;&quot;window&quot;&lt;/span&gt; // 当 library 加载完成，入口起点的返回值将分配给 window 对象。&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                &lt;span class=&quot;string&quot;&gt;&quot;global&quot;&lt;/span&gt; // 当 library 加载完成，入口起点的返回值将分配给 global 对象。&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                &lt;span class=&quot;string&quot;&gt;&quot;commonjs&quot;&lt;/span&gt; //  当 library 加载完成，入口起点的返回值将分配给 exports 对象。&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                &lt;span class=&quot;string&quot;&gt;&quot;commonjs2&quot;&lt;/span&gt;  // 当 library 加载完成，入口起点的返回值将分配给 exports 对象。&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                &lt;span class=&quot;string&quot;&gt;&quot;this&quot;&lt;/span&gt;    // 当 library 加载完成，入口起点的返回值将分配给 this，this 的含义取决于你&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                &lt;span class=&quot;string&quot;&gt;&quot;amd&quot;&lt;/span&gt;     // webpack 将你的 library 转为 AMD 模块&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                &lt;span class=&quot;string&quot;&gt;&quot;assign&quot;&lt;/span&gt;   // 这里 webpack 会轻率地产生隐含的全局变量。&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                &lt;span class=&quot;string&quot;&gt;&quot;jsonp&quot;&lt;/span&gt;    //  这将把入口起点的返回值，包裹到一个 jsonp 包装容器中&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    // 导出库(exported library)的类型&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &amp;#125;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  module: &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    // 关于模块配置&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    rules: [&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      // 模块规则（配置 loader、解析器等选项）&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;built_in&quot;&gt;test&lt;/span&gt;: /\.jsx?$/,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        include: [&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;          path.resolve(__dirname, &lt;span class=&quot;string&quot;&gt;&quot;app&quot;&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        ],&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        exclude: [&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;          path.resolve(__dirname, &lt;span class=&quot;string&quot;&gt;&quot;app/demo-files&quot;&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        ],&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        // 这里是匹配条件，每个选项都接收一个正则表达式或字符串&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        // &lt;span class=&quot;built_in&quot;&gt;test&lt;/span&gt; 和 include 具有相同的作用，都是必须匹配选项&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        // exclude 是必不匹配选项（优先于 &lt;span class=&quot;built_in&quot;&gt;test&lt;/span&gt; 和 include）&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        // 最佳实践：&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        // - 只在 &lt;span class=&quot;built_in&quot;&gt;test&lt;/span&gt; 和 文件名匹配 中使用正则表达式&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        // - 在 include 和 exclude 中使用绝对路径数组&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        // - 尽量避免 exclude，更倾向于使用 include&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        issuer: &amp;#123; &lt;span class=&quot;built_in&quot;&gt;test&lt;/span&gt;, include, exclude &amp;#125;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        // issuer 条件（导入源）&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        enforce: &lt;span class=&quot;string&quot;&gt;&quot;pre&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        enforce: &lt;span class=&quot;string&quot;&gt;&quot;post&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        // 标识应用这些规则，即使规则覆盖（高级选项）&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        loader: &lt;span class=&quot;string&quot;&gt;&quot;babel-loader&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        // 应该应用的 loader，它相对上下文解析&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        // 为了更清晰，`-loader` 后缀在 webpack 2 中不再是可选的&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        // 查看 webpack 1 升级指南。&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        options: &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;          presets: [&lt;span class=&quot;string&quot;&gt;&quot;es2015&quot;&lt;/span&gt;]&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &amp;#125;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        // loader 的可选项&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      &amp;#125;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;built_in&quot;&gt;test&lt;/span&gt;: /\.html$/,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;built_in&quot;&gt;test&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;\.html$&quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        use: [&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;          // 应用多个 loader 和选项&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;          &lt;span class=&quot;string&quot;&gt;&quot;htmllint-loader&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;          &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            loader: &lt;span class=&quot;string&quot;&gt;&quot;html-loader&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            options: &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;              /* ... */&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;          &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        ]&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      &amp;#125;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      &amp;#123; oneOf: [ /* rules */ ] &amp;#125;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      // 只使用这些嵌套规则之一&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      &amp;#123; rules: [ /* rules */ ] &amp;#125;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      // 使用所有这些嵌套规则（合并可用条件）&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      &amp;#123; resource: &amp;#123; and: [ /* 条件 */ ] &amp;#125; &amp;#125;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      // 仅当所有条件都匹配时才匹配&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      &amp;#123; resource: &amp;#123; or: [ /* 条件 */ ] &amp;#125; &amp;#125;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      &amp;#123; resource: [ /* 条件 */ ] &amp;#125;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      // 任意条件匹配时匹配（默认为数组）&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      &amp;#123; resource: &amp;#123; not: /* 条件 */ &amp;#125; &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      // 条件不匹配时匹配&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    ],&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &amp;#125;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  resolve: &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    // 解析模块请求的选项&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    // （不适用于对 loader 解析）&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    modules: [&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      &lt;span class=&quot;string&quot;&gt;&quot;node_modules&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      path.resolve(__dirname, &lt;span class=&quot;string&quot;&gt;&quot;app&quot;&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    ],&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    // 用于查找模块的目录&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    extensions: [&lt;span class=&quot;string&quot;&gt;&quot;.js&quot;&lt;/span&gt;, &lt;span class=&quot;string&quot;&gt;&quot;.json&quot;&lt;/span&gt;, &lt;span class=&quot;string&quot;&gt;&quot;.jsx&quot;&lt;/span&gt;, &lt;span class=&quot;string&quot;&gt;&quot;.css&quot;&lt;/span&gt;],&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    // 使用的扩展名&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;built_in&quot;&gt;alias&lt;/span&gt;: &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      // 模块别名列表&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      &lt;span class=&quot;string&quot;&gt;&quot;module&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;new-module&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      // 起别名：&lt;span class=&quot;string&quot;&gt;&quot;module&quot;&lt;/span&gt; -&amp;gt; &lt;span class=&quot;string&quot;&gt;&quot;new-module&quot;&lt;/span&gt; 和 &lt;span class=&quot;string&quot;&gt;&quot;module/path/file&quot;&lt;/span&gt; -&amp;gt; &lt;span class=&quot;string&quot;&gt;&quot;new-module/path/file&quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      &lt;span class=&quot;string&quot;&gt;&quot;only-module$&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;new-module&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      // 起别名 &lt;span class=&quot;string&quot;&gt;&quot;only-module&quot;&lt;/span&gt; -&amp;gt; &lt;span class=&quot;string&quot;&gt;&quot;new-module&quot;&lt;/span&gt;，但不匹配 &lt;span class=&quot;string&quot;&gt;&quot;only-module/path/file&quot;&lt;/span&gt; -&amp;gt; &lt;span class=&quot;string&quot;&gt;&quot;new-module/path/file&quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      &lt;span class=&quot;string&quot;&gt;&quot;module&quot;&lt;/span&gt;: path.resolve(__dirname, &lt;span class=&quot;string&quot;&gt;&quot;app/third/module.js&quot;&lt;/span&gt;),&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      // 起别名 &lt;span class=&quot;string&quot;&gt;&quot;module&quot;&lt;/span&gt; -&amp;gt; &lt;span class=&quot;string&quot;&gt;&quot;./app/third/module.js&quot;&lt;/span&gt; 和 &lt;span class=&quot;string&quot;&gt;&quot;module/file&quot;&lt;/span&gt; 会导致错误&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      // 模块别名相对于当前上下文导入&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &amp;#125;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  performance: &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    hints: &lt;span class=&quot;string&quot;&gt;&quot;warning&quot;&lt;/span&gt;, // 枚举&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    maxAssetSize: 200000, // 整数类型（以字节为单位）&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    maxEntrypointSize: 400000, // 整数类型（以字节为单位）&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    assetFilter: &lt;span class=&quot;keyword&quot;&gt;function&lt;/span&gt;(assetFilename) &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      // 提供资源文件名的断言函数&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      &lt;span class=&quot;built_in&quot;&gt;return&lt;/span&gt; assetFilename.endsWith(&lt;span class=&quot;string&quot;&gt;&#39;.css&#39;&lt;/span&gt;) || assetFilename.endsWith(&lt;span class=&quot;string&quot;&gt;&#39;.js&#39;&lt;/span&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &amp;#125;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  devtool: &lt;span class=&quot;string&quot;&gt;&quot;source-map&quot;&lt;/span&gt;, // enum&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  // 通过在浏览器调试工具(browser devtools)中添加元信息(meta info)增强调试&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  // 牺牲了构建速度的 `&lt;span class=&quot;built_in&quot;&gt;source&lt;/span&gt;-map&lt;span class=&quot;string&quot;&gt;&#39; 是最详细的。&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;  context: __dirname, // string（绝对路径！）&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;  // webpack 的主目录&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;  // entry 和 module.rules.loader 选项&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;  // 相对于此目录解析&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;  target: &quot;web&quot;, // 枚举&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;  // 包(bundle)应该运行的环境&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;  // 更改 块加载行为(chunk loading behavior) 和 可用模块(available module)&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;  externals: [&quot;react&quot;, /^@angular\//],&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;  // 不要遵循/打包这些模块，而是在运行时从环境中请求他们&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;  stats: &quot;errors-only&quot;,&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;  // 精确控制要显示的 bundle 信息&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;  devServer: &amp;#123;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;    proxy: &amp;#123; // proxy URLs to backend development server&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;      &#39;&lt;/span&gt;/api&lt;span class=&quot;string&quot;&gt;&#39;: &#39;&lt;/span&gt;http://localhost:3000&lt;span class=&quot;string&quot;&gt;&#39;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;    &amp;#125;,&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;    contentBase: path.join(__dirname, &#39;&lt;/span&gt;public&lt;span class=&quot;string&quot;&gt;&#39;), // boolean | string | array, static file location&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;    compress: true, // enable gzip compression&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;    historyApiFallback: true, // true for index.html upon 404, object for multiple paths&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;    hot: true, // hot module replacement. Depends on HotModuleReplacementPlugin&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;    https: false, // true for self-signed, object for cert authority&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;    noInfo: true, // only errors &amp;amp; warns on hot reload&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;    // ...&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;  &amp;#125;,&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;  plugins: [&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;    // ...&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;  ],&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;  // 附加插件列表&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;  resolveLoader: &amp;#123; /* 等同于 resolve */ &amp;#125;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;  // 独立解析选项的 loader&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;  parallelism: 1, // number&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;  // 限制并行处理模块的数量&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;  profile: true, // boolean&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;  // 捕获时机信息&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;  bail: true, //boolean&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;  // 在第一个错误出错时抛出，而不是无视错误。&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;  cache: false, // boolean&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;  // 禁用/启用缓存&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;  watch: true, // boolean&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;  // 启用观察&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;  watchOptions: &amp;#123;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;    aggregateTimeout: 1000, // in ms&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;    // 将多个更改聚合到单个重构建(rebuild)&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;    poll: true,&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;    poll: 500, // 间隔单位 ms&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;    // 启用轮询观察模式&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;    // 必须用在不通知更改的文件系统中&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;    // 即 nfs shares（译者注：Network FileSystem，最大的功能就是可以透過網路，讓不同的機器、不同的作業系統、可以彼此分享個別的檔案 ( share file )）&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;  &amp;#125;,&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;  node: &amp;#123;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;    // Polyfills and mocks to run Node.js-&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;    // environment code in non-Node environments.&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;    console: false, // boolean | &quot;mock&quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;    global: true, // boolean | &quot;mock&quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;    process: true, // boolean&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;    __filename: &quot;mock&quot;, // boolean | &quot;mock&quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;    __dirname: &quot;mock&quot;, // boolean | &quot;mock&quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;    Buffer: true, // boolean | &quot;mock&quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;    setImmediate: true // boolean | &quot;mock&quot; | &quot;empty&quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;  &amp;#125;,&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;  recordsPath: path.resolve(__dirname, &quot;build/records.json&quot;),&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;  recordsInputPath: path.resolve(__dirname, &quot;build/records.json&quot;),&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;  recordsOutputPath: path.resolve(__dirname, &quot;build/records.json&quot;),&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;  // TODO&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;string&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;</content>
            
              
                <breadCrumb title="Develop" url="http://objectyan.me/categories/Develop/"/>
              
                <breadCrumb title="Javascript" url="http://objectyan.me/categories/Develop/Javascript/"/>
              
                <breadCrumb title="WebPack" url="http://objectyan.me/categories/Develop/Javascript/WebPack/"/>
              
            
        </display>
    </data>
  </url>
  
  <url>
    <loc>http://objectyan.me/2017/09/30/WebPack-Use-FontAwesome/</loc>
    
    <lastmod>2020-04-20T01:42:16.589Z</lastmod>
    
    <changefreq>always</changefreq>
    <data>
        <display>
            <title> WebPack 使用 FontAwesome 字体</title>
            <pubTime>2017-09-30T01:57:34.000Z</pubTime>
            
              
                <tag>Javascript</tag>
              
                <tag>WebPck</tag>
              
                <tag>FontAwesome</tag>
              
            
            <content>&lt;p&gt;由于现代浏览器的趋势，以及HTML5、CSS3的普及,现在多数图标从当初的Image(PNG、GIF、JPEG)图片从而转变为Font Icon字体&lt;/p&gt;
&lt;a id=&quot;more&quot;&gt;&lt;/a&gt;

&lt;h4 id=&quot;环境要求&quot;&gt;&lt;a href=&quot;#环境要求&quot; class=&quot;headerlink&quot; title=&quot;环境要求&quot;&gt;&lt;/a&gt;环境要求&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;NodeJS&lt;/li&gt;
&lt;li&gt;NPM&lt;/li&gt;
&lt;li&gt;WebPack&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&quot;安装FontAwesome及相关插件&quot;&gt;&lt;a href=&quot;#安装FontAwesome及相关插件&quot; class=&quot;headerlink&quot; title=&quot;安装FontAwesome及相关插件&quot;&gt;&lt;/a&gt;安装FontAwesome及相关插件&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;npm install font-awesome-webpack less less-loader css-loader style-loader file-loader font-awesome --save-dev&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;在webpack-conf-js-中的module-rules-添加规则&quot;&gt;&lt;a href=&quot;#在webpack-conf-js-中的module-rules-添加规则&quot; class=&quot;headerlink&quot; title=&quot;在webpack.conf.js 中的module.rules 添加规则&quot;&gt;&lt;/a&gt;在webpack.conf.js 中的&lt;code&gt;module.rules&lt;/code&gt; 添加规则&lt;/h4&gt;&lt;figure class=&quot;highlight javascript&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&amp;#123; &lt;span class=&quot;attr&quot;&gt;test&lt;/span&gt;: &lt;span class=&quot;regexp&quot;&gt;/\.(eot|svg|ttf|woff|woff2|png)\w*/&lt;/span&gt;, &lt;span class=&quot;attr&quot;&gt;loader&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&#39;file-loader&#39;&lt;/span&gt; &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;在项目开始JS文件中导入-font-awesome-webpack&quot;&gt;&lt;a href=&quot;#在项目开始JS文件中导入-font-awesome-webpack&quot; class=&quot;headerlink&quot; title=&quot;在项目开始JS文件中导入 font-awesome-webpack&quot;&gt;&lt;/a&gt;在项目开始JS文件中导入 font-awesome-webpack&lt;/h4&gt;&lt;figure class=&quot;highlight javascript&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&#39;font-awesome-webpack&#39;&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
</content>
            
              
                <breadCrumb title="Develop" url="http://objectyan.me/categories/Develop/"/>
              
                <breadCrumb title="Javascript" url="http://objectyan.me/categories/Develop/Javascript/"/>
              
                <breadCrumb title="WebPack" url="http://objectyan.me/categories/Develop/Javascript/WebPack/"/>
              
            
        </display>
    </data>
  </url>
  
  <url>
    <loc>http://objectyan.me/2017/10/25/Tool-VisualSVN-Crack/</loc>
    
    <lastmod>2020-04-20T01:42:16.588Z</lastmod>
    
    <changefreq>always</changefreq>
    <data>
        <display>
            <title> VisualSVN 破解</title>
            <pubTime>2017-10-25T06:45:24.000Z</pubTime>
            
              
                <tag>Tool</tag>
              
                <tag>SVN</tag>
              
            
            <content>&lt;h4 id=&quot;备份VisualSVN-Core-L-dll包&quot;&gt;&lt;a href=&quot;#备份VisualSVN-Core-L-dll包&quot; class=&quot;headerlink&quot; title=&quot;备份VisualSVN.Core.L.dll包&quot;&gt;&lt;/a&gt;备份&lt;code&gt;VisualSVN.Core.L.dll&lt;/code&gt;包&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;地址：【C:\Users\obejct.yan\AppData\Local\Microsoft\VisualStudio\15.0_3acf4f69\Extensions\hgbjz5if.jep\VisualSVN.Core.L.dll】&lt;br&gt;  此为VS2017安装插件地址&lt;/li&gt;
&lt;li&gt;备份至新地址：【备份地址\VisualSVN.Core.L.dll】&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;反编译工具&quot;&gt;&lt;a href=&quot;#反编译工具&quot; class=&quot;headerlink&quot; title=&quot;反编译工具&quot;&gt;&lt;/a&gt;反编译工具&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;使用Windows自带反编译工具 &lt;code&gt;ildasm.exe&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;地址：【C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\ildasm.exe】&lt;br&gt;&lt;code&gt;*注：此为 Window 10 64 bit 地址&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;运行 &lt;code&gt;ildasm.exe&lt;/code&gt; 并导入备份的DLL文件&lt;br&gt;  &lt;code&gt;File &amp;gt; Open&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;导出反编译文件&lt;br&gt;  &lt;code&gt;File &amp;gt; Dump&lt;/code&gt;&lt;br&gt;  此处直接点击&lt;code&gt;确定&lt;/code&gt;即可保存导出文件 &lt;code&gt;VisualSVN.Core.L.il&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;修改-VisualSVN-Core-L-il-文件&quot;&gt;&lt;a href=&quot;#修改-VisualSVN-Core-L-il-文件&quot; class=&quot;headerlink&quot; title=&quot;修改 VisualSVN.Core.L.il 文件&quot;&gt;&lt;/a&gt;修改 &lt;code&gt;VisualSVN.Core.L.il&lt;/code&gt; 文件&lt;/h4&gt;&lt;p&gt;找到 &lt;code&gt;KeyToLicenseUnsafe&lt;/code&gt; 函数并替换如下&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;29&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;30&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;31&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;32&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;33&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;34&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;35&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;36&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;37&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;38&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;39&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;40&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;41&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;42&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;43&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;.method public hidebysig static class VisualSVN.Core.Licensing.License&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;          KeyToLicenseUnsafe(class VisualSVN.Core.IDecoder decoder,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                             string key) cil managed&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    // 代码大小       69 (0x45)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    .locals init (class VisualSVN.Core.Licensing.License V_0, class VisualSVN.Core.Licensing.License V_1, class VisualSVN.Core.Licensing.License V_2)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    IL_0000: nop&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    IL_0001: newobj instance void VisualSVN.Core.Licensing.License::.ctor()&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    IL_0006: stloc.1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    IL_0007: ldloc.1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    IL_0008: ldsfld valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::MinValue&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    IL_000d: stfld valuetype [mscorlib]System.DateTime VisualSVN.Core.Licensing.License::StartTime&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    IL_0012: ldloc.1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    IL_0013: ldc.i4.1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    IL_0014: stfld valuetype VisualSVN.Core.Licensing.LicenseBinding VisualSVN.Core.Licensing.License::Binding&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    IL_0019: ldloc.1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    IL_001a: ldc.i4 0x7ffffffe&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    IL_001f: stfld int32 VisualSVN.Core.Licensing.License::Capacity&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    IL_0024: ldloc.1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    IL_0025: ldsfld valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::MaxValue&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    IL_002a: stfld valuetype [mscorlib]System.DateTime VisualSVN.Core.Licensing.License::EndTime&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    IL_002f: ldloc.1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    IL_0030: ldc.i4.2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    IL_0031: stfld valuetype VisualSVN.Core.Licensing.LicenseType VisualSVN.Core.Licensing.License::Type&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    IL_0036: ldloc.1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    IL_0037: ldstr &lt;span class=&quot;string&quot;&gt;&quot;100&quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    IL_003c: stfld string VisualSVN.Core.Licensing.License::PurchaseId&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    IL_0041: ldloc.1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    IL_0042: call string [mscorlib]System.Environment::get_UserName()&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    IL_0047: stfld string VisualSVN.Core.Licensing.License::LicensedTo&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    IL_004c: ldloc.1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    IL_004d: stloc.0&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    IL_004e: ldloc.0&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    IL_004f: ldloc.0&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    IL_0050: ldfld valuetype [mscorlib]System.DateTime VisualSVN.Core.Licensing.License::StartTime&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    IL_0055: stfld valuetype [mscorlib]System.DateTime VisualSVN.Core.Licensing.License::PurchaseDate&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    IL_005a: ldloc.0&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    IL_005b: stloc.2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    IL_005c: br.s&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    IL_005e&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    IL_005e:ldloc.2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    IL_005f: ret&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &amp;#125; // end of method LicenseConverter::KeyToLicenseUnsafe&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;生产新的-VisualSVN-Core-L-dll&quot;&gt;&lt;a href=&quot;#生产新的-VisualSVN-Core-L-dll&quot; class=&quot;headerlink&quot; title=&quot;生产新的 VisualSVN.Core.L.dll&quot;&gt;&lt;/a&gt;生产新的 &lt;code&gt;VisualSVN.Core.L.dll&lt;/code&gt;&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;ilasm &lt;span class=&quot;string&quot;&gt;&quot;备份目录\VisualSVN.Core.L.il&quot;&lt;/span&gt; /output=&lt;span class=&quot;string&quot;&gt;&quot;备份目录\VisualSVN.Core.L.dll&quot;&lt;/span&gt; /dll&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;p&gt;最后将新文件替换即可咯~&lt;br&gt;&lt;a href=&quot;./VisualSVN.Core.L.rar&quot;&gt;附上DLL文件&lt;/a&gt;&lt;/p&gt;
</content>
            
              
                <breadCrumb title="Tool" url="http://objectyan.me/categories/Tool/"/>
              
                <breadCrumb title="SVN" url="http://objectyan.me/categories/Tool/SVN/"/>
              
            
        </display>
    </data>
  </url>
  
  <url>
    <loc>http://objectyan.me/2017/10/26/React-Native-Config/</loc>
    
    <lastmod>2020-04-20T01:42:16.587Z</lastmod>
    
    <changefreq>always</changefreq>
    <data>
        <display>
            <title> React Native 开发环境配置</title>
            <pubTime>2017-10-26T06:26:31.000Z</pubTime>
            
              
                <tag>Develop</tag>
              
                <tag>React Native</tag>
              
            
            <content>&lt;h4 id=&quot;准备工作&quot;&gt;&lt;a href=&quot;#准备工作&quot; class=&quot;headerlink&quot; title=&quot;准备工作&quot;&gt;&lt;/a&gt;准备工作&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;安装 Nodejs (&lt;a href=&quot;https://nodejs.org/en/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://nodejs.org/en/&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;NPM&lt;/li&gt;
&lt;li&gt;JAVA (&lt;a href=&quot;http://www.oracle.com/technetwork/java/javase/downloads/index.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://www.oracle.com/technetwork/java/javase/downloads/index.html&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Android Studio (&lt;a href=&quot;https://developer.android.google.cn/studio/index.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developer.android.google.cn/studio/index.html&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Git&lt;/li&gt;
&lt;li&gt;Visual Studio Emulator for Android (&lt;a href=&quot;https://www.visualstudio.com/vs/msft-android-emulator/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.visualstudio.com/vs/msft-android-emulator/&lt;/a&gt;)&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&quot;安装React-Native&quot;&gt;&lt;a href=&quot;#安装React-Native&quot; class=&quot;headerlink&quot; title=&quot;安装React Native&quot;&gt;&lt;/a&gt;安装React Native&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;npm install -g yarn react-native-cli&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;配置ANDROID-HOME&quot;&gt;&lt;a href=&quot;#配置ANDROID-HOME&quot; class=&quot;headerlink&quot; title=&quot;配置ANDROID_HOME&quot;&gt;&lt;/a&gt;配置&lt;code&gt;ANDROID_HOME&lt;/code&gt;&lt;/h4&gt;&lt;p&gt;打开&lt;code&gt;控制面板&lt;/code&gt; -&amp;gt; &lt;code&gt;系统和安全&lt;/code&gt; -&amp;gt; &lt;code&gt;系统&lt;/code&gt; -&amp;gt; &lt;code&gt;高级系统设置&lt;/code&gt; -&amp;gt; &lt;code&gt;高级&lt;/code&gt; -&amp;gt; &lt;code&gt;环境变量&lt;/code&gt; -&amp;gt; &lt;code&gt;新建&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ANDROID_HOME&lt;/code&gt; 值为Android SDK路径&lt;/p&gt;
&lt;h4 id=&quot;配置ANDROID-SDK-HOME&quot;&gt;&lt;a href=&quot;#配置ANDROID-SDK-HOME&quot; class=&quot;headerlink&quot; title=&quot;配置ANDROID_SDK_HOME&quot;&gt;&lt;/a&gt;配置&lt;code&gt;ANDROID_SDK_HOME&lt;/code&gt;&lt;/h4&gt;&lt;p&gt;打开&lt;code&gt;控制面板&lt;/code&gt; -&amp;gt; &lt;code&gt;系统和安全&lt;/code&gt; -&amp;gt; &lt;code&gt;系统&lt;/code&gt; -&amp;gt; &lt;code&gt;高级系统设置&lt;/code&gt; -&amp;gt; &lt;code&gt;高级&lt;/code&gt; -&amp;gt; &lt;code&gt;环境变量&lt;/code&gt; -&amp;gt; &lt;code&gt;新建&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ANDROID_SDK_HOME&lt;/code&gt; 值为Android 根目录路径&lt;/p&gt;
&lt;h4 id=&quot;配置-platform-tools&quot;&gt;&lt;a href=&quot;#配置-platform-tools&quot; class=&quot;headerlink&quot; title=&quot;配置 platform-tools&quot;&gt;&lt;/a&gt;配置 &lt;code&gt;platform-tools&lt;/code&gt;&lt;/h4&gt;&lt;p&gt;打开&lt;code&gt;控制面板&lt;/code&gt; -&amp;gt; &lt;code&gt;系统和安全&lt;/code&gt; -&amp;gt; &lt;code&gt;系统&lt;/code&gt; -&amp;gt; &lt;code&gt;高级系统设置&lt;/code&gt; -&amp;gt; &lt;code&gt;高级&lt;/code&gt; -&amp;gt; &lt;code&gt;环境变量&lt;/code&gt; -&amp;gt; 选中&lt;code&gt;PATH&lt;/code&gt; -&amp;gt; 双击进行编辑&lt;br&gt;将 &lt;code&gt;%ANDROID_HOME%\platform-tools&lt;/code&gt; 添加进去即可&lt;/p&gt;
&lt;h4 id=&quot;安装Visual-Studio-Emulator-for-Android-模拟器&quot;&gt;&lt;a href=&quot;#安装Visual-Studio-Emulator-for-Android-模拟器&quot; class=&quot;headerlink&quot; title=&quot;安装Visual Studio Emulator for Android 模拟器&quot;&gt;&lt;/a&gt;安装&lt;code&gt;Visual Studio Emulator for Android&lt;/code&gt; 模拟器&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://www.visualstudio.com/vs/msft-android-emulator/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;下载&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Windows + R 键入 &lt;code&gt;regedit&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;在注册表编辑器中找到 &lt;code&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Android SDK Tools&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;右键点击&lt;code&gt;Android SDK Tools&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;修改 &lt;code&gt;Path&lt;/code&gt; 的值为你的 &lt;code&gt;Android SDK&lt;/code&gt; 的路径&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&quot;创建项目&quot;&gt;&lt;a href=&quot;#创建项目&quot; class=&quot;headerlink&quot; title=&quot;创建项目&quot;&gt;&lt;/a&gt;创建项目&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;react-native init AwesomeProject&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;built_in&quot;&gt;cd&lt;/span&gt; AwesomeProject&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;react-native run-android&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;p&gt;第一次运行 &lt;code&gt;react-native run-android&lt;/code&gt; 时间会很长，主要是安装相关组件&lt;/p&gt;
&lt;h4 id=&quot;相关组件&quot;&gt;&lt;a href=&quot;#相关组件&quot; class=&quot;headerlink&quot; title=&quot;相关组件&quot;&gt;&lt;/a&gt;相关组件&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Android Emulator&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Android SDK Platform-Tools&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Android SDK Build-Tools&lt;/p&gt;
&lt;p&gt;安装对应版本的组件即可&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h4 id=&quot;编译常见错误&quot;&gt;&lt;a href=&quot;#编译常见错误&quot; class=&quot;headerlink&quot; title=&quot;编译常见错误&quot;&gt;&lt;/a&gt;编译常见错误&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Execution failed for task ‘:app:installDebug’. com.android.builder.testing.api.DeviceException: No connected devices!&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;FAILURE: Build failed with an exception.&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;* What went wrong:&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;Execution failed &lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; task &lt;span class=&quot;string&quot;&gt;&#39;:app:installDebug&#39;&lt;/span&gt;.&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;gt; com.android.builder.testing.api.DeviceException: No connected devices!&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;* Try:&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more &lt;span class=&quot;built_in&quot;&gt;log&lt;/span&gt; output.&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;BUILD FAILED&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;解决方法：&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;先修改 &lt;code&gt;android&lt;/code&gt; 下 &lt;code&gt;wrapper&lt;/code&gt; 的 &lt;code&gt;gradle-wrapper.properties&lt;/code&gt; 配置文件,&lt;br&gt;&lt;code&gt;distributionUrl=https\://services.gradle.org/distributions/gradle-3.4.1-all.zip&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;app&lt;/code&gt; 下面的 &lt;code&gt;build.gradle&lt;/code&gt; 文件&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;    compileSdkVersion 25&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    buildToolsVersion &lt;span class=&quot;string&quot;&gt;&quot;25.0.2&quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;`&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;android&lt;/code&gt; 工程下的 &lt;code&gt;build.gradle&lt;/code&gt; 文件： &lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;dependencies &amp;#123; &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   classpath &lt;span class=&quot;string&quot;&gt;&#39;com.android.tools.build:gradle:2.5.0-alpha-preview-02&#39;&lt;/span&gt; &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&quot;参考&quot;&gt;&lt;a href=&quot;#参考&quot; class=&quot;headerlink&quot; title=&quot;参考&quot;&gt;&lt;/a&gt;参考&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://facebook.github.io/react-native/docs/getting-started.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://facebook.github.io/react-native/docs/getting-started.html&lt;/a&gt; &amp;gt; &lt;code&gt;Building Projects with Native Code&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
            
              
                <breadCrumb title="Develop" url="http://objectyan.me/categories/Develop/"/>
              
                <breadCrumb title="React Native" url="http://objectyan.me/categories/Develop/React-Native/"/>
              
            
        </display>
    </data>
  </url>
  
  <url>
    <loc>http://objectyan.me/2017/11/01/React-Natice-Generating-APK/</loc>
    
    <lastmod>2020-04-20T01:42:16.587Z</lastmod>
    
    <changefreq>always</changefreq>
    <data>
        <display>
            <title> React Natice Android 版 打包APK</title>
            <pubTime>2017-11-01T09:22:29.000Z</pubTime>
            
              
                <tag>Develop</tag>
              
                <tag>React Native</tag>
              
            
            <content>&lt;h4 id=&quot;步骤&quot;&gt;&lt;a href=&quot;#步骤&quot; class=&quot;headerlink&quot; title=&quot;步骤&quot;&gt;&lt;/a&gt;步骤&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;生产密钥证书&lt;/li&gt;
&lt;li&gt;设置&lt;code&gt;gradle&lt;/code&gt;变量&lt;/li&gt;
&lt;li&gt;将证书添加至&lt;code&gt;app\build.gradle&lt;/code&gt;配置文件&lt;/li&gt;
&lt;li&gt;生产APK&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&quot;生产密钥证书&quot;&gt;&lt;a href=&quot;#生产密钥证书&quot; class=&quot;headerlink&quot; title=&quot;生产密钥证书&quot;&gt;&lt;/a&gt;生产密钥证书&lt;/h4&gt;&lt;p&gt;生产方式有两种方式&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;使用JDK中自带的keytool&lt;/li&gt;
&lt;li&gt;Android Studio 生产 keys&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这里只介绍第一种 第二种请看&lt;a href=&quot;https://developer.android.com/studio/publish/app-signing.html#generate-key&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;官网&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;keytool&lt;/code&gt; 地址 : &lt;code&gt;$JAVA_HOME/jdk/bin&lt;/code&gt;&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;keytool -genkey -v -keystore my-release-key.keystore -&lt;span class=&quot;built_in&quot;&gt;alias&lt;/span&gt; my-key-alias -keyalg RSA -keysize 2048 -validity 10000&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;设置gradle变量&quot;&gt;&lt;a href=&quot;#设置gradle变量&quot; class=&quot;headerlink&quot; title=&quot;设置gradle变量&quot;&gt;&lt;/a&gt;设置&lt;code&gt;gradle&lt;/code&gt;变量&lt;/h4&gt;&lt;p&gt;将生产的 &lt;code&gt;my-release-key.keystore&lt;/code&gt; 防止在 &lt;code&gt;Android/keystores&lt;/code&gt; 目录下&lt;br&gt;修改 &lt;code&gt;Android/gradle.properties&lt;/code&gt; &lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;MYAPP_RELEASE_STORE_FILE=../keystores/my-release-key.keystore&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;MYAPP_RELEASE_KEY_ALIAS=my-key-alias&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;MYAPP_RELEASE_STORE_PASSWORD=*****&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;MYAPP_RELEASE_KEY_PASSWORD=*****&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;将证书添加至app-build-gradle配置文件&quot;&gt;&lt;a href=&quot;#将证书添加至app-build-gradle配置文件&quot; class=&quot;headerlink&quot; title=&quot;将证书添加至app\build.gradle配置文件&quot;&gt;&lt;/a&gt;将证书添加至&lt;code&gt;app\build.gradle&lt;/code&gt;配置文件&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;22&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;...&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;android &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    ...&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    defaultConfig &amp;#123; ... &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    signingConfigs &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        release &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (project.hasProperty(&lt;span class=&quot;string&quot;&gt;&#39;MYAPP_RELEASE_STORE_FILE&#39;&lt;/span&gt;)) &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                storeFile file(MYAPP_RELEASE_STORE_FILE)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                storePassword MYAPP_RELEASE_STORE_PASSWORD&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                keyAlias MYAPP_RELEASE_KEY_ALIAS&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                keyPassword MYAPP_RELEASE_KEY_PASSWORD&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    buildTypes &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        release &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            ...&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            signingConfig signingConfigs.release&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;...&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;生产APK-生成地址-android-app-build-outputs-apk-app-release-apk&quot;&gt;&lt;a href=&quot;#生产APK-生成地址-android-app-build-outputs-apk-app-release-apk&quot; class=&quot;headerlink&quot; title=&quot;生产APK (生成地址:android/app/build/outputs/apk/app-release.apk)&quot;&gt;&lt;/a&gt;生产APK (生成地址:&lt;code&gt;android/app/build/outputs/apk/app-release.apk&lt;/code&gt;)&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 非Windows&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;built_in&quot;&gt;cd&lt;/span&gt; android &amp;amp;&amp;amp; ./gradlew assembleRelease&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# Windows&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;built_in&quot;&gt;cd&lt;/span&gt; android &amp;amp;&amp;amp; gradlew assembleRelease&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;测试APK&quot;&gt;&lt;a href=&quot;#测试APK&quot; class=&quot;headerlink&quot; title=&quot;测试APK&quot;&gt;&lt;/a&gt;测试APK&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;react-native run-android --variant=release&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;启用-Proguard-压缩&quot;&gt;&lt;a href=&quot;#启用-Proguard-压缩&quot; class=&quot;headerlink&quot; title=&quot;启用 Proguard 压缩&quot;&gt;&lt;/a&gt;启用 &lt;code&gt;Proguard&lt;/code&gt; 压缩&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;&lt;p&gt;启用 &lt;code&gt;Proguard&lt;/code&gt; 压缩 (修改地址 : &lt;code&gt;android/app/build.gradle&lt;/code&gt;)&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;def enableProguardInReleaseBuilds = &lt;span class=&quot;literal&quot;&gt;true&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;启用 &lt;code&gt;minifyEnabled&lt;/code&gt; (修改地址 : &lt;code&gt;android/app/build.gradle&lt;/code&gt;)&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;...&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;android &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    ...&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    buildTypes &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        release &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            ...&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            minifyEnabled &lt;span class=&quot;literal&quot;&gt;true&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            ...&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;...&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;/li&gt;
&lt;/ol&gt;
</content>
            
              
                <breadCrumb title="Develop" url="http://objectyan.me/categories/Develop/"/>
              
                <breadCrumb title="React Native" url="http://objectyan.me/categories/Develop/React-Native/"/>
              
            
        </display>
    </data>
  </url>
  
  <url>
    <loc>http://objectyan.me/2018/05/15/React-Native-Error/</loc>
    
    <lastmod>2020-04-20T01:42:16.587Z</lastmod>
    
    <changefreq>always</changefreq>
    <data>
        <display>
            <title> React Native Error</title>
            <pubTime>2018-05-15T03:24:22.000Z</pubTime>
            
              
                <tag>Develop</tag>
              
                <tag>React Native</tag>
              
            
            <content>&lt;p&gt;&lt;code&gt;glog/log.config&lt;/code&gt; and &lt;code&gt;config.h&lt;/code&gt; not find&lt;/p&gt;
&lt;figure class=&quot;highlight plain&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;cd node_modules&amp;#x2F;react-native&amp;#x2F;third-party&amp;#x2F;glog-0.3.4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;..&amp;#x2F;..&amp;#x2F;scripts&amp;#x2F;ios-configure-glog.sh&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;</content>
            
              
                <breadCrumb title="Develop" url="http://objectyan.me/categories/Develop/"/>
              
                <breadCrumb title="React Native" url="http://objectyan.me/categories/Develop/React-Native/"/>
              
            
        </display>
    </data>
  </url>
  
  <url>
    <loc>http://objectyan.me/2014/04/10/Oracle-PL-SQL/</loc>
    
    <lastmod>2020-04-20T01:42:16.586Z</lastmod>
    
    <changefreq>always</changefreq>
    <data>
        <display>
            <title> Oracle PL/SQL 块</title>
            <pubTime>2014-04-10T06:58:14.000Z</pubTime>
            
              
                <tag>Oracle</tag>
              
                <tag>PL/SQL</tag>
              
            
            <content>&lt;h3 id=&quot;PL-SQL块-简介&quot;&gt;&lt;a href=&quot;#PL-SQL块-简介&quot; class=&quot;headerlink&quot; title=&quot;PL/SQL块 简介&quot;&gt;&lt;/a&gt;PL/SQL块 简介&lt;/h3&gt;&lt;blockquote&gt;
&lt;p&gt;PL/SQL是 Procedure Language &amp;amp; Structured Query Language 的缩写，是ORACLE公司对标准数据库语言的扩展&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;PL-SQL块-语法&quot;&gt;&lt;a href=&quot;#PL-SQL块-语法&quot; class=&quot;headerlink&quot; title=&quot;PL/SQL块 语法&quot;&gt;&lt;/a&gt;PL/SQL块 语法&lt;/h3&gt;&lt;figure class=&quot;highlight pgsql&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;declare&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;lt;&amp;lt;声明部分&amp;gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;begin&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;lt;&amp;lt;逻辑部分&amp;gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;keyword&quot;&gt;exception&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;       &lt;span class=&quot;keyword&quot;&gt;when&lt;/span&gt; other &lt;span class=&quot;keyword&quot;&gt;then&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;           &amp;lt;&amp;lt;异常处理部分&amp;gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;end&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;PL/&lt;span class=&quot;keyword&quot;&gt;SQL&lt;/span&gt;块语法&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;*注意：异常处理与其他语言中的异常处理类似  顺序是从低到高&lt;/em&gt;&lt;/strong&gt; &lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;Oracle常用异常处理&quot;&gt;&lt;a href=&quot;#Oracle常用异常处理&quot; class=&quot;headerlink&quot; title=&quot;Oracle常用异常处理&quot;&gt;&lt;/a&gt;Oracle常用异常处理&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;名称&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;other&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;包括所有异常（最高级别异常）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;value_error&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;值异常&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;no_data_found&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;没有找到数据&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;too_many_rows&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;数据太多&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;声明PL-SQL-包&quot;&gt;&lt;a href=&quot;#声明PL-SQL-包&quot; class=&quot;headerlink&quot; title=&quot;声明PL/SQL 包&quot;&gt;&lt;/a&gt;声明PL/SQL 包&lt;/h3&gt;&lt;figure class=&quot;highlight n1ql&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;create&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;or&lt;/span&gt; &lt;span class=&quot;built_in&quot;&gt;replace&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;function&lt;/span&gt; 方法名 &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; 返回值&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;as&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &amp;lt;&amp;lt;声明变量&amp;gt;&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;begin&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &amp;lt;&amp;lt;逻辑体&amp;gt;&amp;gt;         &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;end&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;</content>
            
              
                <breadCrumb title="Database" url="http://objectyan.me/categories/Database/"/>
              
            
        </display>
    </data>
  </url>
  
  <url>
    <loc>http://objectyan.me/2016/09/09/Linux-Make-Kernel/</loc>
    
    <lastmod>2020-04-20T01:42:16.585Z</lastmod>
    
    <changefreq>always</changefreq>
    <data>
        <display>
            <title> kernel 内核安装</title>
            <pubTime>2016-09-09T07:15:59.000Z</pubTime>
            
              
                <tag>kernel</tag>
              
            
            <content>&lt;h4 id=&quot;kernel-下载&quot;&gt;&lt;a href=&quot;#kernel-下载&quot; class=&quot;headerlink&quot; title=&quot;kernel 下载&quot;&gt;&lt;/a&gt;kernel 下载&lt;/h4&gt;&lt;blockquote&gt;
&lt;p&gt;kernel 内核下载,请移步至 &lt;a href=&quot;https://cdn.kernel.org/pub/linux/kernel/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;strong&gt;&lt;em&gt;官网&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id=&quot;解压源码&quot;&gt;&lt;a href=&quot;#解压源码&quot; class=&quot;headerlink&quot; title=&quot;解压源码&quot;&gt;&lt;/a&gt;解压源码&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;tar -zxvf linux-*.tar.gz&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;编译安装&quot;&gt;&lt;a href=&quot;#编译安装&quot; class=&quot;headerlink&quot; title=&quot;编译安装&quot;&gt;&lt;/a&gt;编译安装&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;built_in&quot;&gt;cd&lt;/span&gt; linux-*&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 安装编译器&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;yum install rpm-build&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#直接保存即可 除非有特须要求  自行选择&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;make xconfig&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#binrpm-pkg、bindeb-pkg 个人爱好 主要根据系统支持版本&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;make binrpm-pkg&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;安装完成&quot;&gt;&lt;a href=&quot;#安装完成&quot; class=&quot;headerlink&quot; title=&quot;安装完成&quot;&gt;&lt;/a&gt;安装完成&lt;/h4&gt;&lt;p&gt;&lt;img src=&quot;./complete.jpg&quot; alt=&quot;编译安装成功后截图&quot;&gt;&lt;/p&gt;
</content>
            
              
                <breadCrumb title="Linux" url="http://objectyan.me/categories/Linux/"/>
              
            
        </display>
    </data>
  </url>
  
  <url>
    <loc>http://objectyan.me/2016/09/09/Linux-Make-GCC/</loc>
    
    <lastmod>2020-04-20T01:42:16.585Z</lastmod>
    
    <changefreq>always</changefreq>
    <data>
        <display>
            <title> 编译安装GCC</title>
            <pubTime>2016-09-09T06:59:35.000Z</pubTime>
            
              
                <tag>GCC</tag>
              
            
            <content>&lt;blockquote&gt;
&lt;p&gt;Linux下编写C/C++程序自然缺不了一个优秀的编译器，Linux下比较常见的自然是GCC了。&lt;br&gt;2015年GCC也出到了5.2.0版本，对于C++11/14也有了更好的支持了。&lt;br&gt;所以，今天我们就来说说GCC的编译安装，安装的版本正是最新的5.2.0。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id=&quot;下载GCC源码&quot;&gt;&lt;a href=&quot;#下载GCC源码&quot; class=&quot;headerlink&quot; title=&quot;下载GCC源码&quot;&gt;&lt;/a&gt;下载GCC源码&lt;/h4&gt;&lt;blockquote&gt;
&lt;p&gt;GCC 下载,请移步至 &lt;a href=&quot;https://gcc.gnu.org/mirrors.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;strong&gt;&lt;em&gt;官网&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id=&quot;解压&quot;&gt;&lt;a href=&quot;#解压&quot; class=&quot;headerlink&quot; title=&quot;解压&quot;&gt;&lt;/a&gt;解压&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;tar -zxvf gcc-*.tar.gz&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;下载编译所需依赖项&quot;&gt;&lt;a href=&quot;#下载编译所需依赖项&quot; class=&quot;headerlink&quot; title=&quot;下载编译所需依赖项&quot;&gt;&lt;/a&gt;下载编译所需依赖项&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 进入解包后的gcc文件夹&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;built_in&quot;&gt;cd&lt;/span&gt; gcc-* &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 下载依赖项&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;./contrib/download_prerequisites&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 返回上层目录&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;built_in&quot;&gt;cd&lt;/span&gt; ..&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;建立编译输出目录并编译&quot;&gt;&lt;a href=&quot;#建立编译输出目录并编译&quot; class=&quot;headerlink&quot; title=&quot;建立编译输出目录并编译&quot;&gt;&lt;/a&gt;建立编译输出目录并编译&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;mkdir gcc-build-*&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 进入输出目录，执行以下命令，并生成makefile文件&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;built_in&quot;&gt;cd&lt;/span&gt; gcc-build-*&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;../gcc-*/configure --&lt;span class=&quot;built_in&quot;&gt;enable&lt;/span&gt;-checking=release \&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    --&lt;span class=&quot;built_in&quot;&gt;enable&lt;/span&gt;-languages=c,c++ --&lt;span class=&quot;built_in&quot;&gt;disable&lt;/span&gt;-multilib&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 编译&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;make -j4&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;接下来就是等待了，整个过程时间久远，看机器性能。&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;PS：编译过程中尽量使机器处于空闲状态&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id=&quot;安装&quot;&gt;&lt;a href=&quot;#安装&quot; class=&quot;headerlink&quot; title=&quot;安装&quot;&gt;&lt;/a&gt;安装&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;make install&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 检查版本&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;gcc --version 或 gcc -v&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;</content>
            
              
                <breadCrumb title="Linux" url="http://objectyan.me/categories/Linux/"/>
              
            
        </display>
    </data>
  </url>
  
  <url>
    <loc>http://objectyan.me/2016/11/03/Git-Local-To-Remote/</loc>
    
    <lastmod>2020-04-20T01:42:16.584Z</lastmod>
    
    <changefreq>always</changefreq>
    <data>
        <display>
            <title> Git 本地库提交至远程服务器</title>
            <pubTime>2016-11-03T07:31:06.000Z</pubTime>
            
              
                <tag>Git</tag>
              
                <tag>Bash</tag>
              
            
            <content>&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;git init&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;git add .&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;git commit -am &lt;span class=&quot;string&quot;&gt;&quot;###&quot;&lt;/span&gt;      -------以上3步只是本地提交&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;git remote add origin 远程地址&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;git push origin master&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;</content>
            
              
                <breadCrumb title="Git" url="http://objectyan.me/categories/Git/"/>
              
            
        </display>
    </data>
  </url>
  
  <url>
    <loc>http://objectyan.me/2018/04/27/IOS-Swift-UITable/</loc>
    
    <lastmod>2020-04-20T01:42:16.584Z</lastmod>
    
    <changefreq>always</changefreq>
    <data>
        <display>
            <title> IOS Swift UITable 使用</title>
            <pubTime>2018-04-27T08:15:53.000Z</pubTime>
            
              
                <tag>IOS</tag>
              
                <tag>Swift</tag>
              
            
            <content>&lt;h4 id=&quot;首要条件&quot;&gt;&lt;a href=&quot;#首要条件&quot; class=&quot;headerlink&quot; title=&quot;首要条件&quot;&gt;&lt;/a&gt;首要条件&lt;/h4&gt;&lt;figure class=&quot;highlight swift&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;// 继承 与 UITableViewController&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;class&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;Controller&lt;/span&gt;: &lt;span class=&quot;title&quot;&gt;UITableViewController&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;设置总行数&quot;&gt;&lt;a href=&quot;#设置总行数&quot; class=&quot;headerlink&quot; title=&quot;设置总行数&quot;&gt;&lt;/a&gt;设置总行数&lt;/h4&gt;&lt;figure class=&quot;highlight swift&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;override&lt;/span&gt; &lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;tableView&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(&lt;span class=&quot;number&quot;&gt;_&lt;/span&gt; tableView: UITableView, numberOfRowsInSection section: Int)&lt;/span&gt;&lt;/span&gt; -&amp;gt; &lt;span class=&quot;type&quot;&gt;Int&lt;/span&gt; &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;number&quot;&gt;100&lt;/span&gt;; &lt;span class=&quot;comment&quot;&gt;//行数&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;重写Cell的显示&quot;&gt;&lt;a href=&quot;#重写Cell的显示&quot; class=&quot;headerlink&quot; title=&quot;重写Cell的显示&quot;&gt;&lt;/a&gt;重写Cell的显示&lt;/h4&gt;&lt;figure class=&quot;highlight swift&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;override&lt;/span&gt; &lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;tableView&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(&lt;span class=&quot;number&quot;&gt;_&lt;/span&gt; tableView: UITableView, cellForRowAt indexPath: IndexPath)&lt;/span&gt;&lt;/span&gt; -&amp;gt; &lt;span class=&quot;type&quot;&gt;UITableViewCell&lt;/span&gt;  &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;keyword&quot;&gt;var&lt;/span&gt; cell = &lt;span class=&quot;keyword&quot;&gt;self&lt;/span&gt;.tableView.dequeueReusableCell(withIdentifier: &lt;span class=&quot;string&quot;&gt;&quot;Cell&quot;&lt;/span&gt;) &lt;span class=&quot;comment&quot;&gt;// 标识&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt;(cell == &lt;span class=&quot;literal&quot;&gt;nil&lt;/span&gt;)&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        cell = &lt;span class=&quot;type&quot;&gt;UITableViewCell&lt;/span&gt;() &lt;span class=&quot;comment&quot;&gt;// 初始化新的Cell&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; cell!;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;只显示有数据的-Cell&quot;&gt;&lt;a href=&quot;#只显示有数据的-Cell&quot; class=&quot;headerlink&quot; title=&quot;只显示有数据的 Cell&quot;&gt;&lt;/a&gt;只显示有数据的 Cell&lt;/h4&gt;&lt;figure class=&quot;highlight swift&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;self&lt;/span&gt;.tableView.tableFooterView = &lt;span class=&quot;type&quot;&gt;UIView&lt;/span&gt;()&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;</content>
            
              
                <breadCrumb title="Develop" url="http://objectyan.me/categories/Develop/"/>
              
                <breadCrumb title="IOS" url="http://objectyan.me/categories/Develop/IOS/"/>
              
                <breadCrumb title="Swift" url="http://objectyan.me/categories/Develop/IOS/Swift/"/>
              
            
        </display>
    </data>
  </url>
  
  <url>
    <loc>http://objectyan.me/2017/10/25/DotNet-MemoryCache/</loc>
    
    <lastmod>2020-04-20T01:42:16.583Z</lastmod>
    
    <changefreq>always</changefreq>
    <data>
        <display>
            <title> .Net 使用 MemoryCache</title>
            <pubTime>2017-10-25T05:25:03.000Z</pubTime>
            
              
                <tag>Develop</tag>
              
                <tag>.Net</tag>
              
            
            <content>&lt;h4 id=&quot;程序集&quot;&gt;&lt;a href=&quot;#程序集&quot; class=&quot;headerlink&quot; title=&quot;程序集&quot;&gt;&lt;/a&gt;程序集&lt;/h4&gt;&lt;p&gt;&lt;code&gt;System.Runtime.Caching.MemoryCache&lt;/code&gt;&lt;/p&gt;
&lt;h4 id=&quot;代码参见&quot;&gt;&lt;a href=&quot;#代码参见&quot; class=&quot;headerlink&quot; title=&quot;代码参见&quot;&gt;&lt;/a&gt;代码参见&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;ObjectCache cache = MemoryCache.Default;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;string key = &lt;span class=&quot;string&quot;&gt;&quot;_key&quot;&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;System.Data.DataSet ds = cache[key] as System.Data.DataSet;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt;(ds == null)&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    CacheItemPolicy policy = new CacheItemPolicy();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    policy.AbsoluteExpiration =&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;         DateTimeOffset.Now.AddMinutes(10);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    cache.Set(key, ds, policy);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;built_in&quot;&gt;return&lt;/span&gt; ds&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
</content>
            
              
                <breadCrumb title="Develop" url="http://objectyan.me/categories/Develop/"/>
              
                <breadCrumb title=".Net" url="http://objectyan.me/categories/Develop/Net/"/>
              
            
        </display>
    </data>
  </url>
  
  <url>
    <loc>http://objectyan.me/2017/09/30/DotNet-Core-Use-EFCore/</loc>
    
    <lastmod>2020-04-20T01:42:16.583Z</lastmod>
    
    <changefreq>always</changefreq>
    <data>
        <display>
            <title> .Net Core 使用 EF-Core</title>
            <pubTime>2017-09-30T08:30:24.000Z</pubTime>
            
              
                <tag>Develop</tag>
              
                <tag>.Net Core</tag>
              
                <tag>EntityFrameworkCore</tag>
              
            
            <content>&lt;h4 id=&quot;安装-Entity-Framework&quot;&gt;&lt;a href=&quot;#安装-Entity-Framework&quot; class=&quot;headerlink&quot; title=&quot;安装 Entity Framework&quot;&gt;&lt;/a&gt;安装 Entity Framework&lt;/h4&gt;&lt;p&gt;&lt;em&gt;*注：执行位置为： NuGet Package Manager *&lt;/em&gt;&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 默认包&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;Install-Package Microsoft.EntityFrameworkCore&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# sql server 数据库支持&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;Install-Package Microsoft.EntityFrameworkCore.SqlServer&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# EF 工具包&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;Install-Package Microsoft.EntityFrameworkCore.Tools&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;生成-Model-and-Context&quot;&gt;&lt;a href=&quot;#生成-Model-and-Context&quot; class=&quot;headerlink&quot; title=&quot;生成 Model and Context&quot;&gt;&lt;/a&gt;生成 Model and Context&lt;/h4&gt;&lt;p&gt;&lt;a href=&quot;https://docs.microsoft.com/en-us/ef/core/miscellaneous/cli/powershell#scaffold-dbcontext&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Scaffold-DbContext 参考文档&lt;/a&gt;&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# Table 为Array 多个表 用 , 分割&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;Scaffold-DbContext &lt;span class=&quot;string&quot;&gt;&quot;Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;&quot;&lt;/span&gt; Microsoft.EntityFrameworkCore.SqlServer -OutputDir [输出地址] -Context [Context名称] -Tables [需要生产的表]&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;EF-Core-中使用脚本查询&quot;&gt;&lt;a href=&quot;#EF-Core-中使用脚本查询&quot; class=&quot;headerlink&quot; title=&quot;EF Core 中使用脚本查询&quot;&gt;&lt;/a&gt;EF Core 中使用脚本查询&lt;/h4&gt;&lt;p&gt;&lt;a href=&quot;https://docs.microsoft.com/en-us/ef/core/querying/raw-sql&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;官方说明&lt;/a&gt;&lt;/p&gt;
&lt;figure class=&quot;highlight plain&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;context.Set&amp;lt;T&amp;gt;().FromSql(&amp;quot;&amp;quot;)&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;</content>
            
              
                <breadCrumb title="Develop" url="http://objectyan.me/categories/Develop/"/>
              
                <breadCrumb title=".Net Core" url="http://objectyan.me/categories/Develop/Net-Core/"/>
              
            
        </display>
    </data>
  </url>
  
  <url>
    <loc>http://objectyan.me/2017/09/21/Dotnet-Core-Synopsis/</loc>
    
    <lastmod>2020-04-20T01:42:16.583Z</lastmod>
    
    <changefreq>always</changefreq>
    <data>
        <display>
            <title> .Net Core 简介</title>
            <pubTime>2017-09-21T03:27:51.000Z</pubTime>
            
              
                <tag>Develop</tag>
              
                <tag>.Net Core</tag>
              
            
            <content>&lt;p&gt;.NET Core 是一个通用开发平台，由 Microsoft 和 GitHub 上的 .NET 社区共同维护。 它是跨平台的，支持 Windows、macOS 和 Linux，并且可用于设备、云和嵌入式/IoT 方案。&lt;/p&gt;
&lt;a id=&quot;more&quot;&gt;&lt;/a&gt;

&lt;h4 id=&quot;定义&quot;&gt;&lt;a href=&quot;#定义&quot; class=&quot;headerlink&quot; title=&quot;定义&quot;&gt;&lt;/a&gt;定义&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;部署灵活：可以包含在应用或已安装的并行用户或计算机范围中。&lt;/li&gt;
&lt;li&gt;跨平台：可以在 &lt;code&gt;Windows&lt;/code&gt;、&lt;code&gt;macOS&lt;/code&gt; 和 &lt;code&gt;Linux&lt;/code&gt; 上运行；也可移植到&lt;code&gt;其他操作系统&lt;/code&gt;。 Microsoft、其他公司和个人提供的支持的操作系统 (OS)、CPU 和应用程序方案会随着时间推移而增多。&lt;/li&gt;
&lt;li&gt;命令行工具：可在命令行中执行所有产品方案。&lt;/li&gt;
&lt;li&gt;兼容性：.NET Core 通过 &lt;code&gt;.NET&lt;/code&gt; 标准与 &lt;code&gt;.NET Framework&lt;/code&gt;、&lt;code&gt;Xamarin&lt;/code&gt; 和 &lt;code&gt;Mono&lt;/code&gt; 兼容。&lt;/li&gt;
&lt;li&gt;开放源：.NET Core 是一个开放源平台，使用 &lt;code&gt;MIT&lt;/code&gt; 和 &lt;code&gt;Apache 2&lt;/code&gt; 许可证。 文档由 CC-BY 许可发行。 .NET Core 是一个 .NET Foundation 项目。&lt;br&gt;由 Microsoft 支持：.NET Core 由 Microsoft 依据 .NET Core 支持提供支持&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h4 id=&quot;组成部分&quot;&gt;&lt;a href=&quot;#组成部分&quot; class=&quot;headerlink&quot; title=&quot;组成部分&quot;&gt;&lt;/a&gt;组成部分&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;.NET 运行时：提供类型系统、程序集加载、垃圾回收器、本机互操作和其他基本服务。&lt;/li&gt;
&lt;li&gt;一组 框架库：提供基元数据类型、应用编写类型和基本实用程序。&lt;/li&gt;
&lt;li&gt;一组 SDK 工具和语言编译器：提供基本的开发人员体验，可用于 .NET Core SDK。&lt;/li&gt;
&lt;li&gt;“dotnet”应用主机，用于启动 .NET Core 应用。 它选择运行时并托管运行时，提供程序集加载策略来启动应用。 同一主机还可用于以大致相同的方式启动 SDK 工具。&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
</content>
            
              
                <breadCrumb title="Develop" url="http://objectyan.me/categories/Develop/"/>
              
                <breadCrumb title=".Net Core" url="http://objectyan.me/categories/Develop/Net-Core/"/>
              
            
        </display>
    </data>
  </url>
  
  <url>
    <loc>http://objectyan.me/2017/09/26/DotNet-Core-SpaTemplates/</loc>
    
    <lastmod>2020-04-20T01:42:16.582Z</lastmod>
    
    <changefreq>always</changefreq>
    <data>
        <display>
            <title> .Net Core 安装项目模板</title>
            <pubTime>2017-09-26T07:14:32.000Z</pubTime>
            
              
                <tag>Develop</tag>
              
                <tag>.Net Core</tag>
              
            
            <content>&lt;p&gt;随着技术更新，目前前端框架眼花缭乱，但&lt;code&gt;.Net Core&lt;/code&gt;默认支持的项目模板只有 &lt;code&gt;Angular&lt;/code&gt;、&lt;code&gt;React.js&lt;/code&gt;、&lt;code&gt;React.js and Redux&lt;/code&gt; 3 中模板，如&lt;code&gt;Vue&lt;/code&gt;、&lt;code&gt;Aurelia&lt;/code&gt;、&lt;code&gt;Knockout.js&lt;/code&gt; 暂未加至默认中，需使用开源插件给予支持&lt;code&gt;Microsoft.AspNetCore.SpaTemplates&lt;/code&gt; &lt;/p&gt;
&lt;a id=&quot;more&quot;&gt;&lt;/a&gt;

&lt;h4 id=&quot;安装-Microsoft-AspNetCore-SpaTemplates&quot;&gt;&lt;a href=&quot;#安装-Microsoft-AspNetCore-SpaTemplates&quot; class=&quot;headerlink&quot; title=&quot;安装 Microsoft.AspNetCore.SpaTemplates&quot;&gt;&lt;/a&gt;安装 &lt;code&gt;Microsoft.AspNetCore.SpaTemplates&lt;/code&gt;&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;dotnet new --install &lt;span class=&quot;string&quot;&gt;&quot;Microsoft.AspNetCore.SpaTemplates::*&quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;运行结果&quot;&gt;&lt;a href=&quot;#运行结果&quot; class=&quot;headerlink&quot; title=&quot;运行结果&quot;&gt;&lt;/a&gt;运行结果&lt;/h4&gt;&lt;p&gt;&lt;img src=&quot;./DotNet-Core-SpaTemplates-01.PNG&quot; alt=&quot;运行截图&quot;&gt;&lt;/p&gt;
&lt;h4 id=&quot;创建模板项目&quot;&gt;&lt;a href=&quot;#创建模板项目&quot; class=&quot;headerlink&quot; title=&quot;创建模板项目&quot;&gt;&lt;/a&gt;创建模板项目&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;mkdir [项目名] &amp;amp;&amp;amp; &lt;span class=&quot;built_in&quot;&gt;cd&lt;/span&gt; [项目名]&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;dotnet new [上图中 Short Name 的值]&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;eg:&lt;br&gt;创建Vue项目模板&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;mkdir VueDemo &amp;amp;&amp;amp; &lt;span class=&quot;built_in&quot;&gt;cd&lt;/span&gt; VueDemo&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;dotnet new vue&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;</content>
            
              
                <breadCrumb title="Develop" url="http://objectyan.me/categories/Develop/"/>
              
                <breadCrumb title=".Net Core" url="http://objectyan.me/categories/Develop/Net-Core/"/>
              
            
        </display>
    </data>
  </url>
  
  <url>
    <loc>http://objectyan.me/2017/04/04/CentOS-7-VPN-PPTP/</loc>
    
    <lastmod>2020-04-20T01:42:16.581Z</lastmod>
    
    <changefreq>always</changefreq>
    <data>
        <display>
            <title> CentOS 7 搭建 PPTP 协议 VPN</title>
            <pubTime>2017-04-04T05:47:12.000Z</pubTime>
            
              
                <tag>VPN</tag>
              
                <tag>Firewall</tag>
              
                <tag>PPTP</tag>
              
            
            <content>&lt;h4 id=&quot;更新系统安装&quot;&gt;&lt;a href=&quot;#更新系统安装&quot; class=&quot;headerlink&quot; title=&quot;更新系统安装&quot;&gt;&lt;/a&gt;更新系统安装&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 更新CentOS系统&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;yum -y update&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;安装第三方软件库&quot;&gt;&lt;a href=&quot;#安装第三方软件库&quot; class=&quot;headerlink&quot; title=&quot;安装第三方软件库&quot;&gt;&lt;/a&gt;安装第三方软件库&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 安装第三方软件库&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;yum -y install epel-release&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;安装firewall防火墙&quot;&gt;&lt;a href=&quot;#安装firewall防火墙&quot; class=&quot;headerlink&quot; title=&quot;安装firewall防火墙&quot;&gt;&lt;/a&gt;安装firewall防火墙&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 安装firewall防火墙&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;yum -y install firewalld&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;chkconfig firewalld on&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;安装网络工具&quot;&gt;&lt;a href=&quot;#安装网络工具&quot; class=&quot;headerlink&quot; title=&quot;安装网络工具&quot;&gt;&lt;/a&gt;安装网络工具&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 安装网络工具&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;yum -y install net-tools&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;安装ppp-amp-pptpd&quot;&gt;&lt;a href=&quot;#安装ppp-amp-pptpd&quot; class=&quot;headerlink&quot; title=&quot;安装ppp&amp;amp;pptpd&quot;&gt;&lt;/a&gt;安装ppp&amp;amp;pptpd&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 安装ppp&amp;amp;pptpd&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;yum -y install firewalld net-tools curl ppp pptpd&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;修改ipv4支持数据包转发&quot;&gt;&lt;a href=&quot;#修改ipv4支持数据包转发&quot; class=&quot;headerlink&quot; title=&quot;修改ipv4支持数据包转发&quot;&gt;&lt;/a&gt;修改ipv4支持数据包转发&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 修改ipv4支持数据包转发&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;built_in&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&#39;net.ipv4.ip_forward = 1&#39;&lt;/span&gt; &amp;gt;&amp;gt; /etc/sysctl.conf&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;sysctl -p&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;配置VPN登陆验证&quot;&gt;&lt;a href=&quot;#配置VPN登陆验证&quot; class=&quot;headerlink&quot; title=&quot;配置VPN登陆验证&quot;&gt;&lt;/a&gt;配置VPN登陆验证&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 配置VPN登陆验证&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;vim /etc/ppp/chap-secrets&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 按照 【用户名 协议类型 密码 IP地址】进行配置&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;user pptpd password *&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;配置客户端使用虚拟IP-amp-服务虚拟IP&quot;&gt;&lt;a href=&quot;#配置客户端使用虚拟IP-amp-服务虚拟IP&quot; class=&quot;headerlink&quot; title=&quot;配置客户端使用虚拟IP&amp;amp;服务虚拟IP&quot;&gt;&lt;/a&gt;配置客户端使用虚拟IP&amp;amp;服务虚拟IP&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;vim /etc/pptpd.conf&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 配置客户端使用虚拟IP&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;remoteip 10.0.0.2-250&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 配置服务短虚拟IP&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;localip 10.0.0.1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;配置ppp配置信息&quot;&gt;&lt;a href=&quot;#配置ppp配置信息&quot; class=&quot;headerlink&quot; title=&quot;配置ppp配置信息&quot;&gt;&lt;/a&gt;配置ppp配置信息&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#配置ppp配置信息&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;vim /etc/ppp/options.pptpd &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;localip 10.0.0.1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;remoteip 10.0.0.2-250&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;name pptpd&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;refuse-pap&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;refuse-chap&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;refuse-mschap&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;require-mschap-v2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;require-mppe-128&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;ms-dns 8.8.8.8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;ms-dns 8.8.4.4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;proxyarp&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;lock&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;nobsdcomp&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;novj&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;novjccomp&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;nologfd&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;配置防火墙设置&quot;&gt;&lt;a href=&quot;#配置防火墙设置&quot; class=&quot;headerlink&quot; title=&quot;配置防火墙设置&quot;&gt;&lt;/a&gt;配置防火墙设置&lt;/h4&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;*$ETH 为你当前使用的网卡编号 查看  route | grep default | awk ‘{print $NF}’&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 配置防火墙&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;firewall-cmd --add-interface=&lt;span class=&quot;variable&quot;&gt;$ETH&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;firewall-cmd --add-port=1723/tcp --permanent&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;firewall-cmd --add-masquerade --permanent&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -i &lt;span class=&quot;variable&quot;&gt;$ETH&lt;/span&gt; -p gre -j ACCEPT&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;firewall-cmd --reload&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;当VPN连接时加载网卡信息&quot;&gt;&lt;a href=&quot;#当VPN连接时加载网卡信息&quot; class=&quot;headerlink&quot; title=&quot;当VPN连接时加载网卡信息&quot;&gt;&lt;/a&gt;当VPN连接时加载网卡信息&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 当ppp连接时配置网卡&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;vim /etc/ppp/ip-up.local&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;/sbin/ifconfig &lt;span class=&quot;variable&quot;&gt;$1&lt;/span&gt; mtu 1400&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 设置文件运行权限&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;chmod +x /etc/ppp/ip-up.local&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;开启PPTP服务&quot;&gt;&lt;a href=&quot;#开启PPTP服务&quot; class=&quot;headerlink&quot; title=&quot;开启PPTP服务&quot;&gt;&lt;/a&gt;开启PPTP服务&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 开启PPTP服务&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;systemctl restart pptpd.service&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;systemctl &lt;span class=&quot;built_in&quot;&gt;enable&lt;/span&gt; pptpd.service&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;</content>
            
              
                <breadCrumb title="Linux" url="http://objectyan.me/categories/Linux/"/>
              
                <breadCrumb title="CentOS" url="http://objectyan.me/categories/Linux/CentOS/"/>
              
            
        </display>
    </data>
  </url>
  
  <url>
    <loc>http://objectyan.me/2017/09/21/DotNet-Code-Bash/</loc>
    
    <lastmod>2020-04-20T01:42:16.581Z</lastmod>
    
    <changefreq>always</changefreq>
    <data>
        <display>
            <title> 命令行中创建使用.Net Core</title>
            <pubTime>2017-09-21T07:00:08.000Z</pubTime>
            
              
                <tag>Develop</tag>
              
                <tag>.Net Core</tag>
              
            
            <content>&lt;blockquote&gt;
&lt;h4 id=&quot;环境要求&quot;&gt;&lt;a href=&quot;#环境要求&quot; class=&quot;headerlink&quot; title=&quot;环境要求&quot;&gt;&lt;/a&gt;环境要求&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;.Net Core SDK ^ 1.0 以上&lt;/li&gt;
&lt;li&gt;文本编辑器，&lt;code&gt;eg&lt;/code&gt;: Atom、VSCode&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;h4 id=&quot;又一个-HelloWord&quot;&gt;&lt;a href=&quot;#又一个-HelloWord&quot; class=&quot;headerlink&quot; title=&quot;又一个 HelloWord&quot;&gt;&lt;/a&gt;又一个 HelloWord&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;打开命令行工具,并创建项目目录&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;mkdir HelloWord&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;built_in&quot;&gt;cd&lt;/span&gt; HelloWord&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;/li&gt;
&lt;li&gt;创建一个控制台程序&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;dotnet new console&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;/li&gt;
&lt;li&gt;还原依赖项树（Nuget）&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;dotnet restore&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;/li&gt;
&lt;li&gt;运行程序&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;dotnet run&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
一个新的HelloWord，又成功运行咯~&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;dotnet build&lt;/code&gt; 会编译此项目，生成对应的DLL文件.可以使用 &lt;code&gt;dotnet [dll path]&lt;/code&gt; 执行其文件&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ol&gt;
</content>
            
              
                <breadCrumb title="Develop" url="http://objectyan.me/categories/Develop/"/>
              
                <breadCrumb title=".Net Core" url="http://objectyan.me/categories/Develop/Net-Core/"/>
              
            
        </display>
    </data>
  </url>
  
  <url>
    <loc>http://objectyan.me/2017/04/04/CentOS-7-VPN-IKEV2/</loc>
    
    <lastmod>2020-04-20T01:42:16.580Z</lastmod>
    
    <changefreq>always</changefreq>
    <data>
        <display>
            <title> CentOS 7 搭建 IKEv2 VPN 服务</title>
            <pubTime>2017-04-04T14:30:42.000Z</pubTime>
            
              
                <tag>VPN</tag>
              
                <tag>IKEv2</tag>
              
                <tag>Firewall</tag>
              
            
            <content>&lt;h4 id=&quot;更新系统安装&quot;&gt;&lt;a href=&quot;#更新系统安装&quot; class=&quot;headerlink&quot; title=&quot;更新系统安装&quot;&gt;&lt;/a&gt;更新系统安装&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 更新CentOS系统&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;yum -y update&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;安装EPEL&quot;&gt;&lt;a href=&quot;#安装EPEL&quot; class=&quot;headerlink&quot; title=&quot;安装EPEL&quot;&gt;&lt;/a&gt;安装EPEL&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 安装EPEL&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;yum -y install epel-release&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;安装依赖组件&quot;&gt;&lt;a href=&quot;#安装依赖组件&quot; class=&quot;headerlink&quot; title=&quot;安装依赖组件&quot;&gt;&lt;/a&gt;安装依赖组件&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 安装依赖组件&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;yum -y install gpm-devel pam-devel openssl-devel make gcc&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;安装Strongswan&quot;&gt;&lt;a href=&quot;#安装Strongswan&quot; class=&quot;headerlink&quot; title=&quot;安装Strongswan&quot;&gt;&lt;/a&gt;安装Strongswan&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 安装Strongswan&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;yum -y install strongswan&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 为Strongswan添加别名 ipsec&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;built_in&quot;&gt;alias&lt;/span&gt; ipsec=&lt;span class=&quot;string&quot;&gt;&#39;strongswan&#39;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;生成CA私钥，并使用此私钥自签名生成CA证书&quot;&gt;&lt;a href=&quot;#生成CA私钥，并使用此私钥自签名生成CA证书&quot; class=&quot;headerlink&quot; title=&quot;生成CA私钥，并使用此私钥自签名生成CA证书&quot;&gt;&lt;/a&gt;生成CA私钥，并使用此私钥自签名生成CA证书&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;built_in&quot;&gt;cd&lt;/span&gt; /etc/strongswan &amp;amp;&amp;amp; mkdir ca &amp;amp;&amp;amp; &lt;span class=&quot;built_in&quot;&gt;cd&lt;/span&gt; ca&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;ipsec pki --gen --outform pem &amp;gt; ca.pem&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;ipsec pki --self --&lt;span class=&quot;keyword&quot;&gt;in&lt;/span&gt; ca.pem --dn &lt;span class=&quot;string&quot;&gt;&quot;C=[国家名], O=[组织名], CN=[通用名]&quot;&lt;/span&gt; --ca --lifetime 3652 --outform pem &amp;gt; ca.cert.pem&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;code&gt;注：配置中的 C=[国家名], O=[组织名] 值都相同&lt;/code&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h4 id=&quot;生成服务器私钥，然后从私钥中导出公钥，用CA证书签发服务器证书&quot;&gt;&lt;a href=&quot;#生成服务器私钥，然后从私钥中导出公钥，用CA证书签发服务器证书&quot; class=&quot;headerlink&quot; title=&quot;生成服务器私钥，然后从私钥中导出公钥，用CA证书签发服务器证书&quot;&gt;&lt;/a&gt;生成服务器私钥，然后从私钥中导出公钥，用CA证书签发服务器证书&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;ipsec pki --gen --outform pem &amp;gt; server.pem&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;ipsec pki --pub --&lt;span class=&quot;keyword&quot;&gt;in&lt;/span&gt; server.pem | ipsec pki --issue --lifetime 3652 --cacert ca.cert.pem --cakey ca.pem --dn &lt;span class=&quot;string&quot;&gt;&quot;C=[国家名], O=[组织名], CN=[IP 或 domain]&quot;&lt;/span&gt; --san=&lt;span class=&quot;string&quot;&gt;&quot;[IP 或 domain]&quot;&lt;/span&gt; --flag serverAuth --flag ikeIntermediate --outform pem &amp;gt; server.cert.pem&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;生成客户端私钥，然后从私钥中导出公钥，用CA证书签发客户端证书&quot;&gt;&lt;a href=&quot;#生成客户端私钥，然后从私钥中导出公钥，用CA证书签发客户端证书&quot; class=&quot;headerlink&quot; title=&quot;生成客户端私钥，然后从私钥中导出公钥，用CA证书签发客户端证书&quot;&gt;&lt;/a&gt;生成客户端私钥，然后从私钥中导出公钥，用CA证书签发客户端证书&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;ipsec pki --gen --outform pem &amp;gt; client.pem&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;ipsec pki --pub --&lt;span class=&quot;keyword&quot;&gt;in&lt;/span&gt; client.pem | ipsec pki --issue --lifetime 3652 --cacert ca.cert.pem --cakey ca.pem --dn &lt;span class=&quot;string&quot;&gt;&quot;C=[国家名], O=[组织名], CN=[通用名]&quot;&lt;/span&gt; --outform pem &amp;gt; client.cert.pem&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;生成-pkcs12-证书，用来导入手机或电脑。此处需输入密码，此密码用于安装CA证书时使用&quot;&gt;&lt;a href=&quot;#生成-pkcs12-证书，用来导入手机或电脑。此处需输入密码，此密码用于安装CA证书时使用&quot; class=&quot;headerlink&quot; title=&quot;生成 pkcs12 证书，用来导入手机或电脑。此处需输入密码，此密码用于安装CA证书时使用&quot;&gt;&lt;/a&gt;生成 pkcs12 证书，用来导入手机或电脑。此处需输入密码，此密码用于安装CA证书时使用&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;openssl pkcs12 -&lt;span class=&quot;built_in&quot;&gt;export&lt;/span&gt; -inkey client.pem -&lt;span class=&quot;keyword&quot;&gt;in&lt;/span&gt; client.cert.pem -name &lt;span class=&quot;string&quot;&gt;&quot;[此处与第7步中CN同值]&quot;&lt;/span&gt; -certfile ca.cert.pem -caname &lt;span class=&quot;string&quot;&gt;&quot;[CA 证书别名]&quot;&lt;/span&gt; -out client.cert.p12&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;strongswam导入证书&quot;&gt;&lt;a href=&quot;#strongswam导入证书&quot; class=&quot;headerlink&quot; title=&quot;strongswam导入证书&quot;&gt;&lt;/a&gt;strongswam导入证书&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#cacerts  /目录下放置CA证书&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#certs    /目录下放置服务器和客户端证书&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#private  /目录下放置服务器和客户端私钥&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;cp -r ca.cert.pem /etc/strongswan/ipsec.d/cacerts/&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;cp -r server.cert.pem /etc/strongswan/ipsec.d/certs/&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;cp -r server.pem /etc/strongswan/ipsec.d/private/&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;cp -r client.cert.pem /etc/strongswan/ipsec.d/certs/&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;cp -r client.pem /etc/strongswan/ipsec.d/private/&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;修改strongSwan各组件的通用配置&quot;&gt;&lt;a href=&quot;#修改strongSwan各组件的通用配置&quot; class=&quot;headerlink&quot; title=&quot;修改strongSwan各组件的通用配置&quot;&gt;&lt;/a&gt;修改strongSwan各组件的通用配置&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;25&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;cat &amp;gt;/etc/strongswan/strongswan.conf &amp;lt;&amp;lt;EOF&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;charon &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    load_modular = yes&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    duplicheck.enable = no                          &lt;span class=&quot;comment&quot;&gt;#冗余检查关闭，以允许同时连接多个设备&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        compress = yes                                  &lt;span class=&quot;comment&quot;&gt;#传输启用压缩&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    plugins &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        include strongswan.d/charon/*.conf&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    dns1 = 8.8.8.8                                  &lt;span class=&quot;comment&quot;&gt;#给远程端指定DNS服务器&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    dns2 = 8.8.4.4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    nbns1 = 8.8.8.8                                 &lt;span class=&quot;comment&quot;&gt;# 指定Windows的WINS服务器&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    nbns2 = 8.8.4.4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    filelog &amp;#123;                                       &lt;span class=&quot;comment&quot;&gt;#配置strongSwan日志级别和路径&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            /var/&lt;span class=&quot;built_in&quot;&gt;log&lt;/span&gt;/strongswan.log &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;               time_format = %b %e %T&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;               default = 5   &lt;span class=&quot;comment&quot;&gt;# 日志最高等级5&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;               append = no&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;               flush_line = yes&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;include strongswan.d/*.conf&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;EOF&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;修改IPsec相关的配置，定义IKE版本、验证方式、加密方式、连接属性等等&quot;&gt;&lt;a href=&quot;#修改IPsec相关的配置，定义IKE版本、验证方式、加密方式、连接属性等等&quot; class=&quot;headerlink&quot; title=&quot;修改IPsec相关的配置，定义IKE版本、验证方式、加密方式、连接属性等等&quot;&gt;&lt;/a&gt;修改IPsec相关的配置，定义IKE版本、验证方式、加密方式、连接属性等等&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;29&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;30&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;31&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;32&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;33&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;34&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;35&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;36&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;37&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;38&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;39&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;40&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;41&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;42&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;43&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;44&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;45&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;46&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;47&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;48&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;49&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;50&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;51&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;52&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;53&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;54&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;55&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;56&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;57&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;58&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;59&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;60&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;61&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;62&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;63&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;64&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;65&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;66&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;67&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;68&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;69&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;70&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;71&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;72&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;73&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;74&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;75&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;76&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;cat &amp;gt;/etc/strongswan/ipsec.conf &amp;lt;&amp;lt;EOF&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;config setup&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    protostack=netkey&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;comment&quot;&gt;# strictcrlpolicy=yes&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    listen = [IP 或 domain]&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    uniqueids = never&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# Add connections here.&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# Sample VPN connections&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#conn sample-self-signed&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#      leftsubnet=10.1.0.0/16&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#      leftcert=selfCert.der&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#      leftsendcert=never&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#      right=192.168.0.2&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#      rightsubnet=10.2.0.0/16&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#      rightcert=peerCert.der&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#      auto=start&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#conn sample-with-ca-cert&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#      leftsubnet=10.1.0.0/16&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#      leftcert=myCert.pem&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#      right=192.168.0.2&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#      rightsubnet=10.2.0.0/16&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#      rightid=&quot;C=CH, O=Linux strongSwan CN=peer name&quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#      auto=start&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;conn %default                           &lt;span class=&quot;comment&quot;&gt;#默认配置项，其他conn配置项都会调用此默认项&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    left=%any                           &lt;span class=&quot;comment&quot;&gt;#left表示local，即本地端（服务器端）IP地址；%any是魔数字，表示任意地址&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    leftsubnet=0.0.0.0/0                &lt;span class=&quot;comment&quot;&gt;#本地端网络，0.0.0.0/0为通配，表示所有IP网段&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    right=%any                          &lt;span class=&quot;comment&quot;&gt;#right表示remote，即远程端（客户端）IP地址可为任意地址&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    rightsourceip=10.10.10.0/24         &lt;span class=&quot;comment&quot;&gt;#分配给远程端的虚拟IP地址段，尽量避免使用常用私网地址段以免冲突&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    dpdaction=clear                     &lt;span class=&quot;comment&quot;&gt;#dpd表示Dead Peer Detection，对端失效检测，clear表示对端失效时关闭连接&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;conn IKEv1-CERT-XAUTH                   &lt;span class=&quot;comment&quot;&gt;#供老版本IOS使用。IKEv1，使用证书和XAUTH验证&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    keyexchange=ikev1                   &lt;span class=&quot;comment&quot;&gt;#密钥交换使用IKEv1&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    fragmentation=yes                   &lt;span class=&quot;comment&quot;&gt;#允许分片&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    leftauth=pubkey                     &lt;span class=&quot;comment&quot;&gt;#本地端使用公钥验证&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    leftcert=server.cert.pem            &lt;span class=&quot;comment&quot;&gt;#指定本地端证书&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    rightauth=pubkey                    &lt;span class=&quot;comment&quot;&gt;#远程端使用公钥验证&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    rightauth2=xauth                    &lt;span class=&quot;comment&quot;&gt;#远程端使用用户账号验证&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    rightcert=client.cert.pem           &lt;span class=&quot;comment&quot;&gt;#指定远程端证书&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    auto=add                            &lt;span class=&quot;comment&quot;&gt;#auto定义strongSwan服务启动时该连接的行为，add是添加连接类型但不启动  &lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;conn IKEv1-PSK-XAUTH                    &lt;span class=&quot;comment&quot;&gt;#供IOS, Android使用。IKEv1，使用预共享密钥和XAUTH验证&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    keyexchange=ikev1                   &lt;span class=&quot;comment&quot;&gt;#密钥交换使用IKEv1&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    leftauth=psk                        &lt;span class=&quot;comment&quot;&gt;#本地端使用预共享密钥验证&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    rightauth=psk                       &lt;span class=&quot;comment&quot;&gt;#远程端使用预共享密钥验证&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    rightauth2=xauth                    &lt;span class=&quot;comment&quot;&gt;#远程端使用用户账号验证&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    auto=add                            &lt;span class=&quot;comment&quot;&gt;#strongSwan启动时添加连接类型但不启动&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    aggressive=yes  &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;conn IKEv2-CERT                         &lt;span class=&quot;comment&quot;&gt;#供Windows 7+, Linux使用。IKEv2，使用证书验证&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    keyexchange=ikev2                   &lt;span class=&quot;comment&quot;&gt;#密钥交换使用IKEv2&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    leftauth=pubkey                     &lt;span class=&quot;comment&quot;&gt;#本地端使用公钥验证&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    leftcert=server.cert.pem            &lt;span class=&quot;comment&quot;&gt;#指定本地端证书&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    rightauth=pubkey                    &lt;span class=&quot;comment&quot;&gt;#远程端使用公钥验证&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    rightcert=client.cert.pem           &lt;span class=&quot;comment&quot;&gt;#指定远程端证书&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    auto=add                            &lt;span class=&quot;comment&quot;&gt;#strongSwan启动时添加连接类型但不启动&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;conn IKEv2-EAP                          &lt;span class=&quot;comment&quot;&gt;#供Windows 7+, IOS9+使用。IKEv2，EAP验证&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    keyexchange=ikev2                   &lt;span class=&quot;comment&quot;&gt;#密钥交换使用IKEv2&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    ike=aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!                &lt;span class=&quot;comment&quot;&gt;#第一阶段加密方式&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    esp=aes256-sha256,aes256-sha1,3des-sha1!                  &lt;span class=&quot;comment&quot;&gt;#ESP的顺序与IKE一致&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    rekey=no                            &lt;span class=&quot;comment&quot;&gt;#本地端对Windows远程端发出rekey请求会断开连接，所以需配置为no&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    leftauth=pubkey                     &lt;span class=&quot;comment&quot;&gt;#本地端使用公钥验证&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    leftcert=server.cert.pem            &lt;span class=&quot;comment&quot;&gt;#指定本地端证书&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    leftsendcert=always                 &lt;span class=&quot;comment&quot;&gt;#本地端总是发送证书&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    leftid=[IP 或 domain]                &lt;span class=&quot;comment&quot;&gt;#本地端标识，使用本地端公网IP地址作为标识，和生成服务器证书时的--san参数对应&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    rightauth=eap-mschapv2              &lt;span class=&quot;comment&quot;&gt;#远程端使用eap-mschapv2验证&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    rightsendcert=never                 &lt;span class=&quot;comment&quot;&gt;#不要求远程端发送证书&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    eap_identity=%any                   &lt;span class=&quot;comment&quot;&gt;#指定EAP验证身份，任意账户&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    fragmentation=yes                   &lt;span class=&quot;comment&quot;&gt;#允许分片&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    auto=add                            &lt;span class=&quot;comment&quot;&gt;#strongSwan启动时添加连接类型但不启动&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;EOF&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;定义各类密钥，例如：私钥、预共享密钥、用户账户和密码&quot;&gt;&lt;a href=&quot;#定义各类密钥，例如：私钥、预共享密钥、用户账户和密码&quot; class=&quot;headerlink&quot; title=&quot;定义各类密钥，例如：私钥、预共享密钥、用户账户和密码&quot;&gt;&lt;/a&gt;定义各类密钥，例如：私钥、预共享密钥、用户账户和密码&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;cat &amp;gt;/etc/strongswan/ipsec.secrets &amp;lt;&amp;lt;EOF&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;: RSA server.pem                        &lt;span class=&quot;comment&quot;&gt;#指定服务器的RSA私钥文件&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;: PSK &lt;span class=&quot;string&quot;&gt;&quot;[xxxxxxx]&quot;&lt;/span&gt;             &lt;span class=&quot;comment&quot;&gt;#配置预共享密钥&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;[username] : XAUTH &lt;span class=&quot;string&quot;&gt;&quot;[password]&quot;&lt;/span&gt;               &lt;span class=&quot;comment&quot;&gt;#配置XAUTH验证的用户名和密码，可配置多个用户账户&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;[username] : EAP &lt;span class=&quot;string&quot;&gt;&quot;[password]&quot;&lt;/span&gt;                 &lt;span class=&quot;comment&quot;&gt;#配置EAP验证的用户名s和密码，可配置多个用户账户&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;EOF&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;设置ipsec-secrets文件权限&quot;&gt;&lt;a href=&quot;#设置ipsec-secrets文件权限&quot; class=&quot;headerlink&quot; title=&quot;设置ipsec.secrets文件权限&quot;&gt;&lt;/a&gt;设置ipsec.secrets文件权限&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;chmod 600 ipsec.secrets&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;设置网卡转发&quot;&gt;&lt;a href=&quot;#设置网卡转发&quot; class=&quot;headerlink&quot; title=&quot;设置网卡转发&quot;&gt;&lt;/a&gt;设置网卡转发&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;cat &amp;gt;/etc/sysctl.conf &amp;lt;&amp;lt;EOF &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;net.ipv4.ip_forward = 1 &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;EOF &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;sysctl -p&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;配置防火墙，本处使用的firewalld&quot;&gt;&lt;a href=&quot;#配置防火墙，本处使用的firewalld&quot; class=&quot;headerlink&quot; title=&quot;配置防火墙，本处使用的firewalld&quot;&gt;&lt;/a&gt;配置防火墙，本处使用的firewalld&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;yum install firewall firewall-config&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;firewall-cmd --permanent --add-service=ipsec&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;firewall-cmd --permanent --zone=public --add-masquerade&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;firewall-cmd --permanent --zone=public --add-rich-rule=&lt;span class=&quot;string&quot;&gt;&#39;rule family=ipv4 source address=10.8.0.0/24 masquerade&#39;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;firewall-cmd --reload&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;配置服务启动&quot;&gt;&lt;a href=&quot;#配置服务启动&quot; class=&quot;headerlink&quot; title=&quot;配置服务启动&quot;&gt;&lt;/a&gt;配置服务启动&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;chkconfig strongswan on &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;chkconfig firewalld on &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;systemctl start strongswan&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;strongswan-查看日志状态&quot;&gt;&lt;a href=&quot;#strongswan-查看日志状态&quot; class=&quot;headerlink&quot; title=&quot;strongswan 查看日志状态&quot;&gt;&lt;/a&gt;strongswan 查看日志状态&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 查看当前链接数&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;ipsec status&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;链接VPN的方式&quot;&gt;&lt;a href=&quot;#链接VPN的方式&quot; class=&quot;headerlink&quot; title=&quot;链接VPN的方式&quot;&gt;&lt;/a&gt;链接VPN的方式&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;Windows&lt;ul&gt;
&lt;li&gt;10 以上的使用IKEv2的方式连接&lt;/li&gt;
&lt;li&gt;10 以下推荐安装官方的strongswan APP链接&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;IOS&lt;br&gt; IKEv2 链接&lt;/li&gt;
&lt;li&gt;Android&lt;br&gt; 推荐安装官方的strongswan APP链接&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;code&gt;注：推荐使用IKEv2 不推荐使用 IPSEC、IKE 等等&lt;/code&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
</content>
            
              
                <breadCrumb title="Linux" url="http://objectyan.me/categories/Linux/"/>
              
                <breadCrumb title="CentOS" url="http://objectyan.me/categories/Linux/CentOS/"/>
              
            
        </display>
    </data>
  </url>
  
  <url>
    <loc>http://objectyan.me/2017/04/04/CentOS-7-OpenVPN/</loc>
    
    <lastmod>2020-04-20T01:42:16.580Z</lastmod>
    
    <changefreq>always</changefreq>
    <data>
        <display>
            <title> CentOS 7 安装 OpenVPN</title>
            <pubTime>2017-04-04T05:42:06.000Z</pubTime>
            
              
                <tag>VPN</tag>
              
                <tag>Firewall</tag>
              
                <tag>OpenVPN</tag>
              
            
            <content>&lt;h4 id=&quot;更新系统环境&quot;&gt;&lt;a href=&quot;#更新系统环境&quot; class=&quot;headerlink&quot; title=&quot;更新系统环境&quot;&gt;&lt;/a&gt;更新系统环境&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;yum update -y&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;安装-OpenVPN-及相关插件&quot;&gt;&lt;a href=&quot;#安装-OpenVPN-及相关插件&quot; class=&quot;headerlink&quot; title=&quot;安装 OpenVPN 及相关插件&quot;&gt;&lt;/a&gt;安装 OpenVPN 及相关插件&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;yum install -y easy-rsa openssh-server lzo openssl openssl-devel openvpn NetworkManager-openvpn openvpn-auth-ldap openvpn&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;修改OpenVPN服务器配置&quot;&gt;&lt;a href=&quot;#修改OpenVPN服务器配置&quot; class=&quot;headerlink&quot; title=&quot;修改OpenVPN服务器配置&quot;&gt;&lt;/a&gt;修改OpenVPN服务器配置&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;24&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;cat &amp;gt;/etc/openvpn/server.conf &amp;lt;&amp;lt;END&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;port 1194&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;proto udp&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;dev tun&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;ca /etc/openvpn/easy-rsa/keys/ca.crt&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;cert /etc/openvpn/easy-rsa/keys/server.crt&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;key /etc/openvpn/easy-rsa/keys/server.key&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;dh /etc/openvpn/easy-rsa/keys/dh2048.pem&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;server 10.8.0.0 255.255.255.0&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;ifconfig-pool-persist ipp.txt&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;push &lt;span class=&quot;string&quot;&gt;&quot;redirect-gateway def1 bypass-dhcp&quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;push &lt;span class=&quot;string&quot;&gt;&quot;dhcp-option DNS 8.8.8.8&quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;push &lt;span class=&quot;string&quot;&gt;&quot;dhcp-option DNS 8.8.4.4&quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;keepalive 10 120&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;comp-lzo&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;max-clients 100&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;user nobody&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;group nobody&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;persist-key&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;persist-tun&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;status /var/&lt;span class=&quot;built_in&quot;&gt;log&lt;/span&gt;/openvpn-status.log&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;built_in&quot;&gt;log&lt;/span&gt;-append /var/&lt;span class=&quot;built_in&quot;&gt;log&lt;/span&gt;/openvpn.log&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;verb 3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;END&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;生成CA证书&quot;&gt;&lt;a href=&quot;#生成CA证书&quot; class=&quot;headerlink&quot; title=&quot;生成CA证书&quot;&gt;&lt;/a&gt;生成CA证书&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;cp -R /usr/share/easy-rsa/ /etc/openvpn&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;built_in&quot;&gt;cd&lt;/span&gt; /etc/openvpn/easy-rsa/2.0/&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;built_in&quot;&gt;source&lt;/span&gt; ./vars &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;./clean-all &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;./build-ca    &lt;span class=&quot;comment&quot;&gt;#各种回车，最后两个y&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;./build-key-server server&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;./build-dh&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;./build-key client &lt;span class=&quot;comment&quot;&gt;#客户端&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;配置IP转发&quot;&gt;&lt;a href=&quot;#配置IP转发&quot; class=&quot;headerlink&quot; title=&quot;配置IP转发&quot;&gt;&lt;/a&gt;配置IP转发&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;built_in&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&#39;net.ipv4.ip_forward = 1&#39;&lt;/span&gt; &amp;gt;&amp;gt; /etc/sysctl.conf &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;sysctl -p&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;配置防火墙&quot;&gt;&lt;a href=&quot;#配置防火墙&quot; class=&quot;headerlink&quot; title=&quot;配置防火墙&quot;&gt;&lt;/a&gt;配置防火墙&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;firewall-cmd --permanent --zone=public --add-masquerade&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;firewall-cmd --permanent --zone=public --add-rich-rule=&lt;span class=&quot;string&quot;&gt;&#39;rule family=ipv4 source address=10.8.0.0/24 masquerade&#39;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;firewall-cmd --permanent --add-service=http&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;firewall-cmd --permanent --add-service=https&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;firewall-cmd --permanent --add-service=openvpn&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;firewall-cmd --permanent --add-port=1194/tcp&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;firewall-cmd --reload&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;启动服务&quot;&gt;&lt;a href=&quot;#启动服务&quot; class=&quot;headerlink&quot; title=&quot;启动服务&quot;&gt;&lt;/a&gt;启动服务&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;systemctl start openvpn@server&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;systemctl &lt;span class=&quot;built_in&quot;&gt;enable&lt;/span&gt; openvpn@server&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;客户端使用-ca-crt、client-crt、client-key、创建client-ovpn&quot;&gt;&lt;a href=&quot;#客户端使用-ca-crt、client-crt、client-key、创建client-ovpn&quot; class=&quot;headerlink&quot; title=&quot;客户端使用 ca.crt、client.crt、client.key、创建client.ovpn&quot;&gt;&lt;/a&gt;客户端使用 ca.crt、client.crt、client.key、创建client.ovpn&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;client&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;dev tun&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;proto tcp  &lt;span class=&quot;comment&quot;&gt;#这里用tcp还是udp，根据先前server.conf中的要一致。&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;remote xxx.xxx.xxx.xxx 1194   &lt;span class=&quot;comment&quot;&gt;# xxx.xxx.xxx.xxx是vpn所在服务器的ip地址&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;resolv-retry infinite&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;nobind&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;persist-key&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;persist-tun&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;comp-lzo&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;verb 3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;ca ca.crt&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;cert client.crt&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;key client.key&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;redirect-gateway def1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;</content>
            
              
                <breadCrumb title="Linux" url="http://objectyan.me/categories/Linux/"/>
              
                <breadCrumb title="CentOS" url="http://objectyan.me/categories/Linux/CentOS/"/>
              
            
        </display>
    </data>
  </url>
  
  <url>
    <loc>http://objectyan.me/2016/06/12/CentOS-7-MongoDB/</loc>
    
    <lastmod>2020-04-20T01:42:16.579Z</lastmod>
    
    <changefreq>always</changefreq>
    <data>
        <display>
            <title> CentOS 7 安装 MongoDB</title>
            <pubTime>2016-06-12T08:32:11.000Z</pubTime>
            
              
                <tag>MongoDB</tag>
              
            
            <content>&lt;p&gt;&lt;a href=&quot;https://docs.mongodb.com/manual/tutorial/install-mongodb-enterprise-on-red-hat/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;官方安装文档&lt;/a&gt;&lt;/p&gt;
</content>
            
              
                <breadCrumb title="Linux" url="http://objectyan.me/categories/Linux/"/>
              
                <breadCrumb title="CentOS" url="http://objectyan.me/categories/Linux/CentOS/"/>
              
            
        </display>
    </data>
  </url>
  
  <url>
    <loc>http://objectyan.me/2016/05/26/CentOS-7-MySql/</loc>
    
    <lastmod>2020-04-20T01:42:16.579Z</lastmod>
    
    <changefreq>always</changefreq>
    <data>
        <display>
            <title> CentOS 7 安装 MySql</title>
            <pubTime>2016-05-26T05:06:41.000Z</pubTime>
            
              
                <tag>MySql</tag>
              
            
            <content>&lt;p&gt;&lt;a href=&quot;http://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;官方文档&lt;/a&gt;&lt;/p&gt;
</content>
            
              
                <breadCrumb title="Linux" url="http://objectyan.me/categories/Linux/"/>
              
                <breadCrumb title="CentOS" url="http://objectyan.me/categories/Linux/CentOS/"/>
              
            
        </display>
    </data>
  </url>
  
  <url>
    <loc>http://objectyan.me/2016/06/12/CentOS-7-NodeJS/</loc>
    
    <lastmod>2020-04-20T01:42:16.579Z</lastmod>
    
    <changefreq>always</changefreq>
    <data>
        <display>
            <title> CentOS 7 安装 NodeJs</title>
            <pubTime>2016-06-12T08:35:54.000Z</pubTime>
            
              
                <tag>NodeJs</tag>
              
            
            <content>&lt;h4 id=&quot;安装集成工具&quot;&gt;&lt;a href=&quot;#安装集成工具&quot; class=&quot;headerlink&quot; title=&quot;安装集成工具&quot;&gt;&lt;/a&gt;安装集成工具&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;yum -y install gcc make gcc-c++&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;安装Nodejs&quot;&gt;&lt;a href=&quot;#安装Nodejs&quot; class=&quot;headerlink&quot; title=&quot;安装Nodejs&quot;&gt;&lt;/a&gt;安装Nodejs&lt;/h4&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;自行选择版本：&lt;a href=&quot;https://nodejs.org/dist/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;官网&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;wget https://nodejs.org/dist/v4.4.5/node-v4.4.5.tar.gz&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;tar -zvxf node-v4.4.5.tar.gz&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;built_in&quot;&gt;cd&lt;/span&gt; node-v4.4.5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;make &amp;amp;&amp;amp; make install&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;验证版本&quot;&gt;&lt;a href=&quot;#验证版本&quot; class=&quot;headerlink&quot; title=&quot;验证版本&quot;&gt;&lt;/a&gt;验证版本&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;node -v&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;</content>
            
              
                <breadCrumb title="Linux" url="http://objectyan.me/categories/Linux/"/>
              
                <breadCrumb title="CentOS" url="http://objectyan.me/categories/Linux/CentOS/"/>
              
            
        </display>
    </data>
  </url>
  
  <url>
    <loc>http://objectyan.me/2016/08/30/CentOS-7-Memcached-Managent/</loc>
    
    <lastmod>2020-04-20T01:42:16.578Z</lastmod>
    
    <changefreq>always</changefreq>
    <data>
        <display>
            <title> CentOS 7 Memcached+Memagent 集群</title>
            <pubTime>2016-08-30T13:08:52.000Z</pubTime>
            
              
                <tag>Memcached</tag>
              
                <tag>Memagent</tag>
              
            
            <content>&lt;h4 id=&quot;安装libevent&quot;&gt;&lt;a href=&quot;#安装libevent&quot; class=&quot;headerlink&quot; title=&quot;安装libevent&quot;&gt;&lt;/a&gt;安装libevent&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;wget https://github.com/libevent/libevent/releases/download/release-2.0.22-stable/libevent-2.0.22-stable.tar.gz&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;tar -zxvf libevent-2.0.22-stable.tar.gz&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;built_in&quot;&gt;cd&lt;/span&gt; libevent-2.0.22-stable&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;mkdir /usr/&lt;span class=&quot;built_in&quot;&gt;local&lt;/span&gt;/libevent&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;./configure --prefix=/usr/&lt;span class=&quot;built_in&quot;&gt;local&lt;/span&gt;/libevent&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;make &amp;amp;&amp;amp; make install&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;安装memcached&quot;&gt;&lt;a href=&quot;#安装memcached&quot; class=&quot;headerlink&quot; title=&quot;安装memcached&quot;&gt;&lt;/a&gt;安装memcached&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;wget http://memcached.org/files/memcached-1.4.31.tar.gz&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;tar -zxvf memcached-1.4.31.tar.gz&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;built_in&quot;&gt;cd&lt;/span&gt; memcached-1.4.31&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;mkdir /usr/&lt;span class=&quot;built_in&quot;&gt;local&lt;/span&gt;/memcached&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;./configure --prefix=/usr/&lt;span class=&quot;built_in&quot;&gt;local&lt;/span&gt;/memcached --with-libevent=/usr/&lt;span class=&quot;built_in&quot;&gt;local&lt;/span&gt;/libevent&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;make &amp;amp;&amp;amp; make install&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;安装memagent&quot;&gt;&lt;a href=&quot;#安装memagent&quot; class=&quot;headerlink&quot; title=&quot;安装memagent&quot;&gt;&lt;/a&gt;安装memagent&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;mkdir /usr/&lt;span class=&quot;built_in&quot;&gt;local&lt;/span&gt;/magent&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;built_in&quot;&gt;cd&lt;/span&gt; /usr/&lt;span class=&quot;built_in&quot;&gt;local&lt;/span&gt;/magent&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/memagent/magent-0.6.tar.gz&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;tar -zxvf magent-0.6.tar.gz &amp;amp;&amp;amp; rm -rf magent-0.6.tar.gz&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;/sbin/ldconfig&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;sed -i &lt;span class=&quot;string&quot;&gt;&quot;s#LIBS = -levent#LIBS = -levent -lm#g&quot;&lt;/span&gt; Makefile&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h5 id=&quot;修改Makefile&quot;&gt;&lt;a href=&quot;#修改Makefile&quot; class=&quot;headerlink&quot; title=&quot;修改Makefile&quot;&gt;&lt;/a&gt;修改Makefile&lt;/h5&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;ifeq ($(ARCH), $(X64))&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        M64 = -m64&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        LIBS = /usr/lib64/libevent.so /usr/lib64/libm.so&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;else&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        LIBS = -levent -lm -L/usr/&lt;span class=&quot;built_in&quot;&gt;local&lt;/span&gt;/libevent/lib&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;endif&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h5 id=&quot;修改ketama-h&quot;&gt;&lt;a href=&quot;#修改ketama-h&quot; class=&quot;headerlink&quot; title=&quot;修改ketama.h&quot;&gt;&lt;/a&gt;修改ketama.h&lt;/h5&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#ifndef SSIZE_MAX&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#define SSIZE_MAX      32767&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#endif&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#ifndef _KETAMA_H&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#define _KETAMA_H&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h5 id=&quot;安装memagent-1&quot;&gt;&lt;a href=&quot;#安装memagent-1&quot; class=&quot;headerlink&quot; title=&quot;安装memagent&quot;&gt;&lt;/a&gt;安装memagent&lt;/h5&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;make 2 ln -i /usr/&lt;span class=&quot;built_in&quot;&gt;local&lt;/span&gt;/magent/magent /usr/bin/magent&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;使用memagent&quot;&gt;&lt;a href=&quot;#使用memagent&quot; class=&quot;headerlink&quot; title=&quot;使用memagent&quot;&gt;&lt;/a&gt;使用memagent&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#memcached 启动&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;memcached -d -m 10240 -u root -c 30720 -p 11211 -P /tmp/memcached.pid&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#magent 启动&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;magent -u root -n 102400 -p 12000 -s 192.168.0.1:11211 -s 192.168.0.2:11211&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;</content>
            
              
                <breadCrumb title="Linux" url="http://objectyan.me/categories/Linux/"/>
              
                <breadCrumb title="CentOS" url="http://objectyan.me/categories/Linux/CentOS/"/>
              
            
        </display>
    </data>
  </url>
  
  <url>
    <loc>http://objectyan.me/2015/01/24/CentOS-7-Install-Mono-Monodevelop/</loc>
    
    <lastmod>2020-04-20T01:42:16.578Z</lastmod>
    
    <changefreq>always</changefreq>
    <data>
        <display>
            <title> CentOS 7 安装 mono 和 monodevelop</title>
            <pubTime>2015-01-24T15:38:31.000Z</pubTime>
            
              
                <tag>Mono</tag>
              
                <tag>Monodevelop</tag>
              
            
            <content>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;本次所有操作在root模式下&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;29&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;30&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;31&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;32&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;33&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;34&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;35&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;36&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;37&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;38&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 添加mono安装使用的资源环境&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;rpm --import &lt;span class=&quot;string&quot;&gt;&quot;http://keyserver.ubuntu.com/pks/lookup?op=get&amp;amp;search=0x3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF&quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;yum-config-manager --add-repo http://download.mono-project.com/repo/centos/&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 安装 mono&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;yum install mono&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;### 安装libgdiplus&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 创建文件夹&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;mkdir /var/&lt;span class=&quot;built_in&quot;&gt;local&lt;/span&gt;/src 　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 进入创建文件&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;built_in&quot;&gt;cd&lt;/span&gt; /var/&lt;span class=&quot;built_in&quot;&gt;local&lt;/span&gt;/src　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　 &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 下载文件&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;wget http://download.mono-project.com/sources/libgdiplus/libgdiplus-3.12.tar.gz　　　  &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 解压下载文件&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;tar -zxvf libgdiplus-3.12.tar.gz　　　　　　　　　　　　　　　　　　　　　　　　　　     &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 进入解压文件夹&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;built_in&quot;&gt;cd&lt;/span&gt; libgdiplus-3.12　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　        &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 对安装程序进行配置&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;./configure　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　       &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 编译并安装&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;make &amp;amp;&amp;amp; make install　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　      &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;### 安装gtk-sharp&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 进入创建文件&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;built_in&quot;&gt;cd&lt;/span&gt; /var/&lt;span class=&quot;built_in&quot;&gt;local&lt;/span&gt;/src　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　             &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 下载文件&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;wget http://download.mono-project.com/sources/gtk-sharp212/gtk-sharp-2.12.26.tar.gz　　　  &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 解压下载文件&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;tar -zxvf gtk-sharp-2.12.26.tar.gz　　　　　　　　　　　　　　　　　　　　　　　　　               &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 进入解压文件夹&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;built_in&quot;&gt;cd&lt;/span&gt; gtk-sharp-2.12.26　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　              &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 对安装程序进行配置&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;./configure　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　                 &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 编译并安装&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;make &amp;amp;&amp;amp; make install　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　                 &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 安装monodevelop &lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;yum install monodevelop&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;安装完成就OK拉&lt;/p&gt;
</content>
            
              
                <breadCrumb title="Linux" url="http://objectyan.me/categories/Linux/"/>
              
                <breadCrumb title="CentOS" url="http://objectyan.me/categories/Linux/CentOS/"/>
              
            
        </display>
    </data>
  </url>
  
  <url>
    <loc>http://objectyan.me/2016/09/14/CentOS-7-Git/</loc>
    
    <lastmod>2020-04-20T01:42:16.577Z</lastmod>
    
    <changefreq>always</changefreq>
    <data>
        <display>
            <title> CentOS Git 服务器搭建</title>
            <pubTime>2016-09-14T09:40:07.000Z</pubTime>
            
              
                <tag>Git</tag>
              
            
            <content>&lt;h4 id=&quot;安装git&quot;&gt;&lt;a href=&quot;#安装git&quot; class=&quot;headerlink&quot; title=&quot;安装git&quot;&gt;&lt;/a&gt;安装git&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;yum -y install git&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;创建用户与授权&quot;&gt;&lt;a href=&quot;#创建用户与授权&quot; class=&quot;headerlink&quot; title=&quot;创建用户与授权&quot;&gt;&lt;/a&gt;创建用户与授权&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 找到 git_shell &lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;whereis git_shell&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;/usr/bin/git-shell &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 创建 git 用户&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;adduser -d /var/git -s /usr/bin/git-shell git_*&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;passwd git_*&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;git-使用&quot;&gt;&lt;a href=&quot;#git-使用&quot; class=&quot;headerlink&quot; title=&quot;git 使用&quot;&gt;&lt;/a&gt;git 使用&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;built_in&quot;&gt;cd&lt;/span&gt; /var/git&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 创建git仓库&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;git init --bare ***.git&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 授权&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;chmod -R 777 ***.git&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;</content>
            
              
                <breadCrumb title="Git" url="http://objectyan.me/categories/Git/"/>
              
            
        </display>
    </data>
  </url>
  
  <url>
    <loc>http://objectyan.me/2018/01/25/CentOS-7-Git-For-Source/</loc>
    
    <lastmod>2020-04-20T01:42:16.577Z</lastmod>
    
    <changefreq>always</changefreq>
    <data>
        <display>
            <title> CentOS Git 源码安装</title>
            <pubTime>2018-01-25T13:42:34.000Z</pubTime>
            
              
                <tag>Git</tag>
              
            
            <content>&lt;h4 id=&quot;安装-Git-依赖的库&quot;&gt;&lt;a href=&quot;#安装-Git-依赖的库&quot; class=&quot;headerlink&quot; title=&quot;安装 Git 依赖的库&quot;&gt;&lt;/a&gt;安装 Git 依赖的库&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;sudo yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel \&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;asciidoc xmlto docbook2x autoconf perl-ExtUtils-Embed -y&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;下载解压，编译并安装&quot;&gt;&lt;a href=&quot;#下载解压，编译并安装&quot; class=&quot;headerlink&quot; title=&quot;下载解压，编译并安装&quot;&gt;&lt;/a&gt;下载解压，编译并安装&lt;/h4&gt;&lt;p&gt;&lt;em&gt;&lt;em&gt;注：下载地址可查看 &lt;a href=&quot;https://www.kernel.org/pub/software/scm/git&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.kernel.org/pub/software/scm/git&lt;/a&gt; or &lt;a href=&quot;https://github.com/git/git/releases&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/git/git/releases&lt;/a&gt; 区别是一个有文件下载签名，一个为最新版本。&lt;/em&gt;&lt;/em&gt;&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;wget https://github.com/git/git/archive/v2.16.1.tar.gz&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;tar -zxvf v2.16.1.tar.gz&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;built_in&quot;&gt;cd&lt;/span&gt; git-2.16.1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;make configure&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;./configure --prefix=/usr&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;make all doc info&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;sudo make install install-doc install-html install-info&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
</content>
            
              
                <breadCrumb title="Git" url="http://objectyan.me/categories/Git/"/>
              
            
        </display>
    </data>
  </url>
  
  <url>
    <loc>http://objectyan.me/2016/09/14/CentOS-7-FTP/</loc>
    
    <lastmod>2020-04-20T01:42:16.576Z</lastmod>
    
    <changefreq>always</changefreq>
    <data>
        <display>
            <title> CentOS 搭建ftp服务器</title>
            <pubTime>2016-09-14T09:14:10.000Z</pubTime>
            
              
                <tag>FTP</tag>
              
            
            <content>&lt;h4 id=&quot;安装vsftpd&quot;&gt;&lt;a href=&quot;#安装vsftpd&quot; class=&quot;headerlink&quot; title=&quot;安装vsftpd&quot;&gt;&lt;/a&gt;安装vsftpd&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;yum install vsftpd&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;配置vsftpd-conf&quot;&gt;&lt;a href=&quot;#配置vsftpd-conf&quot; class=&quot;headerlink&quot; title=&quot;配置vsftpd.conf&quot;&gt;&lt;/a&gt;配置vsftpd.conf&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# Allow anonymous FTP? (Beware - allowed by default if you comment this out).&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;anonymous_enable=NO&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# When SELinux is enforcing check for SE bool ftp_home_dir&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;local_enable=YES&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;write_enable=YES&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 本地的ftp目录地址&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;local_root=/var/ftp&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;添加ftp用户&quot;&gt;&lt;a href=&quot;#添加ftp用户&quot; class=&quot;headerlink&quot; title=&quot;添加ftp用户&quot;&gt;&lt;/a&gt;添加ftp用户&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#创建用户&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;adduser -d /var/ftp -g ftp -s /sbin/nologin *_ftp&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#修改密码&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;passwd *_ftp&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;上传权限&quot;&gt;&lt;a href=&quot;#上传权限&quot; class=&quot;headerlink&quot; title=&quot;上传权限&quot;&gt;&lt;/a&gt;上传权限&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;26&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 修改上传路径权限  777   更具个人喜好设置权限&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;sudo chmod -R 777 /var/ftp&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 查看 ftp 设置&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;getsebool -a|grep ftp&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;ftp_home_dir --&amp;gt; on&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;ftpd_anon_write --&amp;gt; off&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;ftpd_connect_all_unreserved --&amp;gt; off&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;ftpd_connect_db --&amp;gt; off&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;ftpd_full_access --&amp;gt; on&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;ftpd_use_cifs --&amp;gt; off&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;ftpd_use_fusefs --&amp;gt; off&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;ftpd_use_nfs --&amp;gt; off&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;ftpd_use_passive_mode --&amp;gt; off&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;httpd_can_connect_ftp --&amp;gt; off&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;httpd_enable_ftp_server --&amp;gt; off&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;sftpd_anon_write --&amp;gt; off&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;sftpd_enable_homedirs --&amp;gt; off&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;sftpd_full_access --&amp;gt; off&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;sftpd_write_ssh_home --&amp;gt; off&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;tftp_anon_write --&amp;gt; off&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;tftp_home_dir --&amp;gt; off&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# 修改ftp_home_dir、ftpd_full_access  为 on&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;setsebool -P ftp_home_dir=on ftpd_full_access=on&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;设置vsftp-开机启动&quot;&gt;&lt;a href=&quot;#设置vsftp-开机启动&quot; class=&quot;headerlink&quot; title=&quot;设置vsftp 开机启动&quot;&gt;&lt;/a&gt;设置vsftp 开机启动&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;chkconfig vsftpd on&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;添加防火墙&quot;&gt;&lt;a href=&quot;#添加防火墙&quot; class=&quot;headerlink&quot; title=&quot;添加防火墙&quot;&gt;&lt;/a&gt;添加防火墙&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;firewall-cmd --permanent --add-service=ftp&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;firewall-cmd --reload&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;</content>
            
              
                <breadCrumb title="Linux" url="http://objectyan.me/categories/Linux/"/>
              
                <breadCrumb title="CentOS" url="http://objectyan.me/categories/Linux/CentOS/"/>
              
            
        </display>
    </data>
  </url>
  
  <url>
    <loc>http://objectyan.me/2017/03/21/Angular-Plug/</loc>
    
    <lastmod>2020-04-20T01:42:16.576Z</lastmod>
    
    <changefreq>always</changefreq>
    <data>
        <display>
            <title> AngularJs 插件集</title>
            <pubTime>2017-03-21T07:55:21.000Z</pubTime>
            
              
                <tag>Angular</tag>
              
                <tag>Javascript</tag>
              
                <tag>Plug</tag>
              
            
            <content>&lt;blockquote&gt;
&lt;h4 id=&quot;下拉加载插件&quot;&gt;&lt;a href=&quot;#下拉加载插件&quot; class=&quot;headerlink&quot; title=&quot;下拉加载插件&quot;&gt;&lt;/a&gt;下拉加载插件&lt;/h4&gt;&lt;p&gt;ngInfiniteScroll =&amp;gt; &lt;a href=&quot;http://sroze.github.io/ngInfiniteScroll/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://sroze.github.io/ngInfiniteScroll/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
</content>
            
              
                <breadCrumb title="Develop" url="http://objectyan.me/categories/Develop/"/>
              
                <breadCrumb title="Javascript" url="http://objectyan.me/categories/Develop/Javascript/"/>
              
                <breadCrumb title="Angular" url="http://objectyan.me/categories/Develop/Javascript/Angular/"/>
              
            
        </display>
    </data>
  </url>
  
  <url>
    <loc>http://objectyan.me/2018/02/09/Asp-DotNet-MVC-Webpack/</loc>
    
    <lastmod>2020-04-20T01:42:16.576Z</lastmod>
    
    <changefreq>always</changefreq>
    <data>
        <display>
            <title> ASP.NET MVC 使用webpack</title>
            <pubTime>2018-02-09T05:16:04.000Z</pubTime>
            
              
                <tag>Develop</tag>
              
                <tag>ASP.Net</tag>
              
            
            <content>&lt;h4 id=&quot;删除-Content、Script-文件夹&quot;&gt;&lt;a href=&quot;#删除-Content、Script-文件夹&quot; class=&quot;headerlink&quot; title=&quot;删除 Content、Script 文件夹&quot;&gt;&lt;/a&gt;删除 Content、Script 文件夹&lt;/h4&gt;&lt;p&gt;*** 使用所有的文件、样式都使用&lt;code&gt;Webpack&lt;/code&gt;打包&lt;/p&gt;
&lt;h4 id=&quot;创建-packages-config&quot;&gt;&lt;a href=&quot;#创建-packages-config&quot; class=&quot;headerlink&quot; title=&quot;创建 packages.config&quot;&gt;&lt;/a&gt;创建 packages.config&lt;/h4&gt;&lt;figure class=&quot;highlight json&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;29&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;30&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;31&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;32&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;33&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;34&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;35&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;36&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;37&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;38&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;39&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;40&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;41&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;42&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;43&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;44&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;45&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;46&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;47&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;48&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;49&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;50&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;51&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;52&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;53&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;54&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;55&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;56&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;57&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;58&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;59&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;60&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;61&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;62&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;63&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;64&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;65&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;66&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;span class=&quot;attr&quot;&gt;&quot;name&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;[Name]&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;span class=&quot;attr&quot;&gt;&quot;version&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;1.0.0&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;span class=&quot;attr&quot;&gt;&quot;description&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;[Description]&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;span class=&quot;attr&quot;&gt;&quot;author&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;OY&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;span class=&quot;attr&quot;&gt;&quot;private&quot;&lt;/span&gt;: &lt;span class=&quot;literal&quot;&gt;true&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;span class=&quot;attr&quot;&gt;&quot;scripts&quot;&lt;/span&gt;: &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;dev&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;cross-env NODE_ENV=development webpack --progress --w&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;start&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;yarn run dev&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;build&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;cross-env NODE_ENV=production webpack --progress&quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &amp;#125;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;span class=&quot;attr&quot;&gt;&quot;dependencies&quot;&lt;/span&gt;: &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;babel-polyfill&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;^6.26.0&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;bootstrap&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;^4.0.0&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;compression-webpack-plugin&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;^1.1.7&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;font-awesome&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;^4.7.0&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;font-awesome-webpack&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;^0.0.5-beta.2&quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &amp;#125;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;span class=&quot;attr&quot;&gt;&quot;devDependencies&quot;&lt;/span&gt;: &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;autoprefixer&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;^8.0.0&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;babel-core&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;^6.26.0&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;babel-eslint&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;^8.2.2&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;babel-helper-vue-jsx-merge-props&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;^^2.0.3&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;babel-loader&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;^7.1.2&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;babel-plugin-component&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;^1.1.0&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;babel-plugin-syntax-dynamic-import&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;^6.18.0&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;babel-plugin-syntax-jsx&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;^6.18.0&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;babel-plugin-transform-runtime&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;^6.23.0&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;babel-plugin-transform-vue-jsx&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;^3.5.1&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;babel-preset-env&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;^1.6.1&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;babel-preset-stage-2&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;^6.24.1&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;babel-preset-stage-3&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;^6.24.1&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;babel-runtime&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;^6.26.0&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;clean-webpack-plugin&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;^0.1.18&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;cross-env&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;^5.1.3&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;css-loader&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;^0.28.9&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;eslint&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;^4.18.1&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;eslint-config-google&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;^0.9.1&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;eslint-config-standard&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;^11.0.0&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;eslint-plugin-html&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;^4.0.2&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;eslint-plugin-import&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;^2.9.0&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;eslint-plugin-node&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;^6.0.0&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;eslint-plugin-promise&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;^3.6.0&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;eslint-plugin-standard&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;^3.0.1&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;extract-text-webpack-plugin&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;^3.0.2&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;file-loader&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;^1.1.9&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;friendly-errors-webpack-plugin&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;^1.6.1&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;happypack&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;^4.0.1&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;html-webpack-plugin&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;^2.30.1&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;less&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;^2.3.1&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;less-loader&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;^4.0.5&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;node-notifier&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;^5.2.1&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;node-sass&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;^4.7.2&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;portfinder&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;^1.0.13&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;postcss-import&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;^11.1.0&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;postcss-loader&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;^2.1.0&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;postcss-url&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;^7.3.0&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;sass-loader&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;^6.0.6&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;uglifyjs-webpack-plugin&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;^1.2.0&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;url-loader&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;^0.6.2&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;webpack&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;^3.11.0&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;webpack-bundle-analyzer&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;^2.10.0&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;webpack-hot-middleware&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;^2.21.0&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;webpack-merge&quot;&lt;/span&gt;: &lt;span class=&quot;string&quot;&gt;&quot;^4.1.1&quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;修改-Route&quot;&gt;&lt;a href=&quot;#修改-Route&quot; class=&quot;headerlink&quot; title=&quot;修改 Route&quot;&gt;&lt;/a&gt;修改 Route&lt;/h4&gt;&lt;p&gt;*** 确保单页 &lt;code&gt;route&lt;/code&gt; 能成功调整 &lt;/p&gt;
&lt;figure class=&quot;highlight plain&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;...&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;routes.MapRoute(&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    name: &amp;quot;DefaultSpa&amp;quot;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    url: &amp;quot;&amp;#123;*url&amp;#125;&amp;quot;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    defaults: new &amp;#123; controller &amp;#x3D; &amp;quot;Home&amp;quot;, action &amp;#x3D; &amp;quot;Index&amp;quot; &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;...&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;删除-Layout-cshtml-并创建-Layout-Template-cshtml&quot;&gt;&lt;a href=&quot;#删除-Layout-cshtml-并创建-Layout-Template-cshtml&quot; class=&quot;headerlink&quot; title=&quot;删除 _Layout.cshtml 并创建 _Layout_Template.cshtml&quot;&gt;&lt;/a&gt;删除 &lt;code&gt;_Layout.cshtml&lt;/code&gt; 并创建 &lt;code&gt;_Layout_Template.cshtml&lt;/code&gt;&lt;/h4&gt;&lt;p&gt;*** 自动生成_Layout&lt;/p&gt;
&lt;figure class=&quot;highlight html&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta&quot;&gt;&amp;lt;!DOCTYPE &lt;span class=&quot;meta-keyword&quot;&gt;html&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;&lt;span class=&quot;name&quot;&gt;html&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;&lt;span class=&quot;name&quot;&gt;head&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;span class=&quot;tag&quot;&gt;&amp;lt;&lt;span class=&quot;name&quot;&gt;meta&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;charset&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&quot;utf-8&quot;&lt;/span&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;span class=&quot;tag&quot;&gt;&amp;lt;&lt;span class=&quot;name&quot;&gt;meta&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&quot;viewport&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;content&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&quot;width=device-width, initial-scale=1.0&quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;span class=&quot;tag&quot;&gt;&amp;lt;&lt;span class=&quot;name&quot;&gt;meta&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;http-equiv&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&quot;X-UA-Compatible&quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;content&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&quot;IE=edge,Chrome=1&quot;&lt;/span&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;/&lt;span class=&quot;name&quot;&gt;head&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;&lt;span class=&quot;name&quot;&gt;body&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;span class=&quot;tag&quot;&gt;&amp;lt;&lt;span class=&quot;name&quot;&gt;div&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&quot;app-root&quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    @RenderBody()&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;span class=&quot;tag&quot;&gt;&amp;lt;/&lt;span class=&quot;name&quot;&gt;div&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;/&lt;span class=&quot;name&quot;&gt;body&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;/&lt;span class=&quot;name&quot;&gt;html&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;创建-webpack-config-js&quot;&gt;&lt;a href=&quot;#创建-webpack-config-js&quot; class=&quot;headerlink&quot; title=&quot;创建 webpack.config.js&quot;&gt;&lt;/a&gt;创建 &lt;code&gt;webpack.config.js&lt;/code&gt;&lt;/h4&gt;&lt;figure class=&quot;highlight javascript&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;29&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;30&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;31&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;32&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;33&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;34&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;35&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;36&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;37&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;38&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;39&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;40&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;41&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;42&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;43&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;44&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;45&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;46&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;47&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;48&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;49&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;50&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;51&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;52&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;53&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;54&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;55&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;56&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;57&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;58&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;59&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;60&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;61&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;62&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;63&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;64&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;65&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;66&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;67&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;68&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;69&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;70&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;71&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;72&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;73&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;74&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;75&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;76&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;77&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;78&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;79&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;80&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;81&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;82&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;83&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;84&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;85&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;86&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;87&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;88&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;89&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;90&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;91&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;92&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;93&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;94&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;95&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;96&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;97&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;98&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;99&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;100&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;101&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;102&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;103&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;104&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;105&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;106&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;107&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;108&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;109&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;110&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;111&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;112&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;113&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;114&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;115&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;116&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;117&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;118&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;119&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;120&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;121&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;122&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;123&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;124&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;125&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;126&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta&quot;&gt;&#39;use strict&#39;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;const&lt;/span&gt; path = &lt;span class=&quot;built_in&quot;&gt;require&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&#39;path&#39;&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;const&lt;/span&gt; os = &lt;span class=&quot;built_in&quot;&gt;require&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&#39;os&#39;&lt;/span&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;const&lt;/span&gt; webpack = &lt;span class=&quot;built_in&quot;&gt;require&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&#39;webpack&#39;&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;const&lt;/span&gt; merge = &lt;span class=&quot;built_in&quot;&gt;require&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&#39;webpack-merge&#39;&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;const&lt;/span&gt; HtmlWebpackPlugin = &lt;span class=&quot;built_in&quot;&gt;require&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&#39;html-webpack-plugin&#39;&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;const&lt;/span&gt; ExtractTextPlugin = &lt;span class=&quot;built_in&quot;&gt;require&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&#39;extract-text-webpack-plugin&#39;&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;const&lt;/span&gt; CleanWebpackPlugin = &lt;span class=&quot;built_in&quot;&gt;require&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&quot;clean-webpack-plugin&quot;&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;const&lt;/span&gt; UglifyJsPlugin = &lt;span class=&quot;built_in&quot;&gt;require&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&#39;uglifyjs-webpack-plugin&#39;&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;const&lt;/span&gt; HappyPack = &lt;span class=&quot;built_in&quot;&gt;require&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&#39;happypack&#39;&lt;/span&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;const&lt;/span&gt; env = process.env.NODE_ENV == &lt;span class=&quot;string&quot;&gt;&quot;development&quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;var&lt;/span&gt; happyThreadPool = HappyPack.ThreadPool(&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  size: os.cpus().length&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;resolve&lt;/span&gt;(&lt;span class=&quot;params&quot;&gt;dir&lt;/span&gt;) &lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; path.join(__dirname, &lt;span class=&quot;string&quot;&gt;&#39;.&#39;&lt;/span&gt;, dir)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;const&lt;/span&gt; base = &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  context: __dirname,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  devtool: &lt;span class=&quot;string&quot;&gt;&#39;#source-map&#39;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  resolve: &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    extensions: [&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      &lt;span class=&quot;string&quot;&gt;&#39;.js&#39;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    ]&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &amp;#125;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  entry: [&lt;span class=&quot;string&quot;&gt;&#39;babel-polyfill&#39;&lt;/span&gt;, &lt;span class=&quot;string&quot;&gt;&#39;./src/main.js&#39;&lt;/span&gt;],&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;span class=&quot;built_in&quot;&gt;module&lt;/span&gt;: &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    rules: [&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        test: &lt;span class=&quot;regexp&quot;&gt;/\.js$/&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        loader: &lt;span class=&quot;string&quot;&gt;&#39;happypack/loader?id=happybabel&#39;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        include: [resolve(&lt;span class=&quot;string&quot;&gt;&#39;src&#39;&lt;/span&gt;),&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        resolve(&lt;span class=&quot;string&quot;&gt;&#39;./node_modules/element-ui/lib/&#39;&lt;/span&gt;),&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        resolve(&lt;span class=&quot;string&quot;&gt;&#39;./node_modules/iviewDir/&#39;&lt;/span&gt;)],&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        exclude: &lt;span class=&quot;regexp&quot;&gt;/node_modules/&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      &amp;#125;, &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        test: &lt;span class=&quot;regexp&quot;&gt;/\.css$/&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        use: ExtractTextPlugin.extract(&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;          use: [&lt;span class=&quot;string&quot;&gt;&#39;css-loader?minimize&#39;&lt;/span&gt;, &lt;span class=&quot;string&quot;&gt;&#39;postcss-loader&#39;&lt;/span&gt;],&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;          fallback: &lt;span class=&quot;string&quot;&gt;&#39;style-loader&#39;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &amp;#125;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      &amp;#125;, &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        test: &lt;span class=&quot;regexp&quot;&gt;/\.scss$/&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        use: ExtractTextPlugin.extract(&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;          use: [&lt;span class=&quot;string&quot;&gt;&#39;css-loader?minimize&#39;&lt;/span&gt;, &lt;span class=&quot;string&quot;&gt;&#39;postcss-loader&#39;&lt;/span&gt;, &lt;span class=&quot;string&quot;&gt;&#39;sass-loader&#39;&lt;/span&gt;],&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;          fallback: &lt;span class=&quot;string&quot;&gt;&#39;style-loader&#39;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &amp;#125;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      &amp;#125;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        test: &lt;span class=&quot;regexp&quot;&gt;/\.(mp4|webm|ogg|mp3|wav|flac|aac|woff2?|eot|ttf|otf|png|jpe?g|gif|svg)(\?.*)?$/&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        loader: &lt;span class=&quot;string&quot;&gt;&#39;url-loader&#39;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        options: &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;          limit: &lt;span class=&quot;number&quot;&gt;1024&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;          name: &lt;span class=&quot;string&quot;&gt;`assets/[name]&lt;span class=&quot;subst&quot;&gt;$&amp;#123;env ? &lt;span class=&quot;string&quot;&gt;&#39;.[hash:7]&#39;&lt;/span&gt; : &lt;span class=&quot;string&quot;&gt;&#39;&#39;&lt;/span&gt;&amp;#125;&lt;/span&gt;.[ext]`&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    ]&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &amp;#125;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  output: &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    publicPath: &lt;span class=&quot;string&quot;&gt;&#39;/dist/&#39;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    path: path.resolve(__dirname, &lt;span class=&quot;string&quot;&gt;&#39;./dist/&#39;&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &amp;#125;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  devtool: &lt;span class=&quot;string&quot;&gt;&#39;#source-map&#39;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  plugins: [&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; CleanWebpackPlugin([&lt;span class=&quot;string&quot;&gt;&quot;./dist&quot;&lt;/span&gt;], &amp;#123; &lt;span class=&quot;string&quot;&gt;&quot;verbose&quot;&lt;/span&gt;: &lt;span class=&quot;literal&quot;&gt;true&lt;/span&gt; &amp;#125;),&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; HtmlWebpackPlugin(&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      filename: resolve(&lt;span class=&quot;string&quot;&gt;&#39;./Views/Shared/_Layout.cshtml&#39;&lt;/span&gt;),&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      template: resolve(&lt;span class=&quot;string&quot;&gt;&#39;./Views/Shared/_Layout_Template.cshtml&#39;&lt;/span&gt;),&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      inject: &lt;span class=&quot;literal&quot;&gt;true&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      xhtml: &lt;span class=&quot;literal&quot;&gt;true&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      chunksSortMode: &lt;span class=&quot;string&quot;&gt;&#39;dependency&#39;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;),&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; HappyPack(&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      id: &lt;span class=&quot;string&quot;&gt;&#39;happybabel&#39;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      loaders: [&lt;span class=&quot;string&quot;&gt;&#39;babel-loader&#39;&lt;/span&gt;],&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      threadPool: happyThreadPool,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      verbose: &lt;span class=&quot;literal&quot;&gt;true&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  ]&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;const&lt;/span&gt; dev = &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  output: &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    filename: &lt;span class=&quot;string&quot;&gt;&#39;[name].js&#39;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    chunkFilename: &lt;span class=&quot;string&quot;&gt;&#39;[name].chunk.js&#39;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &amp;#125;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  plugins: [&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; ExtractTextPlugin(&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      filename: &lt;span class=&quot;string&quot;&gt;&#39;[name].css&#39;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      allChunks: &lt;span class=&quot;literal&quot;&gt;true&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;),&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; webpack.optimize.CommonsChunkPlugin(&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      name: [&lt;span class=&quot;string&quot;&gt;&#39;vender-exten&#39;&lt;/span&gt;, &lt;span class=&quot;string&quot;&gt;&#39;vender-base&#39;&lt;/span&gt;],&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      minChunks: &lt;span class=&quot;literal&quot;&gt;Infinity&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  ]&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;const&lt;/span&gt; prod = &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  output: &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    filename: &lt;span class=&quot;string&quot;&gt;&#39;[name].[hash].js&#39;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    chunkFilename: &lt;span class=&quot;string&quot;&gt;&#39;[name].[hash].chunk.js&#39;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &amp;#125;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  plugins: [&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; ExtractTextPlugin(&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      filename: &lt;span class=&quot;string&quot;&gt;&#39;[name].[hash].css&#39;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      allChunks: &lt;span class=&quot;literal&quot;&gt;true&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;),&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; webpack.optimize.CommonsChunkPlugin(&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      name: [&lt;span class=&quot;string&quot;&gt;&#39;vender-exten&#39;&lt;/span&gt;, &lt;span class=&quot;string&quot;&gt;&#39;vender-base&#39;&lt;/span&gt;],&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      minChunks: &lt;span class=&quot;literal&quot;&gt;Infinity&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;),&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; webpack.DefinePlugin(&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      &lt;span class=&quot;string&quot;&gt;&#39;process.env&#39;&lt;/span&gt;: &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        NODE_ENV: &lt;span class=&quot;string&quot;&gt;&#39;&quot;production&quot;&#39;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;),&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; UglifyJsPlugin(&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      sourceMap: &lt;span class=&quot;literal&quot;&gt;true&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  ]&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;const&lt;/span&gt; other = env ? dev : prod;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;built_in&quot;&gt;module&lt;/span&gt;.exports = merge(base, other)&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;创建-babelrc&quot;&gt;&lt;a href=&quot;#创建-babelrc&quot; class=&quot;headerlink&quot; title=&quot;创建 .babelrc&quot;&gt;&lt;/a&gt;创建 &lt;code&gt;.babelrc&lt;/code&gt;&lt;/h4&gt;&lt;figure class=&quot;highlight json&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;24&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;span class=&quot;attr&quot;&gt;&quot;presets&quot;&lt;/span&gt;: [&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    [&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      &lt;span class=&quot;string&quot;&gt;&quot;env&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;attr&quot;&gt;&quot;modules&quot;&lt;/span&gt;: &lt;span class=&quot;literal&quot;&gt;false&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;attr&quot;&gt;&quot;targets&quot;&lt;/span&gt;: &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;          &lt;span class=&quot;attr&quot;&gt;&quot;browsers&quot;&lt;/span&gt;: [ &lt;span class=&quot;string&quot;&gt;&quot;&amp;gt; 1%&quot;&lt;/span&gt;, &lt;span class=&quot;string&quot;&gt;&quot;last 2 versions&quot;&lt;/span&gt;, &lt;span class=&quot;string&quot;&gt;&quot;not ie &amp;lt;= 8&quot;&lt;/span&gt; ]&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    ],&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;string&quot;&gt;&quot;stage-2&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;string&quot;&gt;&quot;stage-3&quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  ],&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;span class=&quot;attr&quot;&gt;&quot;plugins&quot;&lt;/span&gt;: [&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;string&quot;&gt;&quot;transform-runtime&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;string&quot;&gt;&quot;syntax-dynamic-import&quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  ],&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;span class=&quot;attr&quot;&gt;&quot;env&quot;&lt;/span&gt;: &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&quot;test&quot;&lt;/span&gt;: &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      &lt;span class=&quot;attr&quot;&gt;&quot;presets&quot;&lt;/span&gt;: [ &lt;span class=&quot;string&quot;&gt;&quot;env&quot;&lt;/span&gt;, &lt;span class=&quot;string&quot;&gt;&quot;stage-2&quot;&lt;/span&gt;, &lt;span class=&quot;string&quot;&gt;&quot;stage-3&quot;&lt;/span&gt; ]&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;</content>
            
              
                <breadCrumb title="Develop" url="http://objectyan.me/categories/Develop/"/>
              
                <breadCrumb title="ASP.Net" url="http://objectyan.me/categories/Develop/ASP-Net/"/>
              
            
        </display>
    </data>
  </url>
  
  <url>
    <loc>http://objectyan.me/2016/11/29/Angular-Date-Format/</loc>
    
    <lastmod>2020-04-20T01:42:16.575Z</lastmod>
    
    <changefreq>always</changefreq>
    <data>
        <display>
            <title> AngularJs 时间格式化</title>
            <pubTime>2016-11-29T06:45:49.000Z</pubTime>
            
              
                <tag>Angular</tag>
              
                <tag>Javascript</tag>
              
            
            <content>&lt;figure class=&quot;highlight javascript&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;29&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;30&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;31&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;32&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;33&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;34&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;35&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;36&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;37&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;38&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;39&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;40&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;41&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;42&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;本地化日期格式化：&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;(&amp;#123;&amp;#123; today | date:&lt;span class=&quot;string&quot;&gt;&#39;medium&#39;&lt;/span&gt; &amp;#125;&amp;#125;)Nov &lt;span class=&quot;number&quot;&gt;19&lt;/span&gt;, &lt;span class=&quot;number&quot;&gt;2015&lt;/span&gt; &lt;span class=&quot;number&quot;&gt;3&lt;/span&gt;:&lt;span class=&quot;number&quot;&gt;57&lt;/span&gt;:&lt;span class=&quot;number&quot;&gt;48&lt;/span&gt; PM&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;(&amp;#123;&amp;#123; today | date:&lt;span class=&quot;string&quot;&gt;&#39;short&#39;&lt;/span&gt; &amp;#125;&amp;#125;)&lt;span class=&quot;number&quot;&gt;11&lt;/span&gt;/&lt;span class=&quot;number&quot;&gt;19&lt;/span&gt;/&lt;span class=&quot;number&quot;&gt;15&lt;/span&gt; &lt;span class=&quot;number&quot;&gt;3&lt;/span&gt;:&lt;span class=&quot;number&quot;&gt;57&lt;/span&gt; PM&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;(&amp;#123;&amp;#123; today | date:&lt;span class=&quot;string&quot;&gt;&#39;fullDate&#39;&lt;/span&gt; &amp;#125;&amp;#125;)Thursday, November &lt;span class=&quot;number&quot;&gt;19&lt;/span&gt;, &lt;span class=&quot;number&quot;&gt;2015&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;(&amp;#123;&amp;#123; today | date:&lt;span class=&quot;string&quot;&gt;&#39;longDate&#39;&lt;/span&gt; &amp;#125;&amp;#125;)November &lt;span class=&quot;number&quot;&gt;19&lt;/span&gt;, &lt;span class=&quot;number&quot;&gt;2015&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;(&amp;#123;&amp;#123; today | date:&lt;span class=&quot;string&quot;&gt;&#39;mediumDate&#39;&lt;/span&gt; &amp;#125;&amp;#125;)Nov &lt;span class=&quot;number&quot;&gt;19&lt;/span&gt;, &lt;span class=&quot;number&quot;&gt;2015&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;(&amp;#123;&amp;#123; today | date:&lt;span class=&quot;string&quot;&gt;&#39;shortDate&#39;&lt;/span&gt; &amp;#125;&amp;#125;)&lt;span class=&quot;number&quot;&gt;11&lt;/span&gt;/&lt;span class=&quot;number&quot;&gt;19&lt;/span&gt;/&lt;span class=&quot;number&quot;&gt;15&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;(&amp;#123;&amp;#123; today | date:&lt;span class=&quot;string&quot;&gt;&#39;mediumTime&#39;&lt;/span&gt; &amp;#125;&amp;#125;)&lt;span class=&quot;number&quot;&gt;3&lt;/span&gt;:&lt;span class=&quot;number&quot;&gt;57&lt;/span&gt;:&lt;span class=&quot;number&quot;&gt;48&lt;/span&gt; PM&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;(&amp;#123;&amp;#123; today | date:&lt;span class=&quot;string&quot;&gt;&#39;shortTime&#39;&lt;/span&gt; &amp;#125;&amp;#125;)&lt;span class=&quot;number&quot;&gt;3&lt;/span&gt;:&lt;span class=&quot;number&quot;&gt;57&lt;/span&gt; PM&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;年份格式化：&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;四位年份：(&amp;#123;&amp;#123; today | date:&lt;span class=&quot;string&quot;&gt;&#39;yyyy&#39;&lt;/span&gt; &amp;#125;&amp;#125;)&lt;span class=&quot;number&quot;&gt;2015&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;两位年份：(&amp;#123;&amp;#123; today | date:&lt;span class=&quot;string&quot;&gt;&#39;yy&#39;&lt;/span&gt; &amp;#125;&amp;#125;)&lt;span class=&quot;number&quot;&gt;15&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;一位年份：(&amp;#123;&amp;#123; today | date:&lt;span class=&quot;string&quot;&gt;&#39;y&#39;&lt;/span&gt; &amp;#125;&amp;#125;)&lt;span class=&quot;number&quot;&gt;2015&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;月份格式化：&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;英文月份：(&amp;#123;&amp;#123; today | date:&lt;span class=&quot;string&quot;&gt;&#39;MMMM&#39;&lt;/span&gt; &amp;#125;&amp;#125;)November&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;英文月份简写：(&amp;#123;&amp;#123; today | date:&lt;span class=&quot;string&quot;&gt;&#39;MMM&#39;&lt;/span&gt; &amp;#125;&amp;#125;)Nov&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;两位数字月份：(&amp;#123;&amp;#123; today | date:&lt;span class=&quot;string&quot;&gt;&#39;MM&#39;&lt;/span&gt; &amp;#125;&amp;#125;)&lt;span class=&quot;number&quot;&gt;11&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;一年中的第几个月份：(&amp;#123;&amp;#123; today | date:&lt;span class=&quot;string&quot;&gt;&#39;M&#39;&lt;/span&gt; &amp;#125;&amp;#125;)&lt;span class=&quot;number&quot;&gt;11&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;日期格式化：&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;数字日期：(&amp;#123;&amp;#123; today | date:&lt;span class=&quot;string&quot;&gt;&#39;dd&#39;&lt;/span&gt; &amp;#125;&amp;#125;)&lt;span class=&quot;number&quot;&gt;19&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;一个月中的第几天：(&amp;#123;&amp;#123; today | date:&lt;span class=&quot;string&quot;&gt;&#39;d&#39;&lt;/span&gt; &amp;#125;&amp;#125;)&lt;span class=&quot;number&quot;&gt;19&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;英文星期：(&amp;#123;&amp;#123; today | date:&lt;span class=&quot;string&quot;&gt;&#39;EEEE&#39;&lt;/span&gt; &amp;#125;&amp;#125;)Thursday&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;英文星期简写：(&amp;#123;&amp;#123; today | date:&lt;span class=&quot;string&quot;&gt;&#39;EEE&#39;&lt;/span&gt; &amp;#125;&amp;#125;)Thu&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;小时格式化：&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;number&quot;&gt;24&lt;/span&gt;小时制数字小时：(&amp;#123;&amp;#123; today | date:&lt;span class=&quot;string&quot;&gt;&#39;HH&#39;&lt;/span&gt; &amp;#125;&amp;#125;)&lt;span class=&quot;number&quot;&gt;15&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;一天中的第几个小时：(&amp;#123;&amp;#123; today | date:&lt;span class=&quot;string&quot;&gt;&#39;H&#39;&lt;/span&gt; &amp;#125;&amp;#125;)&lt;span class=&quot;number&quot;&gt;15&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;number&quot;&gt;12&lt;/span&gt;小时制数字小时：(&amp;#123;&amp;#123; today | date:&lt;span class=&quot;string&quot;&gt;&#39;hh&#39;&lt;/span&gt; &amp;#125;&amp;#125;)&lt;span class=&quot;number&quot;&gt;03&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;上午或下午的第几个小时：(&amp;#123;&amp;#123; today | date:&lt;span class=&quot;string&quot;&gt;&#39;h&#39;&lt;/span&gt; &amp;#125;&amp;#125;)&lt;span class=&quot;number&quot;&gt;3&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;分钟格式化：&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;数字分钟数：(&amp;#123;&amp;#123; today | date:&lt;span class=&quot;string&quot;&gt;&#39;mm&#39;&lt;/span&gt; &amp;#125;&amp;#125;)&lt;span class=&quot;number&quot;&gt;57&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;一个小时中的第几分钟：(&amp;#123;&amp;#123; today | date:&lt;span class=&quot;string&quot;&gt;&#39;m&#39;&lt;/span&gt; &amp;#125;&amp;#125;)&lt;span class=&quot;number&quot;&gt;57&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;秒数格式化：&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;数字秒数：(&amp;#123;&amp;#123; today | date:&lt;span class=&quot;string&quot;&gt;&#39;ss&#39;&lt;/span&gt; &amp;#125;&amp;#125;)&lt;span class=&quot;number&quot;&gt;48&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;一分钟中内的第几秒：(&amp;#123;&amp;#123; today | date:&lt;span class=&quot;string&quot;&gt;&#39;s&#39;&lt;/span&gt; &amp;#125;&amp;#125;)&lt;span class=&quot;number&quot;&gt;48&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;毫秒数格式化：&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;毫秒数：(&amp;#123;&amp;#123; today | date:&lt;span class=&quot;string&quot;&gt;&#39;sss&#39;&lt;/span&gt; &amp;#125;&amp;#125;)&lt;span class=&quot;number&quot;&gt;541&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;字符格式化：&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;上下午标识：(&amp;#123;&amp;#123; today | date:&lt;span class=&quot;string&quot;&gt;&#39;a&#39;&lt;/span&gt; &amp;#125;&amp;#125;)PM&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;四位时区标识：(&amp;#123;&amp;#123; today | date:&lt;span class=&quot;string&quot;&gt;&#39;Z&#39;&lt;/span&gt; &amp;#125;&amp;#125;)+&lt;span class=&quot;number&quot;&gt;0800&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;自定义日期格式化：&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;年月日：(&amp;#123;&amp;#123; today | date:&lt;span class=&quot;string&quot;&gt;&#39;yyyy-MM-dd&#39;&lt;/span&gt; &amp;#125;&amp;#125;)&lt;span class=&quot;number&quot;&gt;2015&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;-11&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;-19&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;时分秒：(&amp;#123;&amp;#123; today | date:&lt;span class=&quot;string&quot;&gt;&#39;HH:mm:ss.sss&#39;&lt;/span&gt; &amp;#125;&amp;#125;)&lt;span class=&quot;number&quot;&gt;15&lt;/span&gt;:&lt;span class=&quot;number&quot;&gt;57&lt;/span&gt;:&lt;span class=&quot;number&quot;&gt;48.541&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;</content>
            
              
                <breadCrumb title="Develop" url="http://objectyan.me/categories/Develop/"/>
              
                <breadCrumb title="Javascript" url="http://objectyan.me/categories/Develop/Javascript/"/>
              
                <breadCrumb title="Angular" url="http://objectyan.me/categories/Develop/Javascript/Angular/"/>
              
            
        </display>
    </data>
  </url>
  
  <url>
    <loc>http://objectyan.me/2016/11/29/Angular-Http-Interceptor/</loc>
    
    <lastmod>2020-04-20T01:42:16.575Z</lastmod>
    
    <changefreq>always</changefreq>
    <data>
        <display>
            <title> AngularJs Http 请求拦截器</title>
            <pubTime>2016-11-29T02:25:48.000Z</pubTime>
            
              
                <tag>Angular</tag>
              
                <tag>Javascript</tag>
              
            
            <content>&lt;figure class=&quot;highlight javascript&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;29&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;30&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;31&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;32&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;33&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;34&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;35&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;36&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;37&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;38&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;39&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;40&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;41&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;42&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;43&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;44&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;45&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;46&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;47&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;48&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;49&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;50&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;51&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;52&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;53&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;54&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;55&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;56&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;57&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;58&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;59&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;60&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;61&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;62&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;63&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;64&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;65&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;66&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;67&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;68&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;69&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;70&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;71&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;72&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;73&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;74&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;75&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;76&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;77&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;78&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;79&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;80&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;81&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;82&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;83&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;84&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;85&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;86&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;87&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;/**&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt; * Created by oy on 2016/11/29.&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt; */&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;(&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;function&lt;/span&gt;(&lt;span class=&quot;params&quot;&gt;&lt;/span&gt;) &lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta&quot;&gt;    &#39;use strict&#39;&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;comment&quot;&gt;// 创建angular模块&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    angular&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        .module(&lt;span class=&quot;string&quot;&gt;&#39;app.oy_httpinterceptor&#39;&lt;/span&gt;, []);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;)();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;/**&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt; * Created by oy on 11/1/16.&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt; */&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;(&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;function&lt;/span&gt;(&lt;span class=&quot;params&quot;&gt;&lt;/span&gt;) &lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta&quot;&gt;    &#39;use strict&#39;&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;comment&quot;&gt;// 为模块添加工厂代理 代理中为请求拦截&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    angular&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        .module(&lt;span class=&quot;string&quot;&gt;&#39;app.oy_httpinterceptor&#39;&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        .factory(&lt;span class=&quot;string&quot;&gt;&#39;oy_httpinterceptor_config&#39;&lt;/span&gt;,oy_httpinterceptor_factory)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    ;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    oy_httpinterceptor_factory.$inject = [ &lt;span class=&quot;string&quot;&gt;&#39;$rootScope&#39;&lt;/span&gt;, &lt;span class=&quot;string&quot;&gt;&#39;$q&#39;&lt;/span&gt;, &lt;span class=&quot;string&quot;&gt;&#39;$injector&#39;&lt;/span&gt;,&lt;span class=&quot;string&quot;&gt;&#39;$window&#39;&lt;/span&gt;];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;oy_httpinterceptor_factory&lt;/span&gt;(&lt;span class=&quot;params&quot;&gt;$rootScope, $q, $injector,$window&lt;/span&gt;) &lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;keyword&quot;&gt;var&lt;/span&gt; httpInterceptor = &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &lt;span class=&quot;string&quot;&gt;&#39;responseError&#39;&lt;/span&gt;: &lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;function&lt;/span&gt; (&lt;span class=&quot;params&quot;&gt;response&lt;/span&gt;) &lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                &lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt;(response.status == &lt;span class=&quot;number&quot;&gt;-1&lt;/span&gt;)&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                    response.status = &lt;span class=&quot;number&quot;&gt;200&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                &lt;span class=&quot;comment&quot;&gt;// console.log(&#39;responseError:&#39;.response);&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; $q.reject(&lt;span class=&quot;string&quot;&gt;&quot;网络连接错误！&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &amp;#125;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &lt;span class=&quot;string&quot;&gt;&#39;response&#39;&lt;/span&gt;: &lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;function&lt;/span&gt; (&lt;span class=&quot;params&quot;&gt;response&lt;/span&gt;) &lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                &lt;span class=&quot;comment&quot;&gt;// console.log(&#39;response:&#39;.response);&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                &lt;span class=&quot;comment&quot;&gt;// if(response.error == &quot;Unauthenticated.&quot;)&amp;#123;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                &lt;span class=&quot;comment&quot;&gt;//   return&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                &lt;span class=&quot;comment&quot;&gt;// &amp;#125;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; response;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &amp;#125;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &lt;span class=&quot;string&quot;&gt;&#39;request&#39;&lt;/span&gt;: &lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;function&lt;/span&gt; (&lt;span class=&quot;params&quot;&gt;config&lt;/span&gt;) &lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                &lt;span class=&quot;keyword&quot;&gt;let&lt;/span&gt; url = config.url;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                &lt;span class=&quot;comment&quot;&gt;// disable cache for all API Not Get requests&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                &lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (url &amp;amp;&amp;amp; config.method.toLowerCase() != &lt;span class=&quot;string&quot;&gt;&#39;GET&#39;&lt;/span&gt;.toLowerCase() &amp;amp;&amp;amp; url.indexOf(&lt;span class=&quot;string&quot;&gt;&#39;.html&#39;&lt;/span&gt;) &amp;lt; &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;) &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                    config.params = config.params || &amp;#123;&amp;#125;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                    config.params.timestamp = &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;built_in&quot;&gt;Date&lt;/span&gt;().getTime();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                &lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt;(angular.isObject(config.data)) &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                    &lt;span class=&quot;keyword&quot;&gt;var&lt;/span&gt; param = [];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                    angular.forEach(config.data, &lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;function&lt;/span&gt;(&lt;span class=&quot;params&quot;&gt;value, key&lt;/span&gt;) &lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                        &lt;span class=&quot;keyword&quot;&gt;this&lt;/span&gt;.push(key + &lt;span class=&quot;string&quot;&gt;&#39;=&#39;&lt;/span&gt; + value);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                    &amp;#125;, param);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                    config.data = param.join(&lt;span class=&quot;string&quot;&gt;&#39;&amp;amp;&#39;&lt;/span&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                config.headers = config.headers || &amp;#123;&amp;#125;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                config.headers[&lt;span class=&quot;string&quot;&gt;&#39;Content-Type&#39;&lt;/span&gt;] = &lt;span class=&quot;string&quot;&gt;&quot;application/x-www-form-urlencoded&quot;&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; config;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &amp;#125;,&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &lt;span class=&quot;string&quot;&gt;&#39;requestError&#39;&lt;/span&gt;: &lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;function&lt;/span&gt; (&lt;span class=&quot;params&quot;&gt;config&lt;/span&gt;) &lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                &lt;span class=&quot;comment&quot;&gt;// console.log(&#39;requestError:&#39;.config);&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; $q.reject(&lt;span class=&quot;string&quot;&gt;&quot;网络连接错误！&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; httpInterceptor;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;)();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;/**&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt; * Created by oy on 11/1/16.&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt; */&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;(&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;function&lt;/span&gt;(&lt;span class=&quot;params&quot;&gt;&lt;/span&gt;) &lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta&quot;&gt;    &#39;use strict&#39;&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;comment&quot;&gt;// 为模块配置代理函数&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    angular&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        .module(&lt;span class=&quot;string&quot;&gt;&#39;app.oy_httpinterceptor&#39;&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        .config(oy_httpinterceptor_config)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    ;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    oy_httpinterceptor_config.$inject = [&lt;span class=&quot;string&quot;&gt;&#39;$httpProvider&#39;&lt;/span&gt;];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;oy_httpinterceptor_config&lt;/span&gt;(&lt;span class=&quot;params&quot;&gt;$httpProvider&lt;/span&gt;) &lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        $httpProvider.interceptors.push(&lt;span class=&quot;string&quot;&gt;&#39;oy_httpinterceptor_config&#39;&lt;/span&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;)();&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;</content>
            
              
                <breadCrumb title="Develop" url="http://objectyan.me/categories/Develop/"/>
              
                <breadCrumb title="Javascript" url="http://objectyan.me/categories/Develop/Javascript/"/>
              
                <breadCrumb title="Angular" url="http://objectyan.me/categories/Develop/Javascript/Angular/"/>
              
            
        </display>
    </data>
  </url>
  
  <url>
    <loc>http://objectyan.me/2018/06/04/Android-Shortcut-Key/</loc>
    
    <lastmod>2020-04-20T01:42:16.574Z</lastmod>
    
    <changefreq>always</changefreq>
    <data>
        <display>
            <title> Android Studio 常用快捷键</title>
            <pubTime>2018-06-04T09:53:40.000Z</pubTime>
            
              
                <tag>Android</tag>
              
                <tag>Develop</tag>
              
            
            <content>&lt;h4 id=&quot;修复代码错误&quot;&gt;&lt;a href=&quot;#修复代码错误&quot; class=&quot;headerlink&quot; title=&quot;修复代码错误&quot;&gt;&lt;/a&gt;修复代码错误&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;* eg：cannot be resolved to a type *&lt;/strong&gt;&lt;br&gt;&lt;code&gt;MAC：&lt;/code&gt;Option + Return&lt;br&gt;&lt;code&gt;Windows：&lt;/code&gt;Alt + Enter&lt;/p&gt;
&lt;h4 id=&quot;快速打开对话框&quot;&gt;&lt;a href=&quot;#快速打开对话框&quot; class=&quot;headerlink&quot; title=&quot;快速打开对话框&quot;&gt;&lt;/a&gt;快速打开对话框&lt;/h4&gt;&lt;p&gt;&lt;code&gt;MAC:&lt;/code&gt;Command + Shift + O&lt;br&gt;&lt;code&gt;Windows:&lt;/code&gt;Ctrl + Shift + N&lt;/p&gt;
&lt;h4 id=&quot;格式化&quot;&gt;&lt;a href=&quot;#格式化&quot; class=&quot;headerlink&quot; title=&quot;格式化&quot;&gt;&lt;/a&gt;格式化&lt;/h4&gt;&lt;p&gt;&lt;code&gt;MAC:&lt;/code&gt;Option + Command + L&lt;br&gt;&lt;code&gt;Windows:&lt;/code&gt;Ctrl + Shift + L&lt;/p&gt;
</content>
            
              
                <breadCrumb title="Develop" url="http://objectyan.me/categories/Develop/"/>
              
                <breadCrumb title="Android" url="http://objectyan.me/categories/Develop/Android/"/>
              
            
        </display>
    </data>
  </url>
  
  <url>
    <loc>http://objectyan.me/2018/03/26/Android-Open-Source-Project/</loc>
    
    <lastmod>2020-04-20T01:42:16.574Z</lastmod>
    
    <changefreq>always</changefreq>
    <data>
        <display>
            <title> Android 开源项目</title>
            <pubTime>2018-03-26T02:58:41.000Z</pubTime>
            
              
                <tag>Android</tag>
              
                <tag>Develop</tag>
              
            
            <content>&lt;h4 id=&quot;UI&quot;&gt;&lt;a href=&quot;#UI&quot; class=&quot;headerlink&quot; title=&quot;UI&quot;&gt;&lt;/a&gt;UI&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/lightSky/Awesome-MaterialDesign&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Awesome-MaterialDesign&lt;/a&gt;&amp;nbsp;- MaterialDesignCenter改名为Awesome-MaterialDesign，优化了布局，新增了不少库。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/wasabeef/awesome-android-ui&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;awesome-android-ui&lt;/a&gt;&amp;nbsp;- ui库，非常多的ui及特效。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/AndroidDeveloperLB/ChipsLibrary&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;ChipsLibrary&lt;/a&gt;&amp;nbsp;- 在Android EditText中实现打Tag功能。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/7heaven/bitmapMesh&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;bitmapMesh&lt;/a&gt;&amp;nbsp;- 拉窗帘效果。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/ksoichiro/Android-ObservableScrollView&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;ObservableScrollView&lt;/a&gt;&amp;nbsp;- 在滚动的视图观测滚动事件的Android库 它易于与在Android 5.0 Lollipop中引入的工具条Toolbar相交互，并能够帮助实现Material&lt;br&gt;Design apps的外观。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/JoanZapata/android-iconify&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;iconify&lt;/a&gt;&amp;nbsp;- iconify 图片与文字同一行显示。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/google/iosched&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;iosched&lt;/a&gt;&amp;nbsp;- The Google I/O 2014 Android App，Android 5.0 and Material Design。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/dexafree/MaterialList&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;MaterialList&lt;/a&gt;&amp;nbsp;- MaterialList 。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://dribbble.com/search?q=material+design+card&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;material design card&lt;/a&gt;&amp;nbsp;- material design card 。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/chenyangcun/MaterialDesignExample&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;MaterialDesignExample&lt;/a&gt;&amp;nbsp;- 本APP用来演示Material Design控件的使用。&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.aswifter.com/2015/07/02/Material-Design-Example-5/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.aswifter.com/2015/07/02/Material-Design-Example-5/&lt;/a&gt;&amp;nbsp;，&amp;nbsp;&lt;a href=&quot;https://www.aswifter.com/2015/08/01/android-material-design-animation/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;使用说明&lt;/a&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/frogermcs/InstaMaterial&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;InstaMaterial&lt;/a&gt;&amp;nbsp;- InstalMaterial 项目(非常多的UI样式：ViewAnimator、RecyclerView、拍照)，&amp;nbsp;&lt;a href=&quot;http://www.jianshu.com/p/35492fb2c269&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;InstalMaterial学习笔记之Reveal效果&lt;/a&gt;&amp;nbsp;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/rudsonlive/NavigationDrawer-MaterialDesign&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;NavigationDrawer-MaterialDesign&lt;/a&gt;&amp;nbsp;- 一个Material Design的抽屉模板库，分分钟搭起一个程序框架。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/rengwuxian/MaterialEditText&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;MaterialEditText&lt;/a&gt;&amp;nbsp;- 直接继承EditText，无需修改Java文件即能实现自定义控件颜色，&amp;nbsp;&lt;a href=&quot;http://www.csdn.net/article/2014-11-21/2822753-material-design-libs&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;直接拿来用！十大Material&lt;br&gt;Design开源项目&lt;/a&gt;&amp;nbsp;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/shell-software/fab&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;fab&lt;/a&gt;&amp;nbsp;- Floating Action Button library for Android。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/linger1216/labelview&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;labelview&lt;/a&gt;&amp;nbsp;- 贴纸效果，如：淘宝商品侧贴折扣。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/kongnanlive/SearchMenuAnim&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;SearchMenuAnim&lt;/a&gt;&amp;nbsp;- 一个很棒的带动画的搜索框。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/NiaNingXue/SearchAnimation&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;SearchAnimation&lt;/a&gt;&amp;nbsp;- 一个很棒的带动画的搜索框，支持低版本。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.eoeandroid.com/thread-567299-1-1.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;快速支持emoji表情显示&lt;/a&gt;&amp;nbsp;- 让项目快速支持emojicon表情的显示，并可判断用户输入的内容中是否含有emojicon表情以及过滤掉emojicon。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/Yalantis/Context-Menu.Android&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Context-Menu.Android&lt;/a&gt;&amp;nbsp;- 可以方便快速集成漂亮带有动画效果的上下文菜单。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/RomainPiel/Titanic&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Titanic&lt;/a&gt;&amp;nbsp;- 可以显示水位上升下降的TextView。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/daimajia/AndroidSwipeLayout&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;AndroidSwipeLayout&lt;/a&gt;&amp;nbsp;- 滑动Layout，支持单个View，ListView，GridView，&amp;nbsp;&lt;a href=&quot;https://github.com/daimajia/AndroidSwipeLayout/releases/download/v1.0.0/AndroidSwipeLayout-Demo-1.0.1-snapshot.apk&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;demo-apk&lt;/a&gt;&amp;nbsp;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/norbsoft/android-typeface-helper&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;android-typeface-helper&lt;/a&gt;&amp;nbsp;- Android Typeface Helper 可以帮你轻松实现自定义字体的库。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://code.google.com/p/android-lockpattern/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;android-lockpattern&lt;/a&gt;&amp;nbsp;- Android的图案密码解锁,&amp;nbsp;&lt;a href=&quot;https://code.google.com/p/android-lockpattern/wiki/QuickUse&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;文档介绍&lt;/a&gt;&amp;nbsp;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/zcweng/ToggleButton&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;ToggleButton&lt;/a&gt;&amp;nbsp;- 状态切换的 Button，类似 iOS，用 View 实现。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/norbsoft/android-typeface-helper&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;android-typeface-helper&lt;/a&gt;&amp;nbsp;- Android Typeface Helper 可以帮你轻松实现自定义字体的库。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/TaurusXi/GuideBackgroundColorAnimation&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;GuideBackgroundColorAnimation&lt;/a&gt;&amp;nbsp;- 实现滑动ViewPager渐变背景色。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/xamarin/monodroid-samples/tree/master/android_l/Toolbar&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Toolbar&lt;/a&gt;&amp;nbsp;- Toolbar替换Android Toolbar，&amp;nbsp;&lt;a href=&quot;https://blog.xamarin.com/android-tips-hello-toolbar-goodbye-action-bar/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;说明&lt;/a&gt;&amp;nbsp;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/jpardogo/PagerSlidingTabStrip&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;PagerSlidingTabStrip&lt;/a&gt;&amp;nbsp;- 一个支持Material Design的PagerSlidingTabStrip。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/florent37/MaterialViewPager&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;MaterialViewPager&lt;/a&gt;&amp;nbsp;- 一个易于使用的 Material Design ViewPager 库。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.eoeandroid.com/thread-567853-1-1.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;PinnedListView&lt;/a&gt;&amp;nbsp;- PinnedListView悬浮Head效果修改，&amp;nbsp;&lt;a href=&quot;https://github.com/beworker/pinned-section-listview&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;github&lt;br&gt;pinned-section-listview&lt;/a&gt;&amp;nbsp;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.eoeandroid.com/thread-564018-1-1.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;APP启动引导页&lt;/a&gt;&amp;nbsp;- APP应用中最常用的APP启动引导页，常见的4种引导项目方式：splash，viewpage，viewflipper，scrollview。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/LuckyJayce/GuideHelper&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;GuideHelper&lt;/a&gt;&amp;nbsp;- 实现Android新手引导页，可以在提示也绘制实际的view，在view的上下左右位置添加提示信息的图片。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/JMPergar/AwesomeText&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;AwesomeText&lt;/a&gt;&amp;nbsp;- 简化TextViews中Spans使用的库。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/orhanobut/dialogplus&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;dialogplus&lt;/a&gt;&amp;nbsp;- 一个简单容易使用的对话框——DialogPlus。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/afollestad/material-dialogs&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;material-dialogs&lt;/a&gt;&amp;nbsp;- Material Design风格Dialogs。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/chiemy/CardView&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;CardView&lt;/a&gt;&amp;nbsp;- 3d卡片效果-国人。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/linroid/FilterMenu&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;FilterMenu&lt;/a&gt;&amp;nbsp;- 这是一个自定义的圆形菜单，效果非常酷。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/Jungerr/GridPasswordView&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;GridPasswordView&lt;/a&gt;&amp;nbsp;- 类似微信，支付宝支付时候的输入密码页面效果，带格子的密码输入框。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/Nightonke/BlurLockView&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;BlurLockView&lt;/a&gt;&amp;nbsp;- 毛玻璃效果的密码解锁界面, 支持简单定制。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/Quinny898/PersistentSearch&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;PersistentSearch&lt;/a&gt;&amp;nbsp;- 模仿Google Now, Google Maps Google Play的SearchBar，下拉列表匹配、录音。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/shehabic/Droppy&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Droppy&lt;/a&gt;&amp;nbsp;- Android 下简洁好看的 Dropdown 菜单。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/cymcsg/UltimateRecyclerView&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;UltimateRecyclerView&lt;/a&gt;&amp;nbsp;- 这是一个终极的 RecyclerView，有下拉刷新、滑动删除、拖拽、加载更多、丰富动画等功能。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/ogaclejapan/SmartTabLayout&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;SmartTabLayout&lt;/a&gt;&amp;nbsp;- SmartTabLayout实现viewpgaer页面导航效果，简化并实现android的TabHost效果，顶部滑动tab，引导页，可以自定义tab样式，过渡效果&lt;br&gt;实现网易tab，微博tab，微信tab等so easy。 集成了SpringIndicator拖拽效果 。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/tyzlmjj/PagerBottomTabStrip&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;PagerBottomTabStrip&lt;/a&gt;&amp;nbsp;- 一个基本按谷歌Material Design规范完成的安卓底部导航栏控件。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/wasabeef/richeditor-android&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;richeditor&lt;/a&gt;&amp;nbsp;- RichEditor for Android 是 Android 平台下一个所见即所得的文本编辑器控件。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/nuuneoi/StatedFragment&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;StatedFragment&lt;/a&gt;&amp;nbsp;- 保存Fragment的状态。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/lupidan/PopoverView&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;PopoverView&lt;/a&gt;&amp;nbsp;- 一个模仿iOS UIPopoverController效果的控件。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/frakbot/CreditsRoll&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;CreditsRoll&lt;/a&gt;&amp;nbsp;- 实现星球大战字幕效果。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/Rogero0o/MatchView&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;MatchView&lt;/a&gt;&amp;nbsp;- 电影级TextView动画效果，绝对惊艳你的双眼！。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/baoyongzhang/SwipeMenuListView&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;SwipeMenuListView&lt;/a&gt;&amp;nbsp;- listView侧滑删除效果：SwipeMenuListView。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/Yalantis/Side-Menu.Android&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Side-Menu.Android&lt;/a&gt;&amp;nbsp;- 分类侧滑菜单。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/xudafeng/SlidingMenu&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;SlidingMenu&lt;/a&gt;&amp;nbsp;- 炫酷侧滑菜单布局框架，iOS版本的实现：*&amp;nbsp;&lt;a href=&quot;https://github.com/xudafeng/SlideMenuView&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;SlideMenuView&lt;/a&gt;&amp;nbsp;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/bushijie/ParallaxSwipeBack&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;ParallaxSwipeBack&lt;/a&gt;&amp;nbsp;- 带视觉差的侧滑返回，类似于新版微信和lofter的侧滑返回效果。核心代码小于50行。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/LyndonChin/AndroidFlowLayout&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;AndroidFlowLayout&lt;/a&gt;&amp;nbsp;- A flow layout for Android。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/LuckyJayce/ViewPagerIndicator&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;ViewPagerIndicator&lt;/a&gt;&amp;nbsp;- 取代TabHost，实现滑动tab，引导页等效果。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/LyndonChin/AndroidScreenSlidePager&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Android-ScreenSlidePager&lt;/a&gt;&amp;nbsp;- Full screen slide pager to display images fetched from&lt;br&gt;Internet by Picasso。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/florent37/MaterialViewPager&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;MaterialViewPager&lt;/a&gt;&amp;nbsp;- MaterialViewPager。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/Yalantis/FlipViewPager.Draco&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;FlipViewPager.Draco&lt;/a&gt;&amp;nbsp;- FlipViewPager.Draco。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/siyamed/android-shape-imageview&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;android-shape-imageview&lt;/a&gt;&amp;nbsp;- 图片圆角、三角、五角、圆形、多角。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/flavienlaurent/NotBoringActionBar&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;NotBoringActionBar&lt;/a&gt;&amp;nbsp;- 隐藏图片的导航栏。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/wujingchao/MultiCardMenu&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;MultiCardMenu&lt;/a&gt;&amp;nbsp;- 仿QQ手机管家首页菜单写的一个开源组件MultiCardMenu。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/txusballesteros/fit-chart&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;fit-chart&lt;/a&gt;&amp;nbsp;- fit-chart 一个类似于谷歌健康应用的轮子（wheel view）视图，效果很不错。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/bingoogolapple/BGABadgeView-Android&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;BGABadgeView-Android&lt;/a&gt;&amp;nbsp;- Badge控件分享，各式各样的徽章控件。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/iPaulPro/Android-ItemTouchHelper-Demo&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Android-ItemTouchHelper-Demo&lt;/a&gt;&amp;nbsp;- 可拖拽 RecyclerView,&amp;nbsp;&lt;a href=&quot;http://www.devtf.cn/?p=795&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;讲解&lt;/a&gt;&amp;nbsp;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0718/3197.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;浮动操作按钮详解&lt;/a&gt;&amp;nbsp;- 讲解浮动操作按钮，从官方的和第三方库&amp;nbsp;&lt;a href=&quot;https://github.com/futuresimple/android-floating-action-button&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;makovkastar/FloatingActionButton&lt;/a&gt;&amp;nbsp;和&amp;nbsp;&lt;a href=&quot;https://github.com/makovkastar/FloatingActionButton&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;futuresimple/android-floating-action-button&lt;/a&gt;&amp;nbsp;这样的第三方库。的两方面讲解，同时还讲到了如何自定义CoordinatorLayout&lt;br&gt;Behavior。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/chiuki/advanced-textview&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;advanced-textview&lt;/a&gt;&amp;nbsp;- advanced-textview各种高级功能的textview，包括动画，阴影，各种字体，艺术字，HTML格式显示，表情等。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/lawloretienne/QuickReturn&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;QuickReturn&lt;/a&gt;&amp;nbsp;- 给几乎所有可以滑动的 View 加上快速返回的 Header 或者 Footer，使用非常方便。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/saiwu-bigkoo/Android-PickerView&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Android-PickerView&lt;/a&gt;&amp;nbsp;- 仿iOS的PickerView控件，有时间选择和选项选择并支持一二三级联动效果。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/idisfkj/idisfkj.picker&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;idisfkj.picker&lt;/a&gt;&amp;nbsp;- 滑轮选择器,&amp;nbsp;&lt;a href=&quot;https://segmentfault.com/a/1190000004595715&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;教程&lt;/a&gt;&amp;nbsp;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/yueban/DraggedViewPager&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;DraggedViewPager&lt;/a&gt;&amp;nbsp;- 可以在多个 Page 之间可以拖放元素的控件。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/Pixplicity/MultiViewPager&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;MultiViewPager&lt;/a&gt;&amp;nbsp;- 对 ViewPager 的一个扩展，Page 可宽可窄，表现很像 Gallelry。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/alamkanak/Android-Week-View&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Android-Week-View&lt;/a&gt;&amp;nbsp;- Android Week View是一种用于应用程序中显示日历的安卓库。它支持自定义样式。。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/BlackBoxVision/material-calendar-view&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;MaterialCalendarView&lt;/a&gt;&amp;nbsp;- 是一款遵循 Material Design 风格的 Android 日历。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/nomanr/WeekCalendar&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;WeekCalendar&lt;/a&gt;&amp;nbsp;- 周模式的日历自定义控件，支持 4.0 以上。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/justasm/DragLinearLayout&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;DragLinearLayout&lt;/a&gt;&amp;nbsp;- DragLinearLayout:自定义的线性布局，里面的UI可以自由拖动。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/arimorty/floatingsearchview&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;floatingsearchview&lt;/a&gt;&amp;nbsp;- floatingsearchview 一个带搜索下拉列表提示的搜索控件。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/corerzhang/LabelView&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;LabelView&lt;/a&gt;&amp;nbsp;- LabelView 一个简单的标签控件 支持自定义 文字大小（textSize）， 间距（labelTopPadding）， 背景色（backgroundColor），&lt;br&gt;和方向（direction）等。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/jonisaa/MaterialCalendarView&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;MaterialCalendarView&lt;/a&gt;&amp;nbsp;- 是一款遵循 Material Design 风格的 Android 日历。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/cnbleu/SlideDetailsLayout&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;SlideDetailsLayout&lt;/a&gt;&amp;nbsp;- SlideDetailsLayout:高仿淘宝、京东商品详情页面的上拉加载图文详情功能。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/burgessjp/MaterialDesignDemo/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;MaterialDesignDemo&lt;/a&gt;&amp;nbsp;- 基于Material Design Support Library的一个小Demo，这个Demo会慢慢的去完善，不仅仅是一个基于MD的Demo。里面会含有各种工具类，通用的一些Aadpter以及一些组件等。&amp;nbsp;&lt;a href=&quot;http://www.jianshu.com/p/740c64ba15ac&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Android自定义View之高仿QQ健康&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/CymChad/BaseRecyclerViewAdapterHelper&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;BaseRecyclerViewAdapterHelper&lt;/a&gt;&amp;nbsp;- 集成了RecyclerViewAdapter的常用功能的基类，大量减少Adapter写的代码，轻松添加点击事件、添加RecyclerView加载动画、新增添加头部、添加尾部、新增下拉刷新、上拉加载更多、新增分组、自定义item类型。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/aurelhubert/ahbottomnavigation&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;ahbottomnavigation&lt;/a&gt;&amp;nbsp;- 一个仿 Material Bottom Navigation 的类库。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/sfsheng0322/StickyHeaderListView&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;StickyHeaderListView&lt;/a&gt;&amp;nbsp;- 功能强大的StickyHeaderListView：标题渐变、吸附悬停、筛选分类、动态头部等。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;卫星菜单&quot;&gt;&lt;a href=&quot;#卫星菜单&quot; class=&quot;headerlink&quot; title=&quot;卫星菜单&quot;&gt;&lt;/a&gt;卫星菜单&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/siyamed/android-satellite-menu&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;android-satellite-menu&lt;/a&gt;&amp;nbsp;- 点击主按钮，会弹出多个围绕着主按钮排列的子按钮，从而形成一个弹出式菜单。子按钮弹出和消失的动画效果都很棒。这种弹出式菜单按钮应用在Path&lt;br&gt;app中。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/daCapricorn/ArcMenu&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;ArcMenu&lt;/a&gt;&amp;nbsp;- 实现弹出式按钮群（菜单）。点击主按钮，会在住按钮旁边弹出多个按钮（菜单）。弹出的按钮有两种排列形式，一种是围绕着主按钮成圆弧形排列，一种是和主按钮并排成一字型排列， 仿Path&lt;br&gt;2.0 (for iOS)。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://d.apkbus.com/android/Radial-Menu-Widget/52405aca6803fa2822000002&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Radial Menu Widget&lt;/a&gt;&amp;nbsp;- 实现各种圆形或者半圆形菜单，以及圆形进度条。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/markushi/android-circlebutton&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;android-circlebutton&lt;/a&gt;&amp;nbsp;- 圆形按钮，有动画点击效果。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/oguzbilgener/CircularFloatingActionMenu&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;CircularFloatingActionMenu&lt;/a&gt;&amp;nbsp;- 卫星菜单。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Tibolte/ElasticDownload&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;ElasticDownload&lt;/a&gt;&amp;nbsp;- 挺酷的下载进度条。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/xmuSistone/android-snake-menu&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;android-snake-menu&lt;/a&gt;&amp;nbsp;- 仿 Tumblr 的 Android 可拖拽蛇形动画菜单。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;节选器&quot;&gt;&lt;a href=&quot;#节选器&quot; class=&quot;headerlink&quot; title=&quot;节选器&quot;&gt;&lt;/a&gt;节选器&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/hehonghui/SegmentView&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;SegmentView&lt;/a&gt;&amp;nbsp;- 类似iOS的Segment Control控件，第一种方式是使用 RadioGroup 实现，O网页链接。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/7heaven/SHSegmentControl&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;SHSegmentControl&lt;/a&gt;&amp;nbsp;- 类似iOS的Segment Control控件，此种方式的可定制化更好。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/vinc3m1/android-segmentedradiobutton&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;android-segmentedradiobutton&lt;/a&gt;&amp;nbsp;- 在Android中实现类似iOS的分段单选按钮（segmented control），本人以前项目一直使用，值得拥有。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Kaopiz/android-segmented-control&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;android-segmented-control&lt;/a&gt;&amp;nbsp;- RadioGroup实现类似ios的分段选择(UISegmentedControl)控件。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;下拉刷新&quot;&gt;&lt;a href=&quot;#下拉刷新&quot; class=&quot;headerlink&quot; title=&quot;下拉刷新&quot;&gt;&lt;/a&gt;下拉刷新&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/desmond1121/Android-Ptr-Comparison&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Android-Ptr-Comparison&lt;/a&gt;&amp;nbsp;- Android 下拉刷新开源库对比，非常nice！！&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/chrisbanes/Android-PullToRefresh&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Android-PullToRefresh&lt;/a&gt;&amp;nbsp;- 最经典、最多人用的下拉刷新、加载更多。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/guojunyi/PullDownListView&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;PullDownListView&lt;/a&gt;&amp;nbsp;- 一个下拉刷新的控件，实现了仿微信下拉中眼睛动画的效果。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/chenupt/DragTopLayout&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;DragTopLayout&lt;/a&gt;&amp;nbsp;- 实现整个layout下拉刷新。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/zarics/ZrcListView&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;ZrcListView&lt;/a&gt;&amp;nbsp;- 一个顺滑又漂亮的Android下拉刷新与加载更多列表组件，增加下拉刷新及滚动到底部自动加载的功能；增加越界回弹效果；增加自定义列表项动画的功能。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cyndibaby905/TwitterCover-Android&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;TwitterCover-Android&lt;/a&gt;&amp;nbsp;- Twitter Android客户端的下拉封面模糊效果。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/liaohuqiu/android-Ultra-Pull-To-Refresh&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;android-Ultra-Pull-To-Refresh&lt;/a&gt;&amp;nbsp;- 实现整个layout下拉刷新，没有加载更过，&amp;nbsp;&lt;a href=&quot;https://github.com/android-cn/android-open-project-demo/tree/master/android-ultra-pull-to-refresh-demo&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Demo&lt;/a&gt;，&amp;nbsp;&lt;a href=&quot;http://codekk.com/open-source-project-analysis/detail/Android/Grumoon/android-Ultra-Pull-To-Refresh%20%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;源码分析&lt;/a&gt;&amp;nbsp;。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/carlonzo/StikkyHeader&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;StikkyHeader&lt;/a&gt;&amp;nbsp;- 【Android控件源码：头部固定的控件列表效果】这是一个可以支持头部固定的控件列表功能，源码StikkyHeader，StikkyHeader是一个可以在滚动的时候将头部固定的控件，还可以将动画效果和StikkyHeader一起使用，api非常简单，&lt;br&gt;支持ListView,RecyclerView,ScrollView。&amp;nbsp;&lt;a href=&quot;https://github.com/yangwuan55/StikkyHeader&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;支持2.3一下设备使用的StikkyHeader&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/guojunyi/PullDownListView&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;PullDownListView&lt;/a&gt;&amp;nbsp;- 实现了模仿微信眼睛下拉效果，源码PullDownListView，下拉刷新，上拉加载，模仿微信眼睛。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/tuesda/CircleRefreshLayout&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;CircleRefreshLayout&lt;/a&gt;&amp;nbsp;- 又一个下拉刷新的实现，水滴效果。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/bingoogolapple/BGARefreshLayout-Android&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;BGARefreshLayout-Android&lt;/a&gt;&amp;nbsp;- 多种下拉刷新效果、上拉加载更多、可配置自定义头部广告位，目前已经实现了四种下拉刷新效果:新浪微博下拉刷新风格、慕课网下拉刷新风格、美团下拉刷新风格、类似qq好友列表黏性下拉刷新风格。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Yalantis/Phoenix&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Pull-to-Refresh.Rentals-Android&lt;/a&gt;&amp;nbsp;- 提供一个简单可以自定义的下拉刷新实现。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Yalantis/Taurus&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Pull-to-Refresh.Tours&lt;/a&gt;&amp;nbsp;- Taurus，很精美的下拉刷新。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Gnod/ParallaxListView&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;ParallaxListView&lt;/a&gt;&amp;nbsp;- 模仿Path的下拉刷新，Head头部图片下拉放大。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/alienjun/AJWaveRefreshForAndroid&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;WaveRefreshForAndroid&lt;/a&gt;&amp;nbsp;- 下拉刷新水波纹动画。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/sungerk/CoordinatorLayoutDemos&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;CoordinatorLayoutDemos&lt;/a&gt;&amp;nbsp;- 收集了不少资源写了一个基于CoordinatorLayout实现的下拉刷新效果。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/TellH/Android_PullToRefreshLibrary_Collection&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Android_PullToRefreshLibrary_Collection&lt;/a&gt;&amp;nbsp;- 下拉刷新开源库集锦 。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Hitomis/HitBlockRefresh&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;HitBlockRefresh&lt;/a&gt;&amp;nbsp;- 下拉刷新：打砖块和打坦克。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;模糊效果&quot;&gt;&lt;a href=&quot;#模糊效果&quot; class=&quot;headerlink&quot; title=&quot;模糊效果&quot;&gt;&lt;/a&gt;模糊效果&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/charbgr/BlurNavigationDrawer&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;BlurNavigationDrawer&lt;/a&gt;&amp;nbsp;- 背景模糊的Navigation Drawer。&amp;nbsp;&lt;/p&gt;
&lt;p&gt;HUD与Toast&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/liaohuqiu/android-UCToast&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;android-UCToast&lt;/a&gt;&amp;nbsp;- 在不申请任何权限的情况下在 Android 应用中弹出悬浮窗,&amp;nbsp;&lt;a href=&quot;http://gold.xitu.io/entry/5626f73960b25974a0e5e57c&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;实现文档&lt;/a&gt;&amp;nbsp;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/pedant/sweet-alert-dialog&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;sweet-alert-dialog&lt;/a&gt;&amp;nbsp;- sweet-alert-dialog是一款清新文艺的 Android 弹窗, 灵感来自于 JS 版的 SweetAlert。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;进度条&quot;&gt;&lt;a href=&quot;#进度条&quot; class=&quot;headerlink&quot; title=&quot;进度条&quot;&gt;&lt;/a&gt;进度条&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/DevinShine/easyloadingbtn&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;easyloadingbtn&lt;/a&gt;&amp;nbsp;- 模仿了一个Dribbble上的Material Design效果，环形loading， 进度条、进度圈。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/mrwonderman/android-square-progressbar&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;android-square-progressbar&lt;/a&gt;&amp;nbsp;- 一个不错的方形进度条。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://d.apkbus.com/android/Radial-Menu-Widget/52405aca6803fa2822000002&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Radial Menu Widget&lt;/a&gt;&amp;nbsp;- 实现各种圆形或者半圆形菜单，以及圆形进度条。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jlmd/AnimatedCircleLoadingView&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;AnimatedCircleLoadingView&lt;/a&gt;&amp;nbsp;- 一个有限／无限加载动画效果。基于Nils Banner的android-watch-loading-animation设计图。该设计本来是针对智能手表的。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/dmytrodanylyk/circular-progress-button&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;circular-progress-button&lt;/a&gt;&amp;nbsp;- 带动态效果的Button(按钮)可要比静态的按钮炫酷的多了，大家看到效果图就知道了。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/OrangeGangsters/CircularBarPager&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;CircularBarPager&lt;/a&gt;&amp;nbsp;- Android实现的动态效果，一个数字圆圈进度效果，源码CircularBarPager，material 风格的数字圆圈进度显示库（api10&lt;br&gt;+）。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/igortrncic/dotted-progress-bar&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;dotted-progress-bar&lt;/a&gt;&amp;nbsp;- 一个小清新的进度条。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Kyson/WhorlView&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;WhorlView&lt;/a&gt;&amp;nbsp;- 一个炫酷的漩涡加载效果自定义View。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/81813780/AVLoadingIndicatorView&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;AVLoadingIndicatorView&lt;/a&gt;&amp;nbsp;- AVLoadingIndicatorView整合了一些漂亮的 Android 动画加载效果。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/lingochamp/MagicProgressWidget&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;MagicProgressWidget&lt;/a&gt;&amp;nbsp;- 渐变的圆形进度条与轻量横向进度条。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/edanel/GBSlideBar&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;GBSlideBar&lt;/a&gt;&amp;nbsp;- GBSlideBar类似uber/滴滴等app的滑动选择工具条。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Rogero0o/GifLoadingView&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;GifLoadingView&lt;/a&gt;&amp;nbsp;- 一些好看的 loadingview。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/BaymaxTong/HouseLoading&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;HouseLoading&lt;/a&gt;&amp;nbsp;- 一个有趣的android加载loading动画。&amp;nbsp;&lt;a href=&quot;https://segmentfault.com/a/1190000004997743&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;实现原理&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;UI其他&quot;&gt;&lt;a href=&quot;#UI其他&quot; class=&quot;headerlink&quot; title=&quot;UI其他&quot;&gt;&lt;/a&gt;UI其他&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/hongyangAndroid/MixtureTextView&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;MixtureTextView&lt;/a&gt;&amp;nbsp;- 富文本，支持Android图文混排、文字环绕图片等效果。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/liaohuqiu/android-ActionQueue&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;android-ActionQueue&lt;/a&gt;&amp;nbsp;- Action Queue 用于执行有次序的队列操作，比如按次序弹出对话框，这在 Android 中尤其有用。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/lantouzi/WheelView-Android&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;WheelView-Android&lt;/a&gt;&amp;nbsp;- WheelView-Android 是一款开源的 Android 滚动选择控件, 适用于不少应用场景。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://code.google.com/archive/p/android-wheel&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Android Wheel&lt;/a&gt;&amp;nbsp;- 带有刻度的旋转器：日历、三级联动。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/alafighting/CharacterPickerView&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;CharacterPickerView&lt;/a&gt;&amp;nbsp;- 可实现三级联动的选择器，高仿iOS的滚轮控件,可实现单项选择，并支持一二三级联动效果。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/hongyangAndroid/Highlight&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Highlight&lt;/a&gt;&amp;nbsp;- Highlight一款可应用于 Android 应用上的指向性功能高亮的库, 可以快速的给应用添加上应用引导的效果。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cundong/HeaderAndFooterRecyclerView&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;HeaderAndFooterRecyclerView&lt;/a&gt;&amp;nbsp;- 支持addHeaderView、 addFooterView、分页加载的RecyclerView解决方案&lt;br&gt;。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/luckyandyzhang/CleverRecyclerView&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;CleverRecyclerView&lt;/a&gt;&amp;nbsp;- 是一个基于RecyclerView的扩展库，提供了与ViewPager类似的滑动效果并且添加了一些有用的特性。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/afollestad/drag-select-recyclerview&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;drag-select-recyclerview&lt;/a&gt;&amp;nbsp;- 实现了类似 Google Photos 风格的图片多选效果。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/H07000223/FlycoTabLayout&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;FlycoTabLayout&lt;/a&gt;&amp;nbsp;- 一个Android TabLayout库,目前有两个TabLayout:SlidingTabLayout、CommonTabLayout。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/hongyangAndroid/AndroidChangeSkin&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;AndroidChangeSkin&lt;/a&gt;&amp;nbsp;- 一种完全无侵入的 Android 应用换肤方式，支持插件式和应用内换肤，无需重启 Activity。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/LarsWerkman/Lobsterpicker&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Lobsterpicker&lt;/a&gt;&amp;nbsp;- Lobsterpicker 为 Android 开发者提供了满足 Material Design 风格的颜色选择器。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/H07000223/FlycoRoundView&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;FlycoRoundView&lt;/a&gt;&amp;nbsp;- 一个扩展原生控件支持圆角矩形框背景的库,可以减少相关shape资源文件使用。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/mxn21/FlowingDrawer&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;FlowingDrawer&lt;/a&gt;&amp;nbsp;- FlowingDrawer 一个弹性效果的抽屉菜单，图片是概念图，实际效果实现了70%（侧滑菜单）。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/elevenetc/TextSurface&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;TextSurface&lt;/a&gt;&amp;nbsp;-是用 Java 写的一款借助酷炫的动画效果来完成消息展示的微型动画框架。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/xmuSistone/android-animate-RichEditor&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;android-animate-RichEditor&lt;/a&gt;&amp;nbsp;-android-animate-RichEditor是一款支持图片插入动画效果的 Android 富文本编辑器。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/H07000223/FlycoPageIndicator&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;FlycoPageIndicator&lt;/a&gt;&amp;nbsp;- android-animate-RichEditor是一款支持图片插入动画效果的 Android 富文本编辑器。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/adhamenaya/AndroidMosaicLayout&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;AndroidMosaicLayout&lt;/a&gt;&amp;nbsp;- 马赛克效果 Layout,磁片风格View 自适应大小。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/dongjunkun/DropDownMenu&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;DropDownMenu&lt;/a&gt;&amp;nbsp;- 一个实用的多条件筛选菜单，在很多App上都能看到这个效果，如美团，爱奇艺电影票等。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/aaronbond/Swipe-Deck&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Swipe-Deck&lt;/a&gt;&amp;nbsp;- 仿 Tinder 的可以左右滑动消除卡片效果的自定义控件。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Rimoto/IntlPhoneInput&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;IntlPhoneInput&lt;/a&gt;&amp;nbsp;- 一个支持国际化的电话号码输入的自定义控件。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/linfaxin/AndroidUI-WebApp&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;AndroidUI4Web&lt;/a&gt;&amp;nbsp;- AndroidUI4Web是一个高性能的WebApp框架, 在移动浏览器上有与原生App一致的体验。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/andyxialm/SmoothCheckBox&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;SmoothCheckBox&lt;/a&gt;&amp;nbsp;- SmoothCheckBox带有切换动画的CheckBox。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/anyunzhong/AndroidTimelineViewx&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;AndroidTimelineViewx&lt;/a&gt;&amp;nbsp;- AndroidTimelineViewx仿微信朋友圈 时间轴。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/zaaach/CityPicker&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;CityPicker&lt;/a&gt;&amp;nbsp;- CityPicker仿美团等选择城市列表。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/HeinrichReimer/material-intro&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;material-intro&lt;/a&gt;&amp;nbsp;- Material Design 风格的引导页。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/athkalia/EmphasisTextView&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;EmphasisTextView&lt;/a&gt;&amp;nbsp;- 支持部分文字高亮的 TextView。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/500px/greedo-layout-for-android&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;greedo-layout-for-android&lt;/a&gt;&amp;nbsp;- 深度定制的 LayoutManager，在显示网格布局的时候会考虑屏幕宽高比。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Karumi/Rosie&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Rosie&lt;/a&gt;&amp;nbsp;- 可以让你创建遵循 Clean Architecture 的应用的框架。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cooltechworks/CreditCardView&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;CreditCardView&lt;/a&gt;&amp;nbsp;- 一个交互很赞的信用卡自定义 View。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/henrytao-me/android-md-core&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;android-md-core&lt;/a&gt;&amp;nbsp;- Material风格bootstrap的框架。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/xiepeijie/SwipeCardView&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;SwipeCardView&lt;/a&gt;&amp;nbsp;- 一个带渐变层叠动画的左右滑动效果（类似于探探左右刷脸）。&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/roughike/SwipeSelector&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;SwipeSelector&lt;/a&gt;&amp;nbsp;- 可以左右滑动切换 item 的 Selector。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Commit451/ForegroundViews&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;ForegroundViews&lt;/a&gt;&amp;nbsp;- 类似于 FrameLayout 的支持的前景自定义 View。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/DoodleScheduling/android-material-chips&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;android-material-chips&lt;/a&gt;&amp;nbsp;- Material Design 的 Chips 控件实现。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/w446108264/XhsEmoticonsKeyboard&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;XhsEmoticonsKeyboard&lt;/a&gt;&amp;nbsp;- 表情键盘解决方案。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Jacksgong/JKeyboardPanelSwitch&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;JKeyboardPanelSwitch&lt;/a&gt;&amp;nbsp;- 一套 Android 键盘面板冲突, 布局闪动的处理方案。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/leoliuzhou/GestureLibray&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;GestureLibray&lt;/a&gt;&amp;nbsp;- 九宫格解锁。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/dinuscxj/RecyclerItemDecoration&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;RecyclerItemDecoration&lt;/a&gt;&amp;nbsp;- RecyclerView相关的ItemDecorstion仍然保持高度定制性，易用性。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/sourcey/materiallogindemo&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;materiallogindemo&lt;/a&gt;&amp;nbsp;- 一个炫酷的Material Design 风格的登录和注册页面 。&amp;nbsp;&lt;a href=&quot;http://tikitoo.github.io/2016/05/17/beautiful-android-login-and-signup-screens-with-material-design-zh/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;教程&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;动画&quot;&gt;&lt;a href=&quot;#动画&quot; class=&quot;headerlink&quot; title=&quot;动画&quot;&gt;&lt;/a&gt;动画&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.csdn.net/yanbober/article/details/46481171&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Android应用开发之所有动画使用详解&lt;/a&gt;&amp;nbsp;- Android应用开发之所有动画使用详解。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.eoeandroid.com/thread-562739-1-1.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;动画特效大全&lt;/a&gt;&amp;nbsp;- Android 动画特效大全。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.csdn.net/jay100500/article/details/42227365&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;SwitchLayout&lt;/a&gt;&amp;nbsp;- 国内开发者， Android的Activity切换动画特效库SwitchLayout，视图切换动画库，媲美IOS。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/tianzhijiexian/ActivityOptionsICS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;ActivityOptionsICS&lt;/a&gt;&amp;nbsp;- 一个低版本activity动画兼容库——ActivityOptionsICS，可以很好的实现MD的动画效果。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/liuguangqiang/SwipeBack&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;SwipeBack&lt;/a&gt;&amp;nbsp;- 一个可以通过手势返回到上一个Activity的开源库，支持上下左右四个方向返回，支持多个View为Child。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/chenupt/SpringIndicator&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;SpringIndicator&lt;/a&gt;&amp;nbsp;- 模仿Morning Routine的引导页效果SpringIndicator；基于模仿红点拖拽的Demo实现：&amp;nbsp;&lt;a href=&quot;https://github.com/chenupt/BezierDemo&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;BezierDemo&lt;/a&gt;&amp;nbsp;；sample中使用到&lt;br&gt;快速创建ViewPager和ListView等的第三方库：&amp;nbsp;&lt;a href=&quot;https://github.com/chenupt/MultipleModel&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;MultipleModel&lt;/a&gt;&amp;nbsp;。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/w446108264/XhsWelcomeAnim&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;XhsWelcomeAnim&lt;/a&gt;&amp;nbsp;- 国内开发者， 华丽酷炫欢迎引导界面 动画没有之一。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/lgvalle/Material-Animations&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Material-Animations&lt;/a&gt;&amp;nbsp;- Material风格动画，可以定义两个Activity之间的动画。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/zzz40500/android-shapeLoadingView&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;android-shapeLoadingView&lt;/a&gt;&amp;nbsp;- android-shapeLoadingView实现高仿新版58 加载动画，loading。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.csdn.net/tianjian4592/article/details/44538605&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;一个绚丽的loading&lt;/a&gt;&amp;nbsp;- 一个绚丽的loading动效分析与实现。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/linfaxin/TransitionPlayer&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;TransitionPlayer&lt;/a&gt;&amp;nbsp;- 一个 Transition 动画控制控制库，可以让你很轻松的创建一个可交互的动画。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/glomadrian/loading-balls&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;loading-balls&lt;/a&gt;&amp;nbsp;- loading-balls 一款支持高度配置的 Android 加载进度球。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/dengshiwei/SogoLoading&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;SogoLoading&lt;/a&gt;&amp;nbsp;- 仿搜狗浏览器加载动画，&amp;nbsp;&lt;a href=&quot;http://blog.csdn.net/mr_dsw/article/details/49026531&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;实现说明&lt;/a&gt;&amp;nbsp;。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/tyrantgit/ExplosionField&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;ExplosionField&lt;/a&gt;&amp;nbsp;- Android中View 炸裂特效的&amp;nbsp;&lt;a href=&quot;http://blog.csdn.net/feelang/article/details/48817145&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;实现分析&lt;/a&gt;&amp;nbsp;。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Xieyupeng520/AZExplosion&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;AZExplosion&lt;/a&gt;&amp;nbsp;- AZExplosion：模仿ExplosionField的粒子破碎效果。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/zhanyongsheng/BrokenView&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;BrokenView&lt;/a&gt;&amp;nbsp;-玻璃碎裂动画效果。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/xiepeijie/SwipeCardView&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;SwipeCardView&lt;/a&gt;&amp;nbsp;- SwipeCardView一个带渐变层叠动画的左右滑动效果（类似于探探左右刷脸）。&amp;nbsp;&lt;a href=&quot;https://github.com/Diolor/Swipecards&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;类似SwipeCard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Cleveroad/WaveInApp&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;CRAudioVisualizationView&lt;/a&gt;&amp;nbsp;- 水波纹效果的声音可视化自定义 View。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/dinuscxj/LoadingDrawable&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;LoadingDrawable&lt;/a&gt;&amp;nbsp;- 一些酷炫的加载动画， 可以与任何View配合使用，作为加载动画或者Progressbar, 此外很适合与RecyclerRefreshLayout&lt;br&gt;配合使用作为刷新的loading 动画。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/danielzeller/Depth-LIB-Android-&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Depth-LIB-Android-&lt;/a&gt;&amp;nbsp;- 一款酷炫的 Android 界面过渡动画效果。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;网络相关&quot;&gt;&lt;a href=&quot;#网络相关&quot; class=&quot;headerlink&quot; title=&quot;网络相关&quot;&gt;&lt;/a&gt;网络相关&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/koush/ion&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;ion&lt;/a&gt;&amp;nbsp;- 一个异步网络请求和图片加载的库，一个库能搞定几乎所有的网络请求。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.eoeandroid.com/thread-564501-1-1.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;多线程下载&lt;/a&gt;&amp;nbsp;- Android 实现多线程下载 完美代码。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/openpeer/opandroid&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;opandroid&lt;/a&gt;&amp;nbsp;- android p2p的开源实现。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/square/okio&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;okio&lt;/a&gt;&amp;nbsp;- square出的Okio这个库，尤其擅长处理二进制数据。如果觉得Java的输入输出流实在太复杂啰嗦，不妨试试Okio。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/square/okhttp&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;okhttp&lt;/a&gt;&amp;nbsp;- square出的okhttp库。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ZhaoKaiQiang/OkHttpPlus&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;OkHttpPlus&lt;/a&gt;&amp;nbsp;- OkHttp 的一个工具类开源项目OkHttpPlus——支持GET、POST、UI线程回调、JSON格式解析、链式调用、文件上传下载 ，&amp;nbsp;&lt;a href=&quot;http://blog.csdn.net/zhaokaiqiang1992/article/details/50016815&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;OkHttpPlus介绍&lt;/a&gt;&amp;nbsp;。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/majidgolshadi/Android-Download-Manager-Pro&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Android-Download-Manager-Pro&lt;/a&gt;&amp;nbsp;- 一个下载管理库，如果你的 App 有大量的下载工作，这个库能帮到你。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/lingochamp/FileDownloader&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;FileDownloader&lt;/a&gt;&amp;nbsp;- 文件下载引擎，稳定、高效、简单易用。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jpush/jchat-android&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;jchat-android&lt;/a&gt;&amp;nbsp;- 一个聊天 App,具有完备的即时通讯功能,JChat 的功能基于极光 JMessage SDK 来开发。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;网络测试&quot;&gt;&lt;a href=&quot;#网络测试&quot; class=&quot;headerlink&quot; title=&quot;网络测试&quot;&gt;&lt;/a&gt;网络测试&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/facebook/augmented-traffic-control&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;augmented-traffic-control&lt;/a&gt;&amp;nbsp;- Facebook宣布开源移动网络测试工具ATC，该工具支持利用Wi-Fi网络模拟2G、2.5G、3G以及LTE&lt;br&gt;4G移动网络环境，让测试工程师们能够快速对智能手机和App在不同国家地区和应用环境下的性能表现进行测试。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;图像获取&quot;&gt;&lt;a href=&quot;#图像获取&quot; class=&quot;headerlink&quot; title=&quot;图像获取&quot;&gt;&lt;/a&gt;图像获取&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/bumptech/glide&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;glide&lt;/a&gt;&amp;nbsp;- glide google出品，使用教程、&amp;nbsp;&lt;a href=&quot;https://github.com/florent37/GlidePalette&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;GlidePalette&lt;/a&gt;&amp;nbsp;。&amp;nbsp;&lt;a href=&quot;https://github.com/xitu/gold-miner/blob/master/TODO/Top-5-Android-libraries-every-Android-developer-should-know-about.md&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;5&lt;br&gt;个顶级 Android 开源库&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/nostra13/Android-Universal-Image-Loader&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Universal Image Loader&lt;/a&gt;&amp;nbsp;- Universal Image Loader 是一个强大的、可高度定制的图片缓存，简称：UIL，可以高度配置的网络图片缓存库，非常灵活，用户量最多&lt;br&gt;。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/square/picasso&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;picasso&lt;/a&gt;&amp;nbsp;- picasso 功能单一，没有缓存过期，同androidQuery一样链式调用，载入本地文件速度慢（没有生成thumbnails） ,&amp;nbsp;&lt;a href=&quot;http://donal-tong.github.io/blog/2014/05/21/picasso-and-auil/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Picasso&lt;br&gt;and Android-Universal-Image-Loader&lt;/a&gt;&amp;nbsp;,另外的一些诸如裁剪图片：Picasso.with(context) .load(url) .resize(50, 50) .centerCrop() .into(imageView)。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/facebook/fresco&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;fresco&lt;/a&gt;&amp;nbsp;- Facebook 又放出的一个新项目，一个类似 Picasso, Glide 的库，不过比他们做的更好。 强烈推荐！［Fresco集成示例］（&amp;nbsp;&lt;a href=&quot;https://github.com/liaohuqiu/fresco-demo-for-gradle%EF%BC%89%E3%80%82&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/liaohuqiu/fresco-demo-for-gradle）。&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://square.github.io/tape/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;tape&lt;/a&gt;&amp;nbsp;- 类似于图片加载库（例如UIL、Picasso等）实现异步加载，但是加载的不一定是图片。！&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/novoda/image-loader&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;ImageLoader&lt;/a&gt;&amp;nbsp;- ImageLoader 。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/mcxiaoke/android-volley&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Volley&lt;/a&gt;&amp;nbsp;- Volley 综合框架,包含图片部分，&amp;nbsp;&lt;a href=&quot;http://blog.happyhls.me/2014/11/27/volley%E4%B8%8Epicasso%E7%9A%84%E5%AF%B9%E6%AF%94/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Volley与Picasso的对比&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Tim9Liu9/TimLiu-Android/blob/master/code.google.com/p/enif&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;enif&lt;/a&gt;&amp;nbsp;- enif 。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/wqandroid/wqgallery&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;wqgallery&lt;/a&gt;&amp;nbsp;- wqgallery实现类似微信选择照片功能，可以通过相机或相册选择，支持单张裁剪，支持单选模式、支持多选模式。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/alexclin0188/httplite&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;httplite&lt;/a&gt;&amp;nbsp;- A android http library。&amp;nbsp;&lt;a href=&quot;http://www.jianshu.com/p/db66b49ec974&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Android网络框架httplite使用指南&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;响应式编程&quot;&gt;&lt;a href=&quot;#响应式编程&quot; class=&quot;headerlink&quot; title=&quot;响应式编程&quot;&gt;&lt;/a&gt;响应式编程&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ReactiveX/RxAndroid/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;RxAndroid&lt;/a&gt;&amp;nbsp;- RxAndroid：函数响应式编程 ，&amp;nbsp;&lt;a href=&quot;https://github.com/mcxiaoke/RxDocs&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;RxJava&lt;/a&gt;&amp;nbsp;-&lt;br&gt;Rx和RxJava文档中文翻译项目,&amp;nbsp;&lt;a href=&quot;http://gank.io/post/560e15be2dca930e00da1083&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;RxJava 详解&lt;/a&gt;&amp;nbsp;，&amp;nbsp;&lt;a href=&quot;https://github.com/lzyzsd/Awesome-RxJava&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;RxJava资料汇总&lt;/a&gt;&amp;nbsp;。&amp;nbsp;&lt;a href=&quot;http://alighters.com/blog/2016/05/02/rxjava-plus-retrofitshi-xian-wang-luo-dai-li/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Rxjava+Retrofit&lt;br&gt;实现全局过期 Token 自动刷新&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;地图&quot;&gt;&lt;a href=&quot;#地图&quot; class=&quot;headerlink&quot; title=&quot;地图&quot;&gt;&lt;/a&gt;地图&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.eoeandroid.com/thread-568507-1-1.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;百度地图&lt;/a&gt;&amp;nbsp;- Android百度地图 线路规划，模拟运动轨迹，及全景效果。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/airbnb/AirMapView&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;AirMapView&lt;/a&gt;&amp;nbsp;- 支持多个本地地图提供者包括谷歌地图V2和亚马逊地图V2。如果设备没有任何受支持的本地地图提供者,AirMapView会回退到基于web的地图提供者(目前谷歌地图)。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;数据库&quot;&gt;&lt;a href=&quot;#数据库&quot; class=&quot;headerlink&quot; title=&quot;数据库&quot;&gt;&lt;/a&gt;数据库&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://ormlite.com/sqlite_java_android_orm.shtml&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;ORMLite&lt;/a&gt;&amp;nbsp;- ORMLite做的最棒但是学习成本有点儿高，ORMLite的文档有点儿烂。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://satyan.github.io/sugar/index.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;SugarORM&lt;/a&gt;&amp;nbsp;- SugarORM比较轻便， 支持Has a 和 Has many映射，但无法保存集合，没有映射关系。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://greenrobot.org/greendao/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;GreenDAO&lt;/a&gt;&amp;nbsp;- GreenDAO要先建立一个java项目来生成对应的表，一变动又要生成，很不方便。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/pardom/ActiveAndroid&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;ActiveDriod&lt;/a&gt;&amp;nbsp;- ActiveDriod也不错&amp;nbsp;&lt;a href=&quot;http://www.activeandroid.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;官网&lt;/a&gt;&amp;nbsp;。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/roscopeco/ormdroid&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;ORMDroid&lt;/a&gt;&amp;nbsp;- ormdroid 。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/square/sqlbrite&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;sqlbrite&lt;/a&gt;&amp;nbsp;- 良心企业Square的又一开源项目，当你不想给用ContentProvider，只想简单监听SQLite表增删改的数据变更时可以试试它。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/LuckyJayce/DBExecutor&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;sqlbrite&lt;/a&gt;&amp;nbsp;- DBExecutor android ORM数据库 1.使用了读写锁，支持多线程操作数据。 2.支持操作多个数据库 3.支持事务 4.缓存Sql，缓存表结构。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/FabianTerhorst/Iron&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Iron&lt;/a&gt;&amp;nbsp;- 一个快速和易用的 NoSQL 数据存储框架。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/orhanobut/hawk&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;hawk&lt;/a&gt;&amp;nbsp;- 一个快速和易用的键值对数据存储框架，支持AES加密，支持SharedPreferences或Sqlite存储，支持Gson解析。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/lusfold/AndroidKeyValueStore&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;AndroidKeyValueStore&lt;/a&gt;&amp;nbsp;- 一个基于 SQLite 的 Key/Value 存储框架。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Raizlabs/DBFlow&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;DBFlow&lt;/a&gt;&amp;nbsp;- 一个速度极快，功能强大，而且非常简单的 Android 数据库 ORM 库，为你编写数据库代码,DBFlow 已被证明是最好的解决方案。&amp;nbsp;&lt;a href=&quot;https://github.com/xitu/gold-miner/blob/master/TODO/Top-5-Android-libraries-every-Android-developer-should-know-about.md&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;5&lt;br&gt;个顶级 Android 开源库&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;图像浏览及处理&quot;&gt;&lt;a href=&quot;#图像浏览及处理&quot; class=&quot;headerlink&quot; title=&quot;图像浏览及处理&quot;&gt;&lt;/a&gt;图像浏览及处理&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ggchxx/MPAndroidChart&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;MPAndroidChart&lt;/a&gt;&amp;nbsp;- MPAndroidChart是一个功能强大的图表开源类库：曲线图、柱形图、环形图。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/xcltapestry/XCL-Charts&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;XCL-Charts&lt;/a&gt;&amp;nbsp;- (国人开发)基于Android Canvas来绘制各种图表,使用简便,定制灵活。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/diogobernardino/WilliamChart&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;WilliamChart&lt;/a&gt;&amp;nbsp;- 绘制图表的库，支持LineChartView、BarChartView和StackBarChartView三中图表类型，并且支持 Android&lt;br&gt;2.2及以上的系统。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cesards/CropImageView&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;CropImageView&lt;/a&gt;&amp;nbsp;- 原生ImageView只支持centerCrop，这里有支持9个方向裁剪的ImageView。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/IsseiAoki/SimpleCropView&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;SimpleCropView&lt;/a&gt;&amp;nbsp;- 一个Android的图片裁剪库，使用简单，易于定制。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/PaNaVTEC/DrawableView&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;DrawableView&lt;/a&gt;&amp;nbsp;- DrawableView实现画板功能，可以改变画笔粗细，颜色，支持撤销功能。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/dolphinwang/ImageCoverFlow&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;ImageCoverFlow&lt;/a&gt;&amp;nbsp;- ImageCoverFlow效果不错的画廊控件 可以设置画廊一次可见图片的张数，和其他第三方Gallery控件不同的是，该控件直接继承自View，而不是sdk中的Gallery控件。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/davidschreiber/FancyCoverFlow&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;FancyCoverFlow&lt;/a&gt;&amp;nbsp;- 支持Item切换动画效果的类似Gallery View。&amp;nbsp;&lt;a href=&quot;https://github.com/LittleLiByte/GlFancyCoverFlow&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;改进版本&lt;/a&gt;&amp;nbsp;可以无限轮播，可以选择自动轮播或者&lt;br&gt;手动滑动。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/bingoogolapple/BGABanner-Android&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;BGABanner-Android&lt;/a&gt;&amp;nbsp;- demo中演示了引导页、以及通过fresco、android-async-http、gson实现广告条的自动轮播效果（splash&lt;br&gt;、 ViewPager切换动画） 。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/lsjwzh/RecyclerViewPager&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;RecyclerViewPager&lt;/a&gt;&amp;nbsp;- 重写后的 RecyclerViewPager 完全继承自RecyclerView，可以自定义触发翻页的距离，可自定义翻页速度，支持VerticalViewPager，支持Fragment。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Skykai521/StickerCamera&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;StickerCamera&lt;/a&gt;&amp;nbsp;- 可以说是一个完整的相机、图片编辑的 APP，集成了大部分市面上有的同类 APP 的功能，裁剪、滤镜、贴纸应有尽有。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/debolee/demo6_PhotoRiver&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;demo6_PhotoRiver&lt;/a&gt;&amp;nbsp;- 图片流动显示的demo，可以点击流动中的图片放大显示，双击空白处图片以九宫格排列。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/wasabeef/glide-transformations&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;glide-transformations&lt;/a&gt;&amp;nbsp;- 一个基于Glide的transformation库，拥有裁剪，着色，模糊，滤镜等多种转换效果。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/recruit-lifestyle/ColoringLoading&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;ColoringLoading&lt;/a&gt;&amp;nbsp;- 一个用纯代码实现自动绘画效果动画的项目。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/SmartDengg/SmartDrawing&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;SmartDrawing&lt;/a&gt;&amp;nbsp;- 一个轻量级的手绘板，加入了一点截图功能。这只是一个Demo。并不能作为类库，也不是完整的项目工程，仅供学习或参考使用。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/mxn21/SlidingCard&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;SlidingCard&lt;/a&gt;&amp;nbsp;- 漂亮的卡片滑动翻页特效。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/LuckyJayce/LargeImage&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;LargeImage&lt;/a&gt;&amp;nbsp;- 加载大图 可以高清显示10000*10000像素的图片。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/pengjianbo/GalleryFinal&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;GalleryFinal&lt;/a&gt;&amp;nbsp;- 自定义相册，实现了拍照、图片选择（单选/多选）、 裁剪（单/多裁剪）、旋转、ImageLoader无绑定任由开发者选 择、功能可配置、主题样式可配置。GalleryFinal为你定制相册。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/D-clock/AndroidAlbum&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;AndroidAlbum&lt;/a&gt;&amp;nbsp;- AndroidAlbum图片选择器：1、MVP结构设计；2、工厂模式对载图框架进行封装抽象，方便替换其他载图框架；3、闪退日志的搜集，方便揪BUG。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Yalantis/uCrop&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;uCrop&lt;/a&gt;&amp;nbsp;- uCrop 是 Yalantis 推出的又一款力作, 用于裁剪 Android 系统上的图片, 致力于打造最佳的图片裁剪体验。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/yulu/crop-image-layout&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;crop-image-layout&lt;/a&gt;&amp;nbsp;- crop-image-layout：图片裁切布局。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/qhutch/RenderscriptHistogramEqualization&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;RenderscriptHistogramEqualization&lt;/a&gt;&amp;nbsp;-&amp;nbsp;&lt;a href=&quot;http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2016/0504/4205.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;RenderScript&lt;br&gt;:简单而快速的图像处理&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;视频音频处理&quot;&gt;&lt;a href=&quot;#视频音频处理&quot; class=&quot;headerlink&quot; title=&quot;视频音频处理&quot;&gt;&lt;/a&gt;视频音频处理&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Bilibili/ijkplayer&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;ijkplayer&lt;/a&gt;&amp;nbsp;- B站开源的视频播放器，支持Android和iOS。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Bilibili/DanmakuFlameMaster&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;DanmakuFlameMaster&lt;/a&gt;&amp;nbsp;- 这里是Android上最好的开源弹幕引擎·烈焰弹幕使。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/TheFinestArtist/YouTubePlayerActivity&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;YouTubePlayerActivity&lt;/a&gt;&amp;nbsp;- 一个可以播放YouTube视频的Activity，支持屏幕旋转、声音控制、播放失败处理、可以自定义Activity关闭动画以及在横屏播放的时候自动隐藏status&lt;br&gt;bar。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/xiongwei-git/AndroidVideoPlayer&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;AndroidVideoPlayer&lt;/a&gt;&amp;nbsp;- 开源的 Android 视频播放器，支持 DLNA。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/w9xhc/Hide-Music-Player&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Hide-Music-Player&lt;/a&gt;&amp;nbsp;- Hide音乐播放器。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/psaravan/JamsMusicPlayer&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;JamsMusicPlayer&lt;/a&gt;&amp;nbsp;- 是一个功能强大的 Android 开源播放器, 作者将原本收费的项目拿出来开源, 实在令人敬佩。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Piasy/RxAndroidAudior&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;RxAndroidAudior&lt;/a&gt;&amp;nbsp;- RxAndroidAudior目前最鲁棒的Android声音录制和播放封装库了,&amp;nbsp;&lt;a href=&quot;http://blog.piasy.com/Robust-Android-Audio-encapsulation/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;说明&lt;/a&gt;&amp;nbsp;。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/naman14/Timber&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Timber&lt;/a&gt;&amp;nbsp;- 一款遵循了Material Design并且设计精美的播放器 Timber Music Player，已经在google play上架。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/JeroenMols/LandscapeVideoCamera&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;LandscapeVideoCamera&lt;/a&gt;&amp;nbsp;- 一款功能强大的 Android 视频录制库, 仅允许横屏录制, 提供细粒度控制视频的质量与文件大小。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;测试及调试&quot;&gt;&lt;a href=&quot;#测试及调试&quot; class=&quot;headerlink&quot; title=&quot;测试及调试&quot;&gt;&lt;/a&gt;测试及调试&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/kyze8439690/DevelopQuickSetting&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;DevelopQuickSetting&lt;/a&gt;&amp;nbsp;- 快速开启关闭开发者设置的工具，提供了app界面和桌面widget，能快速打开关闭overdraw，layout border，gpu&lt;br&gt;rendering，adb wifi，不保存activity实例等功能。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.decompileandroid.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;decompileandroid&lt;/a&gt;&amp;nbsp;- 在线反编译apk文件。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/skylot/jadx&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;jadx&lt;/a&gt;&amp;nbsp;- 一个Android反编译神器，不同于常见的dex2jar，这个反编译器生成代码的try/catch次数更少，View也不再是数字id了，可读性更高。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/androguard/androguard&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Androguard&lt;/a&gt;&amp;nbsp;- Androguard使用Python写的一系列逆向工具集，功能很强大哦，对逆向工程感兴趣的小伙伴可以这个系列，&amp;nbsp;&lt;a href=&quot;http://www.technotalkative.com/part-1-reverse-engineering-using-androguard/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;教程&lt;/a&gt;&amp;nbsp;。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/orhanobut/logger&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;logger&lt;/a&gt;&amp;nbsp;- 一个简单、漂亮、功能强大的Android日志程序。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/openstf/stf&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;stf&lt;/a&gt;&amp;nbsp;- WEB 端批量移动设备管理控制工具 STF 的环境搭建和运行，&amp;nbsp;&lt;a href=&quot;https://testerhome.com/topics/2988&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;使用说明&lt;/a&gt;&amp;nbsp;。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/MasonLiuChn/DecompileApk&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;DecompileApk&lt;/a&gt;&amp;nbsp;- 一键反编译 APK，输出所有反编译后的代码、资源，使用方便。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/macroday/AppCrashTracker&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;AppCrashTracker&lt;/a&gt;&amp;nbsp;- 一个异常追踪器，可以生成一个 JSON 格式的日志并可以上传到服务器。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;动态更新热更新&quot;&gt;&lt;a href=&quot;#动态更新热更新&quot; class=&quot;headerlink&quot; title=&quot;动态更新热更新&quot;&gt;&lt;/a&gt;动态更新热更新&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/alibaba/dexposed&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;dexposed&lt;/a&gt;&amp;nbsp;- 淘宝 支付宝的Android底层技术团队即将为Dexposed开源项目贡献一个重要的扩展能力 —— 方法粒度的完整替换，大幅度降低基于AOP方式替换大型方法的开发成本，&amp;nbsp;&lt;a href=&quot;http://www.apkbus.com/android-244457-1-1.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;使用教程&lt;/a&gt;&amp;nbsp;，&amp;nbsp;&lt;a href=&quot;http://www.jianshu.com/p/14edcb444c51&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Android平台免Root无侵入AOP框架Dexposed使用详解&lt;/a&gt;&amp;nbsp;。&amp;nbsp;&lt;a href=&quot;http://my.oschina.net/fengcunhan/blog/487296&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Android&lt;br&gt;Hotpatch系列之-项目介绍&lt;/a&gt;&amp;nbsp;-&amp;nbsp;&lt;a href=&quot;https://github.com/fengcunhan/Hotpatch-Sample&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;客户端例子实现&lt;/a&gt;&amp;nbsp;,&amp;nbsp;&lt;a href=&quot;https://github.com/fengcunhan/Hotpatch-SimpleServer&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;服务器简易实现&lt;/a&gt;&amp;nbsp;。热更新。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rovo89/Xposed&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Xposed&lt;/a&gt;&amp;nbsp;- Xposed是一款可以在不修改APK的情况下影响程序运行的框架服务,&amp;nbsp;&lt;a href=&quot;http://www.csdn.net/article/2015-08-14/2825462&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Android&lt;br&gt;Hook神器：XPosed入门与登陆劫持演示&lt;/a&gt;&amp;nbsp;。热更新。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://microsoft.github.io/code-push/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;code-push&lt;/a&gt;&amp;nbsp;-大微软推出的一套可以为用 React Native 和 Cordova 开发的 App 提供代码热更新的方案。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/CtripMobile/DynamicAPK&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;DynamicAPK&lt;/a&gt;&amp;nbsp;- 实现Android App多apk插件化和动态加载，支持资源分包和热修复。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/AlanCheen/AndFixDemo&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;AndFixDemo&lt;/a&gt;&amp;nbsp;- AndFix是alibaba出品的开源热更新技术。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/HujiangTechnology/gradle_plugin_android_aspectjx&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;gradle_plugin_android_aspectjx&lt;/a&gt;&amp;nbsp;- 通过Gradle Transform和aspectj来实现代码动态修改，业务逻辑数据埋点、性能数据统计等侵入性修改从此不再需要修改业务代码，完美解决Dexposed兼容性问题，实现代码自动插桩。&amp;nbsp;&lt;a href=&quot;https://github.com/HujiangTechnology/AspectJX-Demo&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;AspectJX-Demo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/meituan/RoboAspectJ&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;RoboAspectJ&lt;/a&gt;&amp;nbsp;- 美团出品的开源热更新技术。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;消息推送与及时通讯&quot;&gt;&lt;a href=&quot;#消息推送与及时通讯&quot; class=&quot;headerlink&quot; title=&quot;消息推送与及时通讯&quot;&gt;&lt;/a&gt;消息推送与及时通讯&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.jianshu.com/p/b2ca52337fe5&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;即时通讯和sns开源项目汇总&lt;/a&gt;&amp;nbsp;- 源码提供！Android即时通讯和sns开源项目汇总。&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;客户端&quot;&gt;&lt;a href=&quot;#客户端&quot; class=&quot;headerlink&quot; title=&quot;客户端&quot;&gt;&lt;/a&gt;客户端&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/sues-lee/SuesNews&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;SuesNews新闻客户端&lt;/a&gt;&amp;nbsp;- 腾飞新闻，一个符合 Google Material Design 的 Android 校园新闻客户端 ，&amp;nbsp;&lt;a href=&quot;http://www.eoeandroid.com/thread-569074-1-1.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;新闻客户端说明&lt;/a&gt;&amp;nbsp;。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://bbs.aiyingli.com/forum.php?mod=viewthread&amp;amp;tid=12170&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;新闻客户端&lt;/a&gt;&amp;nbsp;- Android应用源码比较不错的新闻客户端，本项目启动引导登录注册用户中心列表显示文章分页下拉刷新文章收藏更新反馈等新闻客户端常见的功能都有，项目分层合理，代码质量较高。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/hidroh/materialistic&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;materialistic&lt;/a&gt;&amp;nbsp;- Material Desgin风格的Hacker News客户* 端。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/DrKLO/Telegram&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Telegram&lt;/a&gt;&amp;nbsp;- Telegram 是一款专注于速度、安全的短信息应用，快速、简单、免费。Telegram 支持群组聊天，最高200人，最高支持分享1GB的视频，其它图片等等更是不在话下。而且所有信息全部支持同步。由于频发的隐私问题，所以&lt;br&gt;Telegram 也很注重通信安全。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/liuch930/SuZhouTong-client-for-android&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;SuZhouTong-client-for-android&lt;/a&gt;&amp;nbsp;- 苏州通android客户端，非常多的UI效果。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/guxun12/ele_demo&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;ele_demo&lt;/a&gt;&amp;nbsp;- 仿【饿了么】订餐软件的一个demo。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Qixingchen/MD-BiliBili&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;MD-BiliBili&lt;/a&gt;&amp;nbsp;- Material Design 版 BiliBili Android 客户端。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/wangdan/AisenWeiBo&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;AisenWeiBo&lt;/a&gt;&amp;nbsp;- Aisen微博是新浪微博的第三方客户端，UI遵循Material Design：遵循Material Design、发布多图、离线下载、私信（触屏版、颜色主题切换、手势返回，4.4、5.0状态栏变色、离线编辑，定时发布多图、gif、长微博预览。&amp;nbsp;&lt;a href=&quot;https://github.com/06peng/FrescoDemo&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;FrescoDemo&lt;/a&gt;&amp;nbsp;。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://bbs.aiyingli.com/forum.php?mod=viewthread&amp;amp;tid=12274&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;快递查询&lt;/a&gt;&amp;nbsp;- 使用了爱查快递&amp;nbsp;&lt;a href=&quot;http://www.ickd.cn/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;www.ickd.cn&lt;/a&gt;&amp;nbsp;的api接口，可以查询申通、EMS、顺风、圆通、中通、韵达、天天、汇通、全锋、德邦、宅急送等11种快递的单号信息，支持手动输入单号和扫描单号(红米测试的时候扫描单号有点问题)，可以保存单号查询记录方便下次查询，，另外还包括了网络状态判断、快递自动更新、软件更新等功能，项目完美运行，有很详细的中文注释和逻辑分层。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://git.oschina.net/yso/SmartCall&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;SmartCall&lt;/a&gt;&amp;nbsp;- SmartCall Android 企业通讯录。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://download.jikexueyuan.com/detail/id/539.html#0-tsina-1-72241-397232819ff9a47a7b7e80a40613cfe1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Android-高仿大众点评客户端源码&lt;/a&gt;&amp;nbsp;- Android-高仿大众点评客户端源码。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://bbs.aiyingli.com/forum.php?mod=viewthread&amp;amp;tid=12974&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;八个Android项目源码&lt;/a&gt;&amp;nbsp;- 八个Android项目源码，大部分功能相信可以在实战项目中直接使用，供大家下载学习，大部分项目是基于Android Studio开发，IDE为Eclipse的童鞋可通过网上教程自行转换，这里就不多说了。大家可以下载下来学习看看！&amp;nbsp;&lt;a href=&quot;http://pan.baidu.com/s/1mgMlCBA&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;百度云盘下载地址&lt;/a&gt;&amp;nbsp;。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/mcxiaoke/minicat&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;minicat&lt;/a&gt;&amp;nbsp;- 一个简洁的饭否App，支持Android 4.0以上版本。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/SkillCollege/SimplifyReader&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;SimplifyReader&lt;/a&gt;&amp;nbsp;- 一款基于Google Material Design设计开发的Android客户端，包括新闻简读，图片浏览，视频爽看 ，音乐轻听以及二维码扫描五个子模块。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/laowch/GithubTrends&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;GithubTrends&lt;/a&gt;&amp;nbsp;- 是一个用来看查看 GitHub 热门项目的 Android App, 遵循 Material Design, 支持订阅 50 多种编程语言, 9 种颜色主题切换,&lt;br&gt;可在上面收藏喜欢的项目。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/wingjay/jianshi&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;jianshi&lt;/a&gt;&amp;nbsp;- jianshi简诗是国人开发的一个用于记录文字信息的 Android 完整应用, 作者仅用了一天便将其开发出来, 并将开发的流程记录成文放到了简书上。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/tangqi92/BuildingBlocks&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;BuildingBlocks&lt;/a&gt;&amp;nbsp;- 积木： 一个以知乎日报作为数据展现内容；以抽屉菜单作为功能扩展入口；依循 Material Design 作为主导设计 UI 的应用。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/DreaminginCodeZH/Douya&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Douya&lt;/a&gt;&amp;nbsp;- 开源的 Material Design 豆瓣客户端。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/maoruibin/TranslateApp&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;TranslateApp&lt;/a&gt;&amp;nbsp;- 一个实现『划词翻译』功能的 Android 开源应用。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;插件&quot;&gt;&lt;a href=&quot;#插件&quot; class=&quot;headerlink&quot; title=&quot;插件&quot;&gt;&lt;/a&gt;插件&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://stormzhang.com/android/2015/05/26/android-tools/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Android Studio 插件和工具&lt;/a&gt;&amp;nbsp;- 5个 推荐几个有用的 Android Studio 插件和工具（ButterKnife、selectorChapek、GsonFormat、ParcelableGenerator、LeakCanary）。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.imooc.com/article/1148&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;8 个最优秀的 Android Studio 插件&lt;/a&gt;&amp;nbsp;- 8 个最优秀的 Android Studio 插件（H.A.X.M（硬件加速执行管理器）、Genymotion、Android Drawable Importer、Android&lt;br&gt;ButterKnife Zelezny、Android Holo Colors Generator、Robotium Recorder、jimu Mirror、Strings-xml-tools）。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/JesusFreke/smali/wiki/smalidea&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;smalidea&lt;/a&gt;&amp;nbsp;- 一款 IntelliJ IDEA/Android Studio 的 smali 插件～ ，&amp;nbsp;&lt;a href=&quot;http://drops.wooyun.org/tips/7181&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Smalidea&lt;br&gt;无源码调试 Android 应用&lt;/a&gt;&amp;nbsp;。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/sangmingming/gradle-fir-plugin&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;gradle-fir-plugin&lt;/a&gt;&amp;nbsp;- 一个上传apk到fir的gradle插件，&amp;nbsp;&lt;a href=&quot;http://blog.isming.me/2015/08/01/gradle-fir-plugin/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;使用说明&lt;/a&gt;&amp;nbsp;。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/avast/android-butterknife-zelezny&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;android-butterknife-zelezny&lt;/a&gt;&amp;nbsp;- 一个ButterKnife的Android Studio插件, 该插件可以让你手动生成上述注入代码。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ligi/GradleDependenciesHelperPlugin&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;GradleDependenciesHelperPlugin&lt;/a&gt;&amp;nbsp;- Gradle 依赖自动补全插件。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/importre/android-selector-intellij-plugin&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;android-selector-intellij-plugin&lt;/a&gt;&amp;nbsp;- 可以根据指定颜色生成Selector Drawable的插件。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.imooc.com/article/1425&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;7个最佳的Android模拟器&lt;/a&gt;&amp;nbsp;- 7个最佳的Android模拟器。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/vanniktech/gradle-android-javadoc-plugin&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;gradle-android-javadoc-plugin&lt;/a&gt;&amp;nbsp;- 可以生成 java doc 的 Gradle 插件。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/vanniktech/gradle-android-junit-jacoco-plugin&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;gradle-android-junit-jacoco-plugin&lt;/a&gt;&amp;nbsp;- 可以生成代码单元测试覆盖率报告的 Gradle 插件。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/vanniktech/gradle-android-apk-size-plugin&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;gradle-android-apk-size-plugin&lt;/a&gt;&amp;nbsp;- 可以将 Apk 大小记录到 CSV 文件的 Gradle 插件。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.jianshu.com/p/6f5f818afe4b&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;几款实用的Android Studio 插件&lt;/a&gt;&amp;nbsp;- 几款实用的Android Studio 插件：1、android-butterknife-zelezny；2、Gsonformat：可根据json数据快速生成java实体类；3、Android&lt;br&gt;Postfix Completion；4、AndroidAccessors；5、Lifecycle Sorter：根据Activity或者fragment的生命周期对其生命周期方法位置进行先后排序，快捷键Ctrl + alt + K；6、JsonOnlineViewer；7、CodeGlance；8、findBugs-IDEA：帮你一起找bug的；9、ADB WIFI：使用wifi无线调试你的app，无需root权限。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/MummyDing/Leisure&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Leisure&lt;/a&gt;&amp;nbsp;- 闲暇(Leisure)是一款集”知乎日报”、“果壳科学人”、“新华网新闻”以及“豆瓣图书”于一体的阅读类Android应用。 果壳、知乎和豆瓣在国内拥有大量用户，这些社区的用户每天都产生很多高质量内容。闲暇以其简介的风格将这几大社区&lt;br&gt;的优质内容整合于一体，使得用户能有效地获取这些内容，大大节省了用户的时间。&amp;nbsp;&lt;a href=&quot;http://coolapk.com/apk/com.mummyding.app.leisure&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;酷安下载地址&lt;/a&gt;&amp;nbsp;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/drakeet/LayoutFormatter&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;LayoutFormatter插件&lt;/a&gt;&amp;nbsp;- 可自动将乱序的布局文件进行重新属性排序并格式化，比如 style 和 android:id 必须排在前面，紧接着 layout、padding，而值设定如&lt;br&gt;text 只能排在最后。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;出名框架&quot;&gt;&lt;a href=&quot;#出名框架&quot; class=&quot;headerlink&quot; title=&quot;出名框架&quot;&gt;&lt;/a&gt;出名框架&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/wyouflf/xUtils&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;xUtils&lt;/a&gt;&amp;nbsp;- xUtils 包含了很多实用的android工具。支持大文件上传，更全面的http请求协议支持(10种谓词)，拥有更加灵活的ORM，更多的事件注解支持且不受混淆影响。最低兼容android&lt;br&gt;2.2 (api level 8)。目前xUtils主要有四大模块：DbUtils模块、ViewUtils模块、HttpUtils模块、BitmapUtils模块。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://git.oschina.net/fuhai/afinal&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;afinal&lt;/a&gt;&amp;nbsp;- Afinal是一个android的ioc，orm框架，内置了四大模块功能：FinalAcitivity,FinalBitmap,FinalDb,FinalHttp。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/JakeWharton/butterknife&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;ButterKnife&lt;/a&gt;&amp;nbsp;- ButterKnife是一个专注于Android系统的View注入框架，让你从此从这些烦人臃肿的代码中解脱出来，&amp;nbsp;&lt;a href=&quot;http://stormzhang.com/openandroid/android/2014/01/12/android-butterknife/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;ButterKnife–View注入框架&lt;/a&gt;&amp;nbsp;。&amp;nbsp;&lt;a href=&quot;https://github.com/xitu/gold-miner/blob/master/TODO/Top-5-Android-libraries-every-Android-developer-should-know-about.md&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;5&lt;br&gt;个顶级 Android 开源库&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/greenrobot/EventBus&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;EventBus&lt;/a&gt;&amp;nbsp;- EventBus是一款针对Android优化的发布/订阅事件总线。主要功能是替代Intent,Handler,BroadCast在Fragment，Activity，Service，线程之间传递消息.优点是开销小，代码更优雅。以及将发送者和接收者解耦。&amp;nbsp;&lt;a href=&quot;https://github.com/mcxiaoke/xBus&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;xBus&lt;/a&gt;&amp;nbsp;-&lt;br&gt;xBus - 简洁的EventBus实现。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/wequick/Small&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Small&lt;/a&gt;&amp;nbsp;- 做最轻巧的跨平台插件化框架，目前已支持Android、iOS以及html5插件。并且三者之间可以通过同一套javascript接口进行通信。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/mmin18/LayoutCast&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;LayoutCast&lt;/a&gt;&amp;nbsp;- LayoutCast可以在应用不重启的情况下，将res文件夹下的改动直接同步到手机上。使用LayoutCast，可以节约Android开发者的大量编译等待时间，非常适合真机调试界面的时候使用，推荐每一位开发者安装该利器。BUCK很快，但入侵性强，项目改动大，LayoutCast对项目改动小。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/square/retrofit/tree/version-one&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;retrofit&lt;/a&gt;&amp;nbsp;- retrofit将 REST API 转换为 Java 接口。&amp;nbsp;&lt;a href=&quot;https://github.com/xitu/gold-miner/blob/master/TODO/Top-5-Android-libraries-every-Android-developer-should-know-about.md&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;5&lt;br&gt;个顶级 Android 开源库&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/google/dagger&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Dagger2&lt;/a&gt;&amp;nbsp;- Dagger 2 是著名的依赖注入库&amp;nbsp;&lt;a href=&quot;https://github.com/square/dagger&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Dagger&lt;/a&gt;&amp;nbsp;的继承者，我们强烈推荐它。&amp;nbsp;&lt;a href=&quot;http://google.github.io/dagger/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;文档&lt;/a&gt;&amp;nbsp;，&amp;nbsp;&lt;a href=&quot;https://github.com/xitu/gold-miner/blob/master/TODO/Top-5-Android-libraries-every-Android-developer-should-know-about.md&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;5&lt;br&gt;个顶级 Android 开源库&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;其他&quot;&gt;&lt;a href=&quot;#其他&quot; class=&quot;headerlink&quot; title=&quot;其他&quot;&gt;&lt;/a&gt;其他&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://code.google.com/archive/p/java-zhconverter&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;java-zhconverter&lt;/a&gt;&amp;nbsp;- java-zhconverter是一个简繁体中文互换的Java开源类库。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/dlew/joda-time-android&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;joda-time-android&lt;/a&gt;&amp;nbsp;- 一个超赞的时间处理的库，Joda-Time ！ 他能帮你轻松处理时区，处理时间加减，计算到期时间等等场景下的问题。&amp;nbsp;&lt;a href=&quot;http://www.joda.org/joda-time/key_partial.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;java版本&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/luozi/AssistiveTouch&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;AssistiveTouch&lt;/a&gt;&amp;nbsp;- 配合Android手机沉浸式隐藏虚拟按键后快捷操作 (Nexus5屏幕变大了)。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/naman14/S-Tools&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;S-Tools&lt;/a&gt;&amp;nbsp;- S-Tools一个可以实时查看的CPU状态和手机各类传感器数据，还有一些例如颜色选择、指南针和设备信息等功能。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/lzyzsd/JsBridge&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;JsBridge&lt;/a&gt;&amp;nbsp;- 模仿微信webview的JsBridge，安全方便的实现js和Java的互相调用，主要通过loadUrl和shouldOverrideUrl实现。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/MostafaGazar/soas&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Sample Of All Samples&lt;/a&gt;&amp;nbsp;- 提供大部分Android5.0组件的示例应用。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/s1rius/Android-Package-Channel&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Android-Package-Channel&lt;/a&gt;&amp;nbsp;- 美团网做的把Android多渠道打包工具，打包时间缩短到一分钟，python脚本。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.race604.com/fast-apk-packaging/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;fast-apk-packaging&lt;/a&gt;&amp;nbsp;- Android不需要重新编译打渠道包。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/lihei12345/android_gradle_script&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;android_gradle_script&lt;/a&gt;&amp;nbsp;- gradle批量打包脚本，用txt配置一下，就可以支持多个渠道打包，适合国内这种动不动上百个渠道包的环境。目前有个问题，一次打包脚本超过80个就会GC问题。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/MasonLiuChn/BatchPackApk&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;BatchPackApk&lt;/a&gt;&amp;nbsp;- 免签名直接打包工具。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/mcxiaoke/gradle-packer-plugin/blob/master/readme.md&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Android多渠道打包工具Gradle插件&lt;/a&gt;&amp;nbsp;- Android多渠道打包工具Gradle插件。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://avatarqing.github.io/Gradle-Plugin-User-Guide-Chinese-Verision/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Gradle-Plugin-User-Guide-Chinese-Verision&lt;/a&gt;&amp;nbsp;- Gradle插件使用指南中文版。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://gradle-guide.books.yourtion.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;gradle-guide.books&lt;/a&gt;&amp;nbsp;- Android Gradle 插件中文指南（GitBook）。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ahui2823/package_tool&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Android-package_tool&lt;/a&gt;&amp;nbsp;- 该工程用于编译多渠道Android应用，替换相应的标签，然后重新打包，用perl脚本实现。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.orchidshell.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;兰贝壳儿&lt;/a&gt;&amp;nbsp;- Android多渠道打包解决方案(兰贝壳儿)，eclipse插件。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/pedrovgs/Algorithms&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Algorithms&lt;/a&gt;&amp;nbsp;- 常见算法问题的Java实现。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/iluwatar/java-design-patterns&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;java-design-patterns&lt;/a&gt;&amp;nbsp;- 一个常见设计模式的java实现。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/denley/preferencebinder&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;PreferenceInjector&lt;/a&gt;&amp;nbsp;- SharedPreference注入开源库，SharedPreference key与某个变量绑定、监听key变化、初始化key都可以通过注解完成。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.ocpsoft.org/prettytime/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;prettytime&lt;/a&gt;&amp;nbsp;- 一个实用的人性化的时间显示，比如：几分钟前，几天前。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/saulmm/Material-Movies&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Material-Movies&lt;/a&gt;&amp;nbsp;- Material Design 下的Movie App（电影展示），可供学习，或者直接二次开发。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/PaNaVTEC/Clean-Contacts&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Clean-Contacts&lt;/a&gt;&amp;nbsp;- 充满技术含量的一个 Contact App（联系人）。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/waylife/RedEnvelopeAssistant&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;RedEnvelopeAssistant&lt;/a&gt;&amp;nbsp;- 完全免费开源的抢红包软件、做这个软件纯粹是发现Android的模拟点击十分好玩，然后顺道写了一个，有此基础，可以再扩展其他的很多模拟点击程序&lt;br&gt;。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/joyoyao/superCleanMaster&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;superCleanMaster&lt;/a&gt;&amp;nbsp;- 一键清理开源版，包括内存加速，缓存清理，自启管理，软件管理等。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/LuckyJayce/LoadViewHelper&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;LoadViewHelper&lt;/a&gt;&amp;nbsp;- 切换加载中，加载失败，加载成功布局，定义一个LoadViewHelper所有界面通用。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/futurice/android-best-practices&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;android-best-practices&lt;/a&gt;&amp;nbsp;- android最佳实践&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://android.jobbole.com/80684/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Android最佳实践&lt;/a&gt;&amp;nbsp;- 安卓最佳实践（1）：安卓开发–中文。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/futurice/android-best-practices/blob/master/translations/Chinese/README.cn.md&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Android最佳实践&lt;/a&gt;&amp;nbsp;- 从Futurice公司Android开发者中学到的经验。&lt;br&gt;遵循以下准则，避免重复发明轮子。若您对开发iOS或Windows Phone 有兴趣， 请看iOS Good Practices 和 Windows client Good Practices 这两篇文章。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.csdn.net/chen52671/article/details/44751347&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;如何安装ACRA&lt;/a&gt;&amp;nbsp;- 如何安装ACRA-一个Android应用Crash跟踪系统—在自己的服务器上。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.csdn.net/love_xsq/article/details/44616925&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Android ocr识别文字介绍&lt;/a&gt;&amp;nbsp;- Android ocr识别文字介绍 。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/florent37/DaVinci&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;DaVinci&lt;/a&gt;&amp;nbsp;- DaVinci是一个适用于Android Wear平台的图片下载和缓存library。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/FX-Max/Point-of-Android&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Point-of-Android&lt;/a&gt;&amp;nbsp;- Android 一些重要知识点解析整理 。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/mcsong/AppStoreLibrary&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;AppStoreLibrary&lt;/a&gt;&amp;nbsp;- 检测是否在appstore安装了应用，搜索应用。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/liaohuqiu/leakcanary-demo&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;LeakCanary&lt;/a&gt;&amp;nbsp;- 利用此类库，排查内存泄露变得非常简单，&amp;nbsp;&lt;a href=&quot;http://www.liaohuqiu.net/cn/posts/leak-canary-read-me/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;LeakCanary&lt;br&gt;中文使用说明&lt;/a&gt;&amp;nbsp;，&amp;nbsp;&lt;a href=&quot;http://www.liaohuqiu.net/cn/posts/leak-canary/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;LeakCanary: 让内存泄露无所遁形&lt;/a&gt;&amp;nbsp;。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Kotlin/anko&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;anko&lt;/a&gt;&amp;nbsp;- 快速开发框架。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/tianzhijiexian/CommonAdapter&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;CommonAdapter&lt;/a&gt;&amp;nbsp;- 通过对于原生Adapter的封装，产生了支持ListView，GridView，RecyclerView的简单通用的Adapter。这种方式将item变成独立的“视图”对象，方便操作，又增加了可扩展性。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/richardradics/MVPAndroidBootstrap&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;MVPAndroidBootstrap&lt;/a&gt;&amp;nbsp;- 一个Android MVP 模式实例项目。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/8tory/json2notification&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;json2notification&lt;/a&gt;&amp;nbsp;- 一个多功能方便好用的notification通知栏通知开源库。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/dm77/barcodescanner&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;barcodescanner&lt;/a&gt;&amp;nbsp;- 一个封装好的基于zxing二维码扫描库。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/bingoogolapple/BGAQRCode-Android&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;BGAQRCode-Android&lt;/a&gt;&amp;nbsp;- 一个可高度定制二维码扫描界面、生成二维码、识别图片二维码库。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/mcxiaoke/mqtt&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;mqtt&lt;/a&gt;&amp;nbsp;- MQTT 协议 3.1.1 中文翻译版。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Qihoo360/DroidPlugin&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Droid Plugin&lt;/a&gt;&amp;nbsp;- DroidPlugin 是360手机助手在Android系统上实现了一种新的插件机制:它可以在无需安装、修改的情况下运行APK文件,此机制对改进大型APP的架构，实现多团队协作开发具有一定的好处。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/tianzhijiexian/JsonAnnotation&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;JsonAnnotation&lt;/a&gt;&amp;nbsp;- 利用注解自动生成Gson‘s Model的库。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/geeeeeeeeek/WeChatLuckyMoney&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;WeChatLuckyMoney&lt;/a&gt;&amp;nbsp;- 微信抢红包插件。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/liaohuqiu/android-support-23.2-sample&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;android-support-23.2-sample&lt;/a&gt;&amp;nbsp;- support 库在 23.2 版本新增内容示例项目。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Rtsunoath/Sunoath&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Sunoath&lt;/a&gt;&amp;nbsp;- 基于MVP+Retrofit+Material Design的Demo。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/mzule/ActivityRouter&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;ActivityRouter&lt;/a&gt;&amp;nbsp;- 一个url打开activity的Router库，支持指定参数类型，支持参数transfer，支持callback。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;好的文章&quot;&gt;&lt;a href=&quot;#好的文章&quot; class=&quot;headerlink&quot; title=&quot;好的文章&quot;&gt;&lt;/a&gt;好的文章&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.apkbus.com/android-244454-1-1.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;高效抽取loading&lt;/a&gt;&amp;nbsp;- 高效抽取loading，再多的加载页面也不怕。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://news.cnblogs.com/n/505055/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;修复bug的12个关键步骤&lt;/a&gt;&amp;nbsp;- 修复bug的12个关键步骤。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/hehonghui/android-tech-frontier&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Android开发技术前线&lt;/a&gt;&amp;nbsp;- 里面是安卓的一些外国前沿文章的翻译，想课余时间学习 Android 的看看，已经收录了。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://droidyue.com/blog/2015/09/26/android-tuning-tool-strictmode/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;android-tuning-tool-strictmode&lt;/a&gt;&amp;nbsp;- Android性能调优利器StrictMode。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/tangqi92/Android-Tips&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Android-Tips&lt;/a&gt;&amp;nbsp;- Android-Tips 安卓方面各种难点坑汇总，按字母排序。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/JeffLi1993/jvm-core-learning-example&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;jvm-core-learning-example&lt;/a&gt;&amp;nbsp;- 关于Java虚拟机核心知识点学习积累的例子，是初学者及虚拟机核心知识巩固的最佳实践。。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.jianshu.com/p/0acc12c29c1b&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Translucent System Bar 的最佳实践&lt;/a&gt;&amp;nbsp;- Translucent System Bar 的最佳实践。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.jianshu.com/p/79604c3ddcae&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;最详细的 Toolbar 开发实践总结&lt;/a&gt;&amp;nbsp;- 最详细的 Toolbar 开发实践总结。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.jianshu.com/p/c8cbeb7ea43a&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;最详细的 NavigationDrawer 开发实践总结&lt;/a&gt;&amp;nbsp;- 最详细的 NavigationDrawer 开发实践总结。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/xitu/gold-miner/blob/master/TODO/approaching-android-with-mvvm.md&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;MVVM 模式介绍&lt;/a&gt;&amp;nbsp;- MVVM 模式介绍。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://zjutkz.net/2016/04/13/%E9%80%89%E6%8B%A9%E6%81%90%E6%83%A7%E7%97%87%E7%9A%84%E7%A6%8F%E9%9F%B3%EF%BC%81%E6%95%99%E4%BD%A0%E8%AE%A4%E6%B8%85MVC%EF%BC%8CMVP%E5%92%8CMVVM/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;选择恐惧症的福音！教你认清MVC，MVP和MVVM&lt;/a&gt;&amp;nbsp;-&lt;br&gt;选择恐惧症的福音！教你认清MVC，MVP和MVVM。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;RecyclerView技术栈 - RecyclerView技术栈。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/AntBranch/awesome-github&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;awesome-github&lt;/a&gt;&amp;nbsp;- awesome-github:收集这个列表，只是为了更好地使用亲爱的GitHub。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.simlinux.com/archives/1689.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Android多渠道打包这样做才酸爽&lt;/a&gt;&amp;nbsp;- Android多渠道打包这样做才酸爽。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://gudong.name/2016/04/07/checkstyle.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;使用 CheckStyle 检查代码&lt;/a&gt;&amp;nbsp;- 使用 CheckStyle 检查代码。&amp;nbsp;&lt;/p&gt;
&lt;p&gt;收集android上开源的酷炫的交互动画和视觉效果&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/Rano1/Interactive-animation/blob/master/README.md&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;酷炫的交互动画和视觉效果&lt;/a&gt;&amp;nbsp;- 描述：收集android上开源的酷炫的交互动画和视觉效果。1.交互篇，2.视觉篇。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.androidchina.net/1992.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Android酷炫实用的开源框架（UI框架）&lt;/a&gt;&amp;nbsp;- Android酷炫实用的开源框架（UI框架）25个。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;交互篇&quot;&gt;&lt;a href=&quot;#交互篇&quot; class=&quot;headerlink&quot; title=&quot;交互篇&quot;&gt;&lt;/a&gt;交互篇&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;p&gt;1、SlidingUpPanelLayout 项目介绍：他的库提供了一种简单的方式来添加一个可拖动滑动面板(由谷歌音乐推广,谷歌地图和Rdio)你的Android应用程序。 项目地址：&amp;nbsp;&lt;a href=&quot;https://github.com/umano/AndroidSlidingUpPanel&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/umano/AndroidSlidingUpPanel&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;2、FoldableLayout 项目介绍：折叠展开点击的ITEM 项目地址：&amp;nbsp;&lt;a href=&quot;https://github.com/alexvasilkov/FoldableLayout&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/alexvasilkov/FoldableLayout&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;3、android-flip 项目介绍：折叠翻页效果 项目地址：&amp;nbsp;&lt;a href=&quot;https://github.com/openaphid/android-flip&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/openaphid/android-flip&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;4、SwipeBackLayout 项目介绍：拖动关闭当前活动窗体 项目地址：&amp;nbsp;&lt;a href=&quot;https://github.com/ikew0ng/SwipeBackLayout&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/ikew0ng/SwipeBackLayout&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;5、AndroidImageSlider 项目介绍：一个漂亮的Slider，可以通过自定义达到更好的效果 项目地址：&amp;nbsp;&lt;a href=&quot;https://github.com/daimajia/AndroidImageSlider&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/daimajia/AndroidImageSlider&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;6、Android-ParallaxHeaderViewPager 项目介绍：栏目展示动画，自动播放，滚动下方列表时候，收缩效果 项目地址：&amp;nbsp;&lt;a href=&quot;https://github.com/kmshack/Android-ParallaxHeaderViewPager&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/kmshack/Android-ParallaxHeaderViewPager&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;7、FragmentTransactionExtended 项目介绍： 漂亮的图标加载动画。&amp;nbsp;&lt;/p&gt;
&lt;p&gt;项目地址：&amp;nbsp;&lt;a href=&quot;https://github.com/DesarrolloAntonio/FragmentTransactionExtended&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/DesarrolloAntonio/FragmentTransactionExtended&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;8、FragmentTransactionExtended 项目介绍：Android按钮可以化身进度 项目地址：&amp;nbsp;&lt;a href=&quot;https://github.com/dmytrodanylyk/circular-progress-button&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/dmytrodanylyk/circular-progress-button&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;9、floatlabelededittext 项目介绍：简单的实现浮动标签EditText:Android视图使用EditText之上,并提示EditText时填充文本。 项目地址：&amp;nbsp;&lt;a href=&quot;https://github.com/wrapp/floatlabelededittext&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/wrapp/floatlabelededittext&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;10、QuickReturn 项目介绍：Showcases QuickReturn view as a header, footer, and both header and footer. 给几乎所有可以滑动的 View 加上快速返回的 Header 或者 Footer，使用非常方便。 项目地址：&amp;nbsp;&lt;a href=&quot;https://github.com/lawloretienne/QuickReturn&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/lawloretienne/QuickReturn&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;11、VNTNumberPickerPreference 项目介绍：这是一个易于使用的自定义偏好,打开一个对话框中有许多选择。的值被自动保存,你可以设置默认,min -和maxValue方便地在XML。 项目地址：&amp;nbsp;&lt;a href=&quot;https://github.com/vanniktech/VNTNumberPickerPreference&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/vanniktech/VNTNumberPickerPreference&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;12、CircularFloatingActionMenu 项目介绍：动画,可定制的圆形浮动菜单为Android, 项目地址：&amp;nbsp;&lt;a href=&quot;https://github.com/oguzbilgener/CircularFloatingActionMenu&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/oguzbilgener/CircularFloatingActionMenu&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;13、NiftyDialogEffects 项目介绍：Dialog的各种打开动画，Nifty Modal Dialog Effects look like this(Nifty Modal Window Effects) 项目地址：&amp;nbsp;&lt;a href=&quot;https://github.com/sd6352051/NiftyDialogEffects&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/sd6352051/NiftyDialogEffects&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;14、material-menu 项目介绍：变形安卓菜单,返回和删除按钮 项目地址：&amp;nbsp;&lt;a href=&quot;https://github.com/balysv/material-menu&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/balysv/material-menu&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;15、AndroidViewHover 项目介绍：我们需要一个悬停视图,显示菜单,显示消息。 项目地址：&amp;nbsp;&lt;a href=&quot;https://github.com/daimajia/AndroidViewHover&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/daimajia/AndroidViewHover&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;16、PagedHeadListView 项目介绍：图片轮转切换&amp;nbsp;&lt;/p&gt;
&lt;p&gt;项目地址：&amp;nbsp;&lt;a href=&quot;https://github.com/JorgeCastilloPrz/PagedHeadListView&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/JorgeCastilloPrz/PagedHeadListView&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;17、android-movies-demo 项目介绍：电影列表3级联动，交互 项目地址：&amp;nbsp;&lt;a href=&quot;https://github.com/dlew/android-movies-demo&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/dlew/android-movies-demo&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;18、NiftyNotification 项目介绍：提示通知栏的各种动画&amp;nbsp;&lt;/p&gt;
&lt;p&gt;项目地址：&amp;nbsp;&lt;a href=&quot;https://github.com/sd6352051/NiftyNotification&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/sd6352051/NiftyNotification&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;19、SwipeBack 项目介绍：拖动关闭，模范：kicker app（&amp;nbsp;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.netbiscuits.kicker%EF%BC%89&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://play.google.com/store/apps/details?id=com.netbiscuits.kicker）&lt;/a&gt;&amp;nbsp;项目地址：&amp;nbsp;&lt;a href=&quot;https://github.com/sockeqwe/SwipeBack&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/sockeqwe/SwipeBack&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;20、AndroidSwipeLayout 项目介绍：类似微信的测拉菜单&amp;nbsp;&lt;/p&gt;
&lt;p&gt;项目地址：&amp;nbsp;&lt;a href=&quot;https://github.com/daimajia/AndroidSwipeLayout&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/daimajia/AndroidSwipeLayout&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;21、SnackBar 项目介绍： 项目地址：&amp;nbsp;&lt;a href=&quot;https://github.com/MrEngineer13/SnackBar&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/MrEngineer13/SnackBar&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;22、Swipecards 项目介绍：A Tinder-like cards effect as of August 2014. You can swipe left or right to like or dislike the content. The library creates a similar effect to Tinder’s swipable cards with Fling animation. 项目地址：&amp;nbsp;&lt;a href=&quot;https://github.com/Diolor/Swipecards&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/Diolor/Swipecards&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;23、LDrawer 项目介绍：Android抽屉与材料设计动画图标 项目地址：&amp;nbsp;&lt;a href=&quot;https://github.com/keklikhasan/LDrawer&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/keklikhasan/LDrawer&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;视觉篇&quot;&gt;&lt;a href=&quot;#视觉篇&quot; class=&quot;headerlink&quot; title=&quot;视觉篇&quot;&gt;&lt;/a&gt;视觉篇&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;p&gt;1、android-stackblur 项目介绍：毛玻璃，朦胧美 项目地址：&amp;nbsp;&lt;a href=&quot;https://github.com/kikoso/android-stackblur&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/kikoso/android-stackblur&lt;/a&gt;&amp;nbsp;DEMO演示：&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;2、BlurEffectForAndroidDesign 项目介绍：实现模糊图形技巧&amp;nbsp;&lt;/p&gt;
&lt;p&gt;项目地址：&amp;nbsp;&lt;a href=&quot;https://github.com/PomepuyN/BlurEffectForAndroidDesign&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/PomepuyN/BlurEffectForAndroidDesign&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;3、Shimmer-android 项目介绍：闪动的文字 项目地址：&amp;nbsp;&lt;a href=&quot;https://github.com/RomainPiel/Shimmer-android&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/RomainPiel/Shimmer-android&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;4、WizardPager 项目介绍：它提供了一个示例实现的Android手机上安装一个向导界面 项目地址：&amp;nbsp;&lt;a href=&quot;https://github.com/TechFreak/WizardPager&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/TechFreak/WizardPager&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;5、FloatingActionButton 项目介绍：浮动的按钮 项目地址：&amp;nbsp;&lt;a href=&quot;https://github.com/FaizMalkani/Fabulous&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/FaizMalkani/Fabulous&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;6、JumpingBeans 项目介绍：跳动的文本 项目地址：&amp;nbsp;&lt;a href=&quot;https://github.com/frakbot/JumpingBeans&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/frakbot/JumpingBeans&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;7、android_maskable_layout 项目介绍：可屏蔽的布局&amp;nbsp;&lt;/p&gt;
&lt;p&gt;项目地址：&amp;nbsp;&lt;a href=&quot;https://github.com/christophesmet/android_maskable_layout&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/christophesmet/android_maskable_layout&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;8、activityanimation 项目介绍：Activit之间切换动画&amp;nbsp;&lt;/p&gt;
&lt;p&gt;项目地址：&amp;nbsp;&lt;a href=&quot;https://github.com/flavienlaurent/activityanimation&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/flavienlaurent/activityanimation&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;9、android-shape-imageview 项目介绍：提供了一组自定义形状的android imageview组件,和一个框架来定义更多的形状。实现着色器和位图基于掩模图像视图。 项目地址：&amp;nbsp;&lt;a href=&quot;https://github.com/siyamed/android-shape-imageview&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/siyamed/android-shape-imageview&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;10、RippleView 项目介绍：认为模仿的连锁反应在单击推出了Android L&amp;nbsp;&lt;/p&gt;
&lt;p&gt;项目地址：&amp;nbsp;&lt;a href=&quot;https://github.com/siriscac/RippleView&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/siriscac/RippleView&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;11、android-ui 项目介绍：一个小部件可以定义的行为之间的动态变化 项目地址：&lt;a href=&quot;https://github.com/markushi/android-ui&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/markushi/android-ui&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;12、FlatUI 项目介绍： 项目地址：&amp;nbsp;&lt;a href=&quot;https://github.com/eluleci/FlatUI&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/eluleci/FlatUI&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;UI资源&quot;&gt;&lt;a href=&quot;#UI资源&quot; class=&quot;headerlink&quot; title=&quot;UI资源&quot;&gt;&lt;/a&gt;UI资源&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://fontawesome.io/icons/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;fontawesome&lt;/a&gt;&amp;nbsp;- Font-Awesome图标。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.uisdc.com/material-design-responsive-design&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;material-design-responsive-design&lt;/a&gt;&amp;nbsp;- 深聊Material Design复杂响应式设计，&amp;nbsp;&lt;a href=&quot;http://www.uisdc.com/comprehensive-material-design-note&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;comprehensive-material-design-note&lt;/a&gt;&amp;nbsp;-&lt;br&gt;帮你全面彻底搞定Material design的学习笔记。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/mikepenz/Android-Iconics&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Iconics&lt;/a&gt;&amp;nbsp;- 这是一个可以让你在你的项目中使用几乎任何字体图标的库。默认包含 FontAwesome 和 Material Design Icons 还包含 Meteocons&lt;br&gt;插件。你甚至可以添加任何你自定义的字体图标（typeface）。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;开发资源&quot;&gt;&lt;a href=&quot;#开发资源&quot; class=&quot;headerlink&quot; title=&quot;开发资源&quot;&gt;&lt;/a&gt;开发资源&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/akullpp/awesome-java&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;awesome-java&lt;/a&gt;&amp;nbsp;- java库列表，&amp;nbsp;&lt;a href=&quot;http://app.memect.com/doc/android.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;中文版&lt;/a&gt;&amp;nbsp;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/soyoungboy/android-material-design-Open-source-projects/blob/master/README.md&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;material design 的android开源代码整理&lt;/a&gt;&amp;nbsp;- material&lt;br&gt;design 的android开源代码整理。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/Trinea/android-open-project&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Android开源项目分类汇总&lt;/a&gt;&amp;nbsp;-&amp;nbsp;&lt;a href=&quot;http://www.trinea.cn/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Trinea&lt;/a&gt;&amp;nbsp;国内最多好的开源库总结。&amp;nbsp;&lt;a href=&quot;http://www.trinea.cn/android/android-open-project-summary/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Android&lt;br&gt;开源库获取途径整理&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/android-cn/android-open-project-analysis&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Android开源库源码分析&lt;/a&gt;&amp;nbsp;-&amp;nbsp;&lt;a href=&quot;http://www.trinea.cn/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Trinea&lt;/a&gt;&amp;nbsp;我们从&lt;br&gt;Android 开始建了了协作项目，从简介、总体设计、流程图、详细设计全方面分析开源库源码。目前第一期完成，包括10个开源库及5个公共技术点的全面介绍。&amp;nbsp;&lt;a href=&quot;http://www.codekk.com/open-source-project-analysis&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;在线网页&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.itlanbao.com/forum.php?mod=viewthread&amp;amp;tid=45&amp;amp;fromuid=1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;年薪30万的Android程序员必须知道的帖子&lt;/a&gt;&amp;nbsp;- Android开源项目汇总，带效果gif图。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/kesenhoo/android-training-course-in-chinese&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Android官方培训课程中文版&lt;/a&gt;&amp;nbsp;- Google Android官方培训课程中文版。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.cnblogs.com/hawkon/p/3593709.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;GitHub优秀Android开源项目&lt;/a&gt;&amp;nbsp;- GitHub 优秀的 Android 开源项目,很多中文现成项目。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.androiddevtools.cn/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Android开发工具及文档&lt;/a&gt;&amp;nbsp;- androiddevtools，收集整理Android开发所需的Android SDK、开发中用到的工具、Android开发教程、Android设计规范，免费的设计素材等。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/1sters/material_design_zh&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;material_design&lt;/a&gt;&amp;nbsp;- eoeAndroid Material Design 中文协同翻译。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.jianshu.com/p/1078568e859f&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Android Design Support Library&lt;/a&gt;&amp;nbsp;- Android Design Support Library 的 代码实验——几行代码，让你的 APP 变得花俏。&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/1sters/Android-Open-Sourse-Library/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Android-Open-Sourse-Library&lt;/a&gt;&amp;nbsp;- eoeAndroid 开源组件深度剖析: 1.Http请求组件:Volley\android-async-http\okhttp&lt;br&gt;2.json数据解析组件:Gson\fast-json\json-smart\Jackson。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://wiki.eoeandroid.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;wiki-eoeandroid&lt;/a&gt;&amp;nbsp;- wiki-eoeandroid : Android Develop - 开发技术、Android Design - 设计规范、Android Distribute - 软件发布。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.importnew.com/14429.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Java资源大全&lt;/a&gt;&amp;nbsp;- 国外程序员整理的Java资源大全。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/bboyfeiyu/android-tech-frontier&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Android开发技术前线&lt;/a&gt;&amp;nbsp;- Android开发技术前线 ( android-tech-frontier )，一个定期翻译、发布国内外Android优质的技术、开源库、软件架构设计、测试等文章的开源项目,让我们的技术跟上国际步伐。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://android.jobbole.com/80826/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;10个常用工具类&lt;/a&gt;&amp;nbsp;- Android快速开发系列 10个常用工具类：1、日志工具类L.java；2、Toast统一管理类；3、SharedPreferences封装类SPUtils；4、单位转换类 DensityUtils；5、SD卡相关辅助类&lt;br&gt;SDCardUtils；6、屏幕相关辅助类 ScreenUtils；7、App相关辅助类；8、软键盘相关辅助类KeyBoardUtils；9、网络相关辅助类 NetUtils；10、Http相关辅助类 HttpUtils。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://blog.jobbole.com/67169/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;19个Android开发工具&lt;/a&gt;&amp;nbsp;- 19个Android 开发工具：1、XAppDbg；2、ChkBugReport；3、APKAnalyser；4、AppXplore；5、Memory Analyzer（MAT）；6、Eclipse插件SQLiteManger；7、Robotium；8、ACRA；9、Android&lt;br&gt;Layout Binder；10、Spoon；11、Android Content Provider代码生成器；12、AndroidKickStartR；13、Android Holo颜色生成器；14、ActionBar风格生成器；15、Asset Studio；16、little eye labs；17、Droid Inspector；18、Android Button Maker；19、jsonschema2pojo。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://d.apkbus.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;apkbus&lt;/a&gt;&amp;nbsp;- code4app 与 apkbus整理的Android开源资源分类，&amp;nbsp;&lt;a href=&quot;http://www.apkbus.com/plugin.php?id=codesrc&amp;amp;modo=all&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Android源代码&lt;/a&gt;&amp;nbsp;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/pcqpcq/open-source-android-apps&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;open-source-android-apps&lt;/a&gt;&amp;nbsp;- 他人收集的开源代码：Android Wear、Communication 、Education、Finance、Game、Multi-Media、News&lt;br&gt;&amp;amp; Magazines、Personalization、Productivity、Social Network、Tools、Travel &amp;amp; Local。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.codingfish.top/2015/07/07/android-developer-tools-list/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;android-developer-tools-list&lt;/a&gt;&amp;nbsp;- Android 常用开发工具 （Android Studio 插件、Android&lt;br&gt;网站、Android 系统性能调优工具、Android测试工具）。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.imooc.com/article/1281&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Android平台上最好的几款免费的代码编辑器&lt;/a&gt;&amp;nbsp;- Android平台上最好的几款免费的代码编辑器:Quoda、DroidEdit、AWD、AIDE、CppDroid。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.androidweekly.cn/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;androidweekly&lt;/a&gt;&amp;nbsp;- android技术开发周报，干货很多。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/hothero/awesome-rails-gem&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;awesome-rails-gem&lt;/a&gt;&amp;nbsp;- 收集了很多在平时使用 Rails 开发网站时经常会使用到的 Gem, 当中包括的有用户认证系统, API 接口开发, 文件上传, 站内搜索等优秀的&lt;br&gt;Gem 源。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/Freelander/Android_Data&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Android_Data&lt;/a&gt;&amp;nbsp;- 一份旨在帮助 Android 初学者快速入门以及找到适合自己学习的资料。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://segmentfault.com/a/1190000005073746&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Android通用流行框架大全&lt;/a&gt;&amp;nbsp;- Android通用流行框架大全。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</content>
            
              
                <breadCrumb title="Develop" url="http://objectyan.me/categories/Develop/"/>
              
                <breadCrumb title="Android" url="http://objectyan.me/categories/Develop/Android/"/>
              
            
        </display>
    </data>
  </url>
  
  <url>
    <loc>http://objectyan.me/2018/06/29/Android-Apk-Decompile/</loc>
    
    <lastmod>2020-04-20T01:42:16.573Z</lastmod>
    
    <changefreq>always</changefreq>
    <data>
        <display>
            <title> Android APK 反编译</title>
            <pubTime>2018-06-29T07:41:56.000Z</pubTime>
            
              
                <tag>Android</tag>
              
                <tag>Develop</tag>
              
            
            <content>&lt;h4 id=&quot;装备工具&quot;&gt;&lt;a href=&quot;#装备工具&quot; class=&quot;headerlink&quot; title=&quot;装备工具&quot;&gt;&lt;/a&gt;装备工具&lt;/h4&gt;&lt;p&gt;1.apktool &lt;a href=&quot;https://bitbucket.org/iBotPeaches/apktool/downloads/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;下载&lt;/a&gt; &lt;a href=&quot;https://github.com/iBotPeaches/Apktool&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;github&lt;/a&gt;&lt;br&gt;2.dex2jar &lt;a href=&quot;https://github.com/pxb1988/dex2jar/releases&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;下载&lt;/a&gt; &lt;a href=&quot;https://github.com/pxb1988/dex2jar&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;github&lt;/a&gt;&lt;br&gt;3.jd-gui &lt;a href=&quot;https://github.com/java-decompiler/jd-gui/releases&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;下载&lt;/a&gt; &lt;a href=&quot;https://github.com/java-decompiler/jd-gui&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;github&lt;/a&gt;&lt;/p&gt;
&lt;h4 id=&quot;使用apktool反编译&quot;&gt;&lt;a href=&quot;#使用apktool反编译&quot; class=&quot;headerlink&quot; title=&quot;使用apktool反编译&quot;&gt;&lt;/a&gt;使用&lt;code&gt;apktool&lt;/code&gt;反编译&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;apktool d -f [*.apk] [dir]&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;使用apktool进行编译&quot;&gt;&lt;a href=&quot;#使用apktool进行编译&quot; class=&quot;headerlink&quot; title=&quot;使用apktool进行编译&quot;&gt;&lt;/a&gt;使用&lt;code&gt;apktool&lt;/code&gt;进行编译&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;apktool b [dir]&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;使用dex2jar反编译apktool的dex文件&quot;&gt;&lt;a href=&quot;#使用dex2jar反编译apktool的dex文件&quot; class=&quot;headerlink&quot; title=&quot;使用dex2jar反编译apktool的dex文件&quot;&gt;&lt;/a&gt;使用&lt;code&gt;dex2jar&lt;/code&gt;反编译&lt;code&gt;apktool&lt;/code&gt;的&lt;code&gt;dex&lt;/code&gt;文件&lt;/h4&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;d2j-dex2jar.sh [dir]/build/apk/*.dex&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;使用jd-gui导出源码&quot;&gt;&lt;a href=&quot;#使用jd-gui导出源码&quot; class=&quot;headerlink&quot; title=&quot;使用jd-gui导出源码&quot;&gt;&lt;/a&gt;使用&lt;code&gt;jd-gui&lt;/code&gt;导出源码&lt;/h4&gt;</content>
            
              
                <breadCrumb title="Develop" url="http://objectyan.me/categories/Develop/"/>
              
                <breadCrumb title="Android" url="http://objectyan.me/categories/Develop/Android/"/>
              
            
        </display>
    </data>
  </url>
  
  <url>
    <loc>http://objectyan.me/2018/05/29/Android-Kotlin-Use-Tabs/</loc>
    
    <lastmod>2020-04-20T01:42:16.573Z</lastmod>
    
    <changefreq>always</changefreq>
    <data>
        <display>
            <title> TabLayout+ViewPager+Fragment的使用</title>
            <pubTime>2018-05-29T09:31:00.000Z</pubTime>
            
              
                <tag>Android</tag>
              
                <tag>Develop</tag>
              
                <tag>Kotlin</tag>
              
            
            <content>&lt;h4 id=&quot;源代码&quot;&gt;&lt;a href=&quot;#源代码&quot; class=&quot;headerlink&quot; title=&quot;源代码&quot;&gt;&lt;/a&gt;源代码&lt;/h4&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/objectyan/FuelRecord&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/objectyan/FuelRecord&lt;/a&gt;&lt;/p&gt;
&lt;h4 id=&quot;配置-app-build-gradle&quot;&gt;&lt;a href=&quot;#配置-app-build-gradle&quot; class=&quot;headerlink&quot; title=&quot;配置 app\build.gradle&quot;&gt;&lt;/a&gt;配置 &lt;code&gt;app\build.gradle&lt;/code&gt;&lt;/h4&gt;&lt;figure class=&quot;highlight gradle&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;dependencies&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    ...&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    implementation &lt;span class=&quot;string&quot;&gt;&#39;com.android.support:support-v4:+&#39;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    implementation &lt;span class=&quot;string&quot;&gt;&#39;com.android.support:appcompat-v7:+&#39;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    implementation &lt;span class=&quot;string&quot;&gt;&#39;com.android.support:design:+&#39;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    ...&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;创建-Layout&quot;&gt;&lt;a href=&quot;#创建-Layout&quot; class=&quot;headerlink&quot; title=&quot;创建 Layout&quot;&gt;&lt;/a&gt;创建 Layout&lt;/h4&gt;&lt;figure class=&quot;highlight xml&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;29&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;...&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;&lt;span class=&quot;name&quot;&gt;android.support.design.widget.TabLayout&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;tag&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;android:id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&quot;@+id/home_tab&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;tag&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;android:layout_width&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&quot;match_parent&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;tag&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;android:layout_height&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&quot;?attr/actionBarSize&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;tag&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;android:layout_gravity&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&quot;bottom&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;tag&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;android:background&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&quot;@color/colorPrimary&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;tag&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;android:fillViewport&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&quot;false&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;tag&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;app:tabMode&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&quot;fixed&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;tag&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;app:layout_scrollFlags&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&quot;scroll&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;tag&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;app:tabIndicatorColor&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&quot;#057523&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;tag&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;app:tabIndicatorHeight&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&quot;2.0dp&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;tag&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;app:tabSelectedTextColor&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&quot;@color/colorWhile&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;tag&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;app:tabTextColor&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&quot;#ced0d3&quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;tag&quot;&gt;&amp;lt;&lt;span class=&quot;name&quot;&gt;android.support.design.widget.TabItem&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;tag&quot;&gt;        &lt;span class=&quot;attr&quot;&gt;android:layout_width&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&quot;match_parent&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;tag&quot;&gt;        &lt;span class=&quot;attr&quot;&gt;android:layout_height&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&quot;match_parent&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;tag&quot;&gt;        &lt;span class=&quot;attr&quot;&gt;android:text&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&quot;@string/home_main_tab_overview&quot;&lt;/span&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;tag&quot;&gt;&amp;lt;&lt;span class=&quot;name&quot;&gt;android.support.design.widget.TabItem&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;tag&quot;&gt;        &lt;span class=&quot;attr&quot;&gt;android:layout_width&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&quot;match_parent&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;tag&quot;&gt;        &lt;span class=&quot;attr&quot;&gt;android:layout_height&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&quot;match_parent&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;tag&quot;&gt;        &lt;span class=&quot;attr&quot;&gt;android:text&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&quot;@string/home_main_tab_calculator&quot;&lt;/span&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;/&lt;span class=&quot;name&quot;&gt;android.support.design.widget.TabLayout&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;&lt;span class=&quot;name&quot;&gt;android.support.v4.view.ViewPager&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;tag&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;android:id&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&quot;@+id/home_viewpager&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;tag&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;android:layout_width&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&quot;match_parent&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;tag&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;android:layout_height&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&quot;match_parent&quot;&lt;/span&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;...&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;创建-PagerAdapter&quot;&gt;&lt;a href=&quot;#创建-PagerAdapter&quot; class=&quot;headerlink&quot; title=&quot;创建 PagerAdapter&quot;&gt;&lt;/a&gt;创建 &lt;code&gt;PagerAdapter&lt;/code&gt;&lt;/h4&gt;&lt;figure class=&quot;highlight kotlin&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;package&lt;/span&gt; me.objectyan.fuelrecord.adapter&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; android.support.v4.app.Fragment&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; android.support.v4.app.FragmentManager&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;import&lt;/span&gt; android.support.v4.app.FragmentPagerAdapter&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;class&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;HomeTabPagerAdapter&lt;/span&gt;&lt;/span&gt;(fm: FragmentManager?, &lt;span class=&quot;keyword&quot;&gt;var&lt;/span&gt; list: List&amp;lt;Fragment&amp;gt;) : FragmentPagerAdapter(fm) &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;keyword&quot;&gt;override&lt;/span&gt; &lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;getItem&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(position: &lt;span class=&quot;type&quot;&gt;Int&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;: Fragment &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; list.&lt;span class=&quot;keyword&quot;&gt;get&lt;/span&gt;(position)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;keyword&quot;&gt;override&lt;/span&gt; &lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;getCount&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;()&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;built_in&quot;&gt;Int&lt;/span&gt; &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; list.size&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;h4 id=&quot;配置-Tab-与-ViewPager&quot;&gt;&lt;a href=&quot;#配置-Tab-与-ViewPager&quot; class=&quot;headerlink&quot; title=&quot;配置 Tab 与 ViewPager&quot;&gt;&lt;/a&gt;配置 Tab 与 ViewPager&lt;/h4&gt;&lt;figure class=&quot;highlight kotlin&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;29&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;30&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;31&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;32&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;33&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;34&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;35&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;36&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;37&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;38&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;39&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;40&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;41&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;42&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;43&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;44&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;45&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;...&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;var&lt;/span&gt; tab = view.findViewById&amp;lt;TabLayout&amp;gt;(R.id.home_tab)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;val&lt;/span&gt; pager = view.findViewById&amp;lt;ViewPager&amp;gt;(R.id.home_viewpager)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;// 绑定tab的试图集合&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;val&lt;/span&gt; fragmentList = listOf&amp;lt;Fragment&amp;gt;(OverviewFragment(), CalculatorFragment())&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;pager.run &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    adapter = HomeTabPagerAdapter(fragmentManager, fragmentList)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;comment&quot;&gt;// 此事件必须设置 否则无法切换&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    addOnPageChangeListener(&lt;span class=&quot;keyword&quot;&gt;object&lt;/span&gt; : ViewPager.OnPageChangeListener &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;keyword&quot;&gt;override&lt;/span&gt; &lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;onPageScrollStateChanged&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(state: &lt;span class=&quot;type&quot;&gt;Int&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt; &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;keyword&quot;&gt;override&lt;/span&gt; &lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;onPageScrolled&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(position: &lt;span class=&quot;type&quot;&gt;Int&lt;/span&gt;, positionOffset: &lt;span class=&quot;type&quot;&gt;Float&lt;/span&gt;, positionOffsetPixels: &lt;span class=&quot;type&quot;&gt;Int&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt; &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;keyword&quot;&gt;override&lt;/span&gt; &lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;onPageSelected&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(position: &lt;span class=&quot;type&quot;&gt;Int&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt; &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;tab.run &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    setupWithViewPager(pager)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    addOnTabSelectedListener(&lt;span class=&quot;keyword&quot;&gt;object&lt;/span&gt; : TabLayout.OnTabSelectedListener &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;keyword&quot;&gt;override&lt;/span&gt; &lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;onTabSelected&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(tab: &lt;span class=&quot;type&quot;&gt;TabLayout&lt;/span&gt;.&lt;span class=&quot;type&quot;&gt;Tab&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt; &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;keyword&quot;&gt;override&lt;/span&gt; &lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;onTabUnselected&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(tab: &lt;span class=&quot;type&quot;&gt;TabLayout&lt;/span&gt;.&lt;span class=&quot;type&quot;&gt;Tab&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt; &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;keyword&quot;&gt;override&lt;/span&gt; &lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;onTabReselected&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(tab: &lt;span class=&quot;type&quot;&gt;TabLayout&lt;/span&gt;.&lt;span class=&quot;type&quot;&gt;Tab&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt; &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;comment&quot;&gt;// 设置Tab Text 必须在绑定 ViewPager 后，否则无法显示Tab Text&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    getTabAt(&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;)!!.setText(R.string.home_main_tab_overview)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    getTabAt(&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;)!!.setText(R.string.home_main_tab_calculator)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;...&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;</content>
            
              
                <breadCrumb title="Develop" url="http://objectyan.me/categories/Develop/"/>
              
                <breadCrumb title="Android" url="http://objectyan.me/categories/Develop/Android/"/>
              
            
        </display>
    </data>
  </url>
  
  <url>
    <loc>http://objectyan.me/2014/03/24/Algorithm-Bubbling/</loc>
    
    <lastmod>2020-04-20T01:42:16.572Z</lastmod>
    
    <changefreq>always</changefreq>
    <data>
        <display>
            <title> 冒泡算法</title>
            <pubTime>2014-03-24T08:55:31.000Z</pubTime>
            
              
                <tag>Bubbling</tag>
              
            
            <content>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;冒泡 法则： 规则是 将 第一个数 与 第二个想 比较 如果 第一个数 大于 第二个数 将 其两个位置相换&lt;/strong&gt; &lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure class=&quot;highlight c&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;29&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;30&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;class&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;Dome&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;class&quot;&gt;    &amp;#123;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;Main&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(&lt;span class=&quot;built_in&quot;&gt;string&lt;/span&gt;[] args)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;        &lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &lt;span class=&quot;comment&quot;&gt;//定义数值数组&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt;[] nums = &lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt;[&lt;span class=&quot;number&quot;&gt;10&lt;/span&gt;] &amp;#123; &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;, &lt;span class=&quot;number&quot;&gt;4&lt;/span&gt;, &lt;span class=&quot;number&quot;&gt;2&lt;/span&gt;, &lt;span class=&quot;number&quot;&gt;6&lt;/span&gt;, &lt;span class=&quot;number&quot;&gt;3&lt;/span&gt;, &lt;span class=&quot;number&quot;&gt;10&lt;/span&gt;, &lt;span class=&quot;number&quot;&gt;100&lt;/span&gt;, &lt;span class=&quot;number&quot;&gt;20&lt;/span&gt;, &lt;span class=&quot;number&quot;&gt;30&lt;/span&gt;, &lt;span class=&quot;number&quot;&gt;20&lt;/span&gt; &amp;#125;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &lt;span class=&quot;comment&quot;&gt;//冒泡算法的  规则是 将 第一个数 与 第二个想 比较 如果 第一个数 大于 第二个数 将 其两个位置相换 &lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &lt;span class=&quot;comment&quot;&gt;//num.Length -1 是只遍历到 倒数第一位 &lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i = &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;; i &amp;lt; nums.Length - &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;; i++)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                &lt;span class=&quot;comment&quot;&gt;//nums.Length 是将 数组中的第i个数 与 该数组中 除第i个意外的所有 数字相比较 如果 第一个数 大于 第二个数 将 其两个位置相换 &lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                &lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; j = i + &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;; j &amp;lt; nums.Length; j++)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                    &lt;span class=&quot;comment&quot;&gt;//前一个 大于 第二个 相换 &lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                    &lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (nums[i] &amp;gt; nums[j])&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                    &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                        &lt;span class=&quot;comment&quot;&gt;//temp 保存前一个的值 &lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                        &lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; temp = nums[i];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                        nums[i] = nums[j];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                        nums[j] = temp;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                    &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            foreach (var item in nums)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                &lt;span class=&quot;built_in&quot;&gt;Console&lt;/span&gt;.WriteLine(item);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;</content>
            
              
                <breadCrumb title="Algotithm" url="http://objectyan.me/categories/Algotithm/"/>
              
            
        </display>
    </data>
  </url>
  
  <url>
    <loc>http://objectyan.me/2014/03/24/Algorithm-LeonardoFibonacci/</loc>
    
    <lastmod>2020-04-20T01:42:16.572Z</lastmod>
    
    <changefreq>always</changefreq>
    <data>
        <display>
            <title> 使用递归计算斐波那契数列</title>
            <pubTime>2014-03-24T08:30:10.000Z</pubTime>
            
              
                <tag>LeonardoFibonacci</tag>
              
                <tag>recursion</tag>
              
            
            <content>&lt;p&gt;1 1 2 3 5 8 13 ……&lt;/p&gt;
&lt;p&gt;1   &lt;/p&gt;
&lt;p&gt;1   0 + 1&lt;/p&gt;
&lt;p&gt;2   1 + 1&lt;/p&gt;
&lt;p&gt;3   1 + 2&lt;/p&gt;
&lt;p&gt;5   2 + 3&lt;/p&gt;
&lt;p&gt;8   3 + 5&lt;/p&gt;
&lt;p&gt;……&lt;/p&gt;
&lt;p&gt;从数字中分析 前两个数之和是第三个数 因此 使用递归 将多少层设置  num-1 为第二位数 num-2 为第一位数 依次类推 直到 num-1 num-2 的小于 0 或者 等于 1 时 跳出递归 再将 内存中所递归的值将以计算  得出 第30位的值&lt;/p&gt;
&lt;figure class=&quot;highlight c&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;26&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;class&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;Dome&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;class&quot;&gt;    &amp;#123;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;Main&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(&lt;span class=&quot;built_in&quot;&gt;string&lt;/span&gt;[] args)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;        &lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &lt;span class=&quot;comment&quot;&gt;//1 1 2 3 5 8 13 .... 计算第30个数字的值是多少&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; num = &lt;span class=&quot;number&quot;&gt;30&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &lt;span class=&quot;built_in&quot;&gt;Console&lt;/span&gt;.WriteLine(Num(num));&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;Num&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; num)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;        &lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (num &amp;lt;= &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &lt;span class=&quot;keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (num == &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &lt;span class=&quot;keyword&quot;&gt;else&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                &lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i = Num(num - &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;) + Num(num - &lt;span class=&quot;number&quot;&gt;2&lt;/span&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;                &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; i;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;            &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
</content>
            
              
                <breadCrumb title="Algotithm" url="http://objectyan.me/categories/Algotithm/"/>
              
            
        </display>
    </data>
  </url>
  
  <url>
    <loc>http://objectyan.me/2019/01/02/Android-Add-Dependencies/</loc>
    
    <lastmod>2020-04-20T01:42:16.572Z</lastmod>
    
    <changefreq>always</changefreq>
    <data>
        <display>
            <title> Android 添加 Dependencies 报错 Manifest merger failed</title>
            <pubTime>2019-01-02T07:39:07.000Z</pubTime>
            
              
                <tag>Android</tag>
              
                <tag>Develop</tag>
              
            
            <content>&lt;h4 id=&quot;错误信息&quot;&gt;&lt;a href=&quot;#错误信息&quot; class=&quot;headerlink&quot; title=&quot;错误信息&quot;&gt;&lt;/a&gt;错误信息&lt;/h4&gt;&lt;figure class=&quot;highlight java&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;Manifest merger failed : Attribute application&lt;span class=&quot;meta&quot;&gt;@appComponentFactory&lt;/span&gt; value=(android.support.v4.app.CoreComponentFactory) from [com.android.support:support-compat:&lt;span class=&quot;number&quot;&gt;28.0&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;.0&lt;/span&gt;] AndroidManifest.xml:&lt;span class=&quot;number&quot;&gt;22&lt;/span&gt;:&lt;span class=&quot;number&quot;&gt;18&lt;/span&gt;-&lt;span class=&quot;number&quot;&gt;91&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	is also present at [androidx.core:core:&lt;span class=&quot;number&quot;&gt;1.0&lt;/span&gt;&lt;span class=&quot;number&quot;&gt;.0&lt;/span&gt;] AndroidManifest.xml:&lt;span class=&quot;number&quot;&gt;22&lt;/span&gt;:&lt;span class=&quot;number&quot;&gt;18&lt;/span&gt;-&lt;span class=&quot;number&quot;&gt;86&lt;/span&gt; value=(androidx.core.app.CoreComponentFactory).&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	Suggestion: add &lt;span class=&quot;string&quot;&gt;&#39;tools:replace=&quot;android:appComponentFactory&quot;&#39;&lt;/span&gt; to &amp;lt;application&amp;gt; element at AndroidManifest.xml:&lt;span class=&quot;number&quot;&gt;6&lt;/span&gt;:&lt;span class=&quot;number&quot;&gt;5&lt;/span&gt;-&lt;span class=&quot;number&quot;&gt;25&lt;/span&gt;:&lt;span class=&quot;number&quot;&gt;19&lt;/span&gt; to override.&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;h4 id=&quot;解决方案-修改AndroidManifest-xml文件&quot;&gt;&lt;a href=&quot;#解决方案-修改AndroidManifest-xml文件&quot; class=&quot;headerlink&quot; title=&quot;解决方案 修改AndroidManifest.xml文件&quot;&gt;&lt;/a&gt;解决方案 修改&lt;code&gt;AndroidManifest.xml&lt;/code&gt;文件&lt;/h4&gt;&lt;figure class=&quot;highlight xml&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;&lt;span class=&quot;name&quot;&gt;manifest&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;tag&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;...&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;tag&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;xmlns:tools&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&quot;http://schemas.android.com/tools&quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    ...&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;comment&quot;&gt;&amp;lt;!-- 添加如下属性 --&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;tag&quot;&gt;&amp;lt;&lt;span class=&quot;name&quot;&gt;application&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;tag&quot;&gt;        &lt;span class=&quot;attr&quot;&gt;...&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;tag&quot;&gt;        &lt;span class=&quot;attr&quot;&gt;tools:replace&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&quot;android:appComponentFactory&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;tag&quot;&gt;        &lt;span class=&quot;attr&quot;&gt;android:appComponentFactory&lt;/span&gt;=&lt;span class=&quot;string&quot;&gt;&quot;@string/app_name&quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        ...&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;tag&quot;&gt;&amp;lt;/&lt;span class=&quot;name&quot;&gt;application&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;/&lt;span class=&quot;name&quot;&gt;manifest&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;</content>
            
              
                <breadCrumb title="Develop" url="http://objectyan.me/categories/Develop/"/>
              
                <breadCrumb title="Android" url="http://objectyan.me/categories/Develop/Android/"/>
              
            
        </display>
    </data>
  </url>
  
</urlset>