﻿<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>学习日记 &#187; Android studio</title>
	<atom:link href="https://www.softwareace.cn/?feed=rss2&#038;tag=android-studio" rel="self" type="application/rss+xml" />
	<link>https://www.softwareace.cn</link>
	<description>时刻想着为自己的产品多做一些对他好的事情</description>
	<lastBuildDate>Fri, 20 Mar 2026 06:58:28 +0000</lastBuildDate>
	<language>zh-CN</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	
	<item>
		<title>Android studio 使用心得(四)&#8212;android studio 多渠道打包(二)</title>
		<link>https://www.softwareace.cn/?p=1155</link>
		<comments>https://www.softwareace.cn/?p=1155#comments</comments>
		<pubDate>Thu, 29 Jan 2015 01:34:59 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[开发工具]]></category>
		<category><![CDATA[Android studio]]></category>

		<guid isPermaLink="false">http://www.softwareace.cn/?p=1155</guid>
		<description><![CDATA[Android studio 使用心得(四)&#8212;android studio 多渠道打包 这篇文章讲 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><a style="color: #ff8373;" href="http://my.oschina.net/aibenben/blog/370577" target="_blank" rel="nofollow">Android studio 使用心得(四)&#8212;android studio 多渠道打包</a> 这篇文章讲了一种打包方式。是直接在android studio 里面可视化操作，结合配置文件。我个人觉得严格上来讲是不完全正确的操作，因为配置文件里面的签名文件根本没有用到。但是，打出来的包绝对没问题的。这篇主要是介绍直接在dos命令里面使用gradle命令打包。两行命令，简单<span style="color: #e53333;"><strong>gradle <span style="color: #000000;">clean</span></strong></span><span style="color: #e53333;"> ,gradle build。</span></p>
<p><span style="color: #e53333;">   <span style="color: #000000;">1,配置文件还是和之前的一样，我才贴一次代码</span></span></p>
<p><span style="color: #e53333;"><span style="color: #000000;">    </span></span></p>
<div>
<div id="highlighter_298588" class="syntaxhighlighter  groovy">
<div class="toolbar" style="color: white !important;"><a class="toolbar_item command_help help" style="color: white !important;" href="http://my.oschina.net/aibenben/blog/370985#">?</a></div>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter" style="color: #afafaf !important;">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
<div class="line number17 index16 alt2">17</div>
<div class="line number18 index17 alt1">18</div>
<div class="line number19 index18 alt2">19</div>
<div class="line number20 index19 alt1">20</div>
<div class="line number21 index20 alt2">21</div>
<div class="line number22 index21 alt1">22</div>
<div class="line number23 index22 alt2">23</div>
<div class="line number24 index23 alt1">24</div>
<div class="line number25 index24 alt2">25</div>
<div class="line number26 index25 alt1">26</div>
<div class="line number27 index26 alt2">27</div>
<div class="line number28 index27 alt1">28</div>
<div class="line number29 index28 alt2">29</div>
<div class="line number30 index29 alt1">30</div>
<div class="line number31 index30 alt2">31</div>
<div class="line number32 index31 alt1">32</div>
<div class="line number33 index32 alt2">33</div>
<div class="line number34 index33 alt1">34</div>
<div class="line number35 index34 alt2">35</div>
<div class="line number36 index35 alt1">36</div>
<div class="line number37 index36 alt2">37</div>
<div class="line number38 index37 alt1">38</div>
<div class="line number39 index38 alt2">39</div>
<div class="line number40 index39 alt1">40</div>
<div class="line number41 index40 alt2">41</div>
<div class="line number42 index41 alt1">42</div>
<div class="line number43 index42 alt2">43</div>
<div class="line number44 index43 alt1">44</div>
<div class="line number45 index44 alt2">45</div>
<div class="line number46 index45 alt1">46</div>
<div class="line number47 index46 alt2">47</div>
<div class="line number48 index47 alt1">48</div>
<div class="line number49 index48 alt2">49</div>
<div class="line number50 index49 alt1">50</div>
<div class="line number51 index50 alt2">51</div>
<div class="line number52 index51 alt1">52</div>
<div class="line number53 index52 alt2">53</div>
<div class="line number54 index53 alt1">54</div>
<div class="line number55 index54 alt2">55</div>
<div class="line number56 index55 alt1">56</div>
<div class="line number57 index56 alt2">57</div>
<div class="line number58 index57 alt1">58</div>
<div class="line number59 index58 alt2">59</div>
<div class="line number60 index59 alt1">60</div>
<div class="line number61 index60 alt2">61</div>
<div class="line number62 index61 alt1">62</div>
<div class="line number63 index62 alt2">63</div>
<div class="line number64 index63 alt1">64</div>
<div class="line number65 index64 alt2">65</div>
<div class="line number66 index65 alt1">66</div>
<div class="line number67 index66 alt2">67</div>
<div class="line number68 index67 alt1">68</div>
<div class="line number69 index68 alt2">69</div>
<div class="line number70 index69 alt1">70</div>
<div class="line number71 index70 alt2">71</div>
<div class="line number72 index71 alt1">72</div>
<div class="line number73 index72 alt2">73</div>
<div class="line number74 index73 alt1">74</div>
<div class="line number75 index74 alt2">75</div>
<div class="line number76 index75 alt1">76</div>
<div class="line number77 index76 alt2">77</div>
<div class="line number78 index77 alt1">78</div>
<div class="line number79 index78 alt2">79</div>
<div class="line number80 index79 alt1">80</div>
<div class="line number81 index80 alt2">81</div>
<div class="line number82 index81 alt1">82</div>
<div class="line number83 index82 alt2">83</div>
<div class="line number84 index83 alt1">84</div>
<div class="line number85 index84 alt2">85</div>
<div class="line number86 index85 alt1">86</div>
<div class="line number87 index86 alt2">87</div>
<div class="line number88 index87 alt1">88</div>
<div class="line number89 index88 alt2">89</div>
<div class="line number90 index89 alt1">90</div>
<div class="line number91 index90 alt2">91</div>
<div class="line number92 index91 alt1">92</div>
<div class="line number93 index92 alt2">93</div>
<div class="line number94 index93 alt1">94</div>
<div class="line number95 index94 alt2">95</div>
<div class="line number96 index95 alt1">96</div>
<div class="line number97 index96 alt2">97</div>
<div class="line number98 index97 alt1">98</div>
<div class="line number99 index98 alt2">99</div>
<div class="line number100 index99 alt1">100</div>
<div class="line number101 index100 alt2">101</div>
<div class="line number102 index101 alt1">102</div>
<div class="line number103 index102 alt2">103</div>
<div class="line number104 index103 alt1">104</div>
<div class="line number105 index104 alt2">105</div>
<div class="line number106 index105 alt1">106</div>
<div class="line number107 index106 alt2">107</div>
<div class="line number108 index107 alt1">108</div>
<div class="line number109 index108 alt2">109</div>
<div class="line number110 index109 alt1">110</div>
<div class="line number111 index110 alt2">111</div>
<div class="line number112 index111 alt1">112</div>
<div class="line number113 index112 alt2">113</div>
<div class="line number114 index113 alt1">114</div>
<div class="line number115 index114 alt2">115</div>
<div class="line number116 index115 alt1">116</div>
<div class="line number117 index116 alt2">117</div>
<div class="line number118 index117 alt1">118</div>
<div class="line number119 index118 alt2">119</div>
<div class="line number120 index119 alt1">120</div>
<div class="line number121 index120 alt2">121</div>
<div class="line number122 index121 alt1">122</div>
<div class="line number123 index122 alt2">123</div>
<div class="line number124 index123 alt1">124</div>
<div class="line number125 index124 alt2">125</div>
<div class="line number126 index125 alt1">126</div>
<div class="line number127 index126 alt2">127</div>
<div class="line number128 index127 alt1">128</div>
<div class="line number129 index128 alt2">129</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="groovy plain">apply plugin: </code><code class="groovy string" style="color: blue !important;">'com.android.application'</code></div>
<div class="line number2 index1 alt1"></div>
<div class="line number3 index2 alt2"><code class="groovy plain">dependencies {</code></div>
<div class="line number4 index3 alt1"><code class="groovy comments" style="color: #008200 !important;">//    &lt;span&gt;&lt;/span&gt;compile fileTree(dir: 'libs', include: '*.jar')</code></div>
<div class="line number5 index4 alt2"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">compile project(</code><code class="groovy string" style="color: blue !important;">':appcompat_v7_8'</code><code class="groovy plain">)</code></div>
<div class="line number6 index5 alt1"><code class="groovy plain">}</code></div>
<div class="line number7 index6 alt2"><code class="groovy plain">buildscript {</code></div>
<div class="line number8 index7 alt1"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">repositories {</code></div>
<div class="line number9 index8 alt2"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">mavenCentral()</code></div>
<div class="line number10 index9 alt1"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">}</code></div>
<div class="line number11 index10 alt2"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">dependencies {</code></div>
<div class="line number12 index11 alt1"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">classpath </code><code class="groovy string" style="color: blue !important;">'com.android.tools.build:gradle:1.0.0'</code></div>
<div class="line number13 index12 alt2"></div>
<div class="line number14 index13 alt1"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">}</code></div>
<div class="line number15 index14 alt2"><code class="groovy plain">}</code></div>
<div class="line number16 index15 alt1"><code class="groovy plain">android {</code></div>
<div class="line number17 index16 alt2"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">compileSdkVersion </code><code class="groovy value" style="color: #009900 !important;">19</code></div>
<div class="line number18 index17 alt1"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">buildToolsVersion </code><code class="groovy string" style="color: blue !important;">"21.0.2"</code></div>
<div class="line number19 index18 alt2"></div>
<div class="line number20 index19 alt1"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">sourceSets {</code></div>
<div class="line number21 index20 alt2"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">main {</code></div>
<div class="line number22 index21 alt1"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy plain">manifest.srcFile </code><code class="groovy string" style="color: blue !important;">'AndroidManifest.xml'</code></div>
<div class="line number23 index22 alt2"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy plain">java.srcDirs = [</code><code class="groovy string" style="color: blue !important;">'src'</code><code class="groovy plain">]</code></div>
<div class="line number24 index23 alt1"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy plain">resources.srcDirs = [</code><code class="groovy string" style="color: blue !important;">'src'</code><code class="groovy plain">]</code></div>
<div class="line number25 index24 alt2"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy plain">aidl.srcDirs = [</code><code class="groovy string" style="color: blue !important;">'src'</code><code class="groovy plain">]</code></div>
<div class="line number26 index25 alt1"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy plain">renderscript.srcDirs = [</code><code class="groovy string" style="color: blue !important;">'src'</code><code class="groovy plain">]</code></div>
<div class="line number27 index26 alt2"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy plain">res.srcDirs = [</code><code class="groovy string" style="color: blue !important;">'res'</code><code class="groovy plain">]</code></div>
<div class="line number28 index27 alt1"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy plain">assets.srcDirs = [</code><code class="groovy string" style="color: blue !important;">'assets'</code><code class="groovy plain">]</code></div>
<div class="line number29 index28 alt2"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">}</code></div>
<div class="line number30 index29 alt1"></div>
<div class="line number31 index30 alt2"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy comments" style="color: #008200 !important;">// Move the tests to tests/java, tests/res, etc...</code></div>
<div class="line number32 index31 alt1"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">instrumentTest.setRoot(</code><code class="groovy string" style="color: blue !important;">'tests'</code><code class="groovy plain">)</code></div>
<div class="line number33 index32 alt2"></div>
<div class="line number34 index33 alt1"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy comments" style="color: #008200 !important;">// Move the build types to build-types/&lt;type&gt;</code></div>
<div class="line number35 index34 alt2"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy comments" style="color: #008200 !important;">// For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...</code></div>
<div class="line number36 index35 alt1"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy comments" style="color: #008200 !important;">// This moves them out of them default location under src/&lt;type&gt;/... which would</code></div>
<div class="line number37 index36 alt2"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy comments" style="color: #008200 !important;">// conflict with src/ being used by the main source set.</code></div>
<div class="line number38 index37 alt1"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy comments" style="color: #008200 !important;">// Adding new build types or product flavors should be accompanied</code></div>
<div class="line number39 index38 alt2"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy comments" style="color: #008200 !important;">// by a similar customization.</code></div>
<div class="line number40 index39 alt1"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">debug.setRoot(</code><code class="groovy string" style="color: blue !important;">'build-types/debug'</code><code class="groovy plain">)</code></div>
<div class="line number41 index40 alt2"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">release.setRoot(</code><code class="groovy string" style="color: blue !important;">'build-types/release'</code><code class="groovy plain">)</code></div>
<div class="line number42 index41 alt1"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">}</code></div>
<div class="line number43 index42 alt2"></div>
<div class="line number44 index43 alt1"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">defaultConfig {</code></div>
<div class="line number45 index44 alt2"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">applicationId </code><code class="groovy string" style="color: blue !important;">"com.example.demo4"</code></div>
<div class="line number46 index45 alt1"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">minSdkVersion </code><code class="groovy value" style="color: #009900 !important;">8</code></div>
<div class="line number47 index46 alt2"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">targetSdkVersion </code><code class="groovy value" style="color: #009900 !important;">19</code></div>
<div class="line number48 index47 alt1"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">versionCode </code><code class="groovy value" style="color: #009900 !important;">1</code></div>
<div class="line number49 index48 alt2"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">versionName </code><code class="groovy string" style="color: blue !important;">"1.0"</code></div>
<div class="line number50 index49 alt1"></div>
<div class="line number51 index50 alt2"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy comments" style="color: #008200 !important;">// dex突破65535的限制</code></div>
<div class="line number52 index51 alt1"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">multiDexEnabled true</code></div>
<div class="line number53 index52 alt2"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy comments" style="color: #008200 !important;">// AndroidManifest.xml 里面UMENG_CHANNEL的value为 ${UMENG_CHANNEL_VALUE}</code></div>
<div class="line number54 index53 alt1"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">manifestPlaceholders = [UMENG_CHANNEL_VALUE: </code><code class="groovy string" style="color: blue !important;">"channel_name"</code><code class="groovy plain">]</code></div>
<div class="line number55 index54 alt2"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">}</code></div>
<div class="line number56 index55 alt1"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy comments" style="color: #008200 !important;">//执行lint检查，有任何的错误或者警告提示，都会终止构建，我们可以将其关掉。</code></div>
<div class="line number57 index56 alt2"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">lintOptions {</code></div>
<div class="line number58 index57 alt1"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">abortOnError false</code></div>
<div class="line number59 index58 alt2"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">}</code></div>
<div class="line number60 index59 alt1"></div>
<div class="line number61 index60 alt2"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy comments" style="color: #008200 !important;">//签名</code></div>
<div class="line number62 index61 alt1"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">signingConfigs {</code></div>
<div class="line number63 index62 alt2"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">debug {</code></div>
<div class="line number64 index63 alt1"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy plain">storeFile file(</code><code class="groovy string" style="color: blue !important;">"C:/Users/xxx/.android/debug.keystore"</code><code class="groovy plain">)</code></div>
<div class="line number65 index64 alt2"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">}</code></div>
<div class="line number66 index65 alt1"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">relealse {</code></div>
<div class="line number67 index66 alt2"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy comments" style="color: #008200 !important;">//这样写就得把demo.jk文件放在项目目录</code></div>
<div class="line number68 index67 alt1"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy plain">storeFile file(</code><code class="groovy string" style="color: blue !important;">"demo.jks"</code><code class="groovy plain">)</code></div>
<div class="line number69 index68 alt2"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy plain">storePassword </code><code class="groovy string" style="color: blue !important;">"demo123456"</code></div>
<div class="line number70 index69 alt1"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy plain">keyAlias </code><code class="groovy string" style="color: blue !important;">"demo_4"</code></div>
<div class="line number71 index70 alt2"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy plain">keyPassword </code><code class="groovy string" style="color: blue !important;">"demo123456"</code></div>
<div class="line number72 index71 alt1"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">}</code></div>
<div class="line number73 index72 alt2"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">}</code></div>
<div class="line number74 index73 alt1"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">buildTypes {</code></div>
<div class="line number75 index74 alt2"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">debug {</code></div>
<div class="line number76 index75 alt1"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy comments" style="color: #008200 !important;">// 显示Log</code></div>
<div class="line number77 index76 alt2"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy plain">buildConfigField </code><code class="groovy string" style="color: blue !important;">"boolean"</code><code class="groovy plain">, </code><code class="groovy string" style="color: blue !important;">"LOG_DEBUG"</code><code class="groovy plain">, </code><code class="groovy string" style="color: blue !important;">"true"</code></div>
<div class="line number78 index77 alt1"></div>
<div class="line number79 index78 alt2"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy plain">versionNameSuffix </code><code class="groovy string" style="color: blue !important;">"-debug"</code></div>
<div class="line number80 index79 alt1"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy plain">minifyEnabled false</code></div>
<div class="line number81 index80 alt2"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy plain">zipAlignEnabled false</code></div>
<div class="line number82 index81 alt1"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy plain">shrinkResources false</code></div>
<div class="line number83 index82 alt2"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy plain">signingConfig signingConfigs.debug</code></div>
<div class="line number84 index83 alt1"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">}</code></div>
<div class="line number85 index84 alt2"></div>
<div class="line number86 index85 alt1"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">release {</code></div>
<div class="line number87 index86 alt2"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy comments" style="color: #008200 !important;">// 不显示Log</code></div>
<div class="line number88 index87 alt1"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy plain">buildConfigField </code><code class="groovy string" style="color: blue !important;">"boolean"</code><code class="groovy plain">, </code><code class="groovy string" style="color: blue !important;">"LOG_DEBUG"</code><code class="groovy plain">, </code><code class="groovy string" style="color: blue !important;">"false"</code></div>
<div class="line number89 index88 alt2"></div>
<div class="line number90 index89 alt1"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy comments" style="color: #008200 !important;">//混淆</code></div>
<div class="line number91 index90 alt2"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy plain">minifyEnabled true</code></div>
<div class="line number92 index91 alt1"></div>
<div class="line number93 index92 alt2"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy comments" style="color: #008200 !important;">//Zipalign优化</code></div>
<div class="line number94 index93 alt1"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy plain">zipAlignEnabled true</code></div>
<div class="line number95 index94 alt2"></div>
<div class="line number96 index95 alt1"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy comments" style="color: #008200 !important;">// 移除无用的resource文件</code></div>
<div class="line number97 index96 alt2"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy plain">shrinkResources true</code></div>
<div class="line number98 index97 alt1"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy comments" style="color: #008200 !important;">//加载默认混淆配置文件</code></div>
<div class="line number99 index98 alt2"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy plain">proguardFiles getDefaultProguardFile(</code><code class="groovy string" style="color: blue !important;">'proguard-android.txt'</code><code class="groovy plain">), </code><code class="groovy string" style="color: blue !important;">'proguard.cfg'</code></div>
<div class="line number100 index99 alt1"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy comments" style="color: #008200 !important;">//签名</code></div>
<div class="line number101 index100 alt2"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy plain">signingConfig signingConfigs.relealse</code></div>
<div class="line number102 index101 alt1"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">}</code></div>
<div class="line number103 index102 alt2"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">}</code></div>
<div class="line number104 index103 alt1"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy comments" style="color: #008200 !important;">//渠道Flavors，我这里写了一些常用的</code></div>
<div class="line number105 index104 alt2"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">productFlavors {</code></div>
<div class="line number106 index105 alt1"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">GooglePlay {}</code></div>
<div class="line number107 index106 alt2"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">xiaomi {}</code></div>
<div class="line number108 index107 alt1"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">umeng {}</code></div>
<div class="line number109 index108 alt2"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">}</code></div>
<div class="line number110 index109 alt1"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">compileOptions {</code></div>
<div class="line number111 index110 alt2"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">sourceCompatibility JavaVersion.VERSION_1_7</code></div>
<div class="line number112 index111 alt1"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">targetCompatibility JavaVersion.VERSION_1_7</code></div>
<div class="line number113 index112 alt2"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">}</code></div>
<div class="line number114 index113 alt1"></div>
<div class="line number115 index114 alt2"></div>
<div class="line number116 index115 alt1"></div>
<div class="line number117 index116 alt2"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">productFlavors.all { flavor -&gt;</code></div>
<div class="line number118 index117 alt1"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]</code></div>
<div class="line number119 index118 alt2"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">}</code></div>
<div class="line number120 index119 alt1"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">applicationVariants.all { variant -&gt;</code></div>
<div class="line number121 index120 alt2"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">variant.outputs.</code><code class="groovy functions" style="color: #ff1493 !important;">each</code> <code class="groovy plain">{ output -&gt;</code></div>
<div class="line number122 index121 alt1"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">def</code> <code class="groovy plain">outputFile = output.outputFile</code></div>
<div class="line number123 index122 alt2"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">if</code> <code class="groovy plain">(outputFile != </code><code class="groovy constants" style="color: #0066cc !important;">null</code> <code class="groovy plain">&amp;&amp; outputFile.name.endsWith(</code><code class="groovy string" style="color: blue !important;">'.apk'</code><code class="groovy plain">)) {</code></div>
<div class="line number124 index123 alt1"><code class="groovy spaces" style="color: #40aa53;">                </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">def</code> <code class="groovy plain">fileName = outputFile.name.replace(</code><code class="groovy string" style="color: blue !important;">".apk"</code><code class="groovy plain">, </code><code class="groovy string" style="color: blue !important;">"-${defaultConfig.versionName}.apk"</code><code class="groovy plain">)</code></div>
<div class="line number125 index124 alt2"><code class="groovy spaces" style="color: #40aa53;">                </code><code class="groovy plain">output.outputFile = </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">new</code> <code class="groovy plain">File(outputFile.parent, fileName)</code></div>
<div class="line number126 index125 alt1"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy plain">}</code></div>
<div class="line number127 index126 alt2"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">}</code></div>
<div class="line number128 index127 alt1"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">}</code></div>
<div class="line number129 index128 alt2"><code class="groovy plain">}</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>&nbsp;</p>
<p>2.我们直接在dos命令定位到Demo4的项目目录(如果你用的是win7，可以直接先进入到项目目录，然后在空白处,先按住shift，再点右键选择&#8221;在此处打开命令窗口&#8221;)</p>
<p><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0123/113715_lIAy_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0123/113715_lIAy_251064.png" alt="" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="color: #000000;">a,输入命令 ：</span><span style="color: #e53333;">gradle clean</span></p>
<p><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0123/113939_vFZP_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0123/113939_vFZP_251064.png" alt="" /></a></p>
<p>b,输入命令:gradle build 然后等待。时间会比较长</p>
<p><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0123/115113_Np1S_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0123/115113_Np1S_251064.png" alt="" /></a></p>
<p>直到build successfule.细心的朋友应该会发现项目目录多了一个build文件夹。<a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0123/115141_DUUm_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0123/115141_DUUm_251064.png" alt="" /></a></p>
<p>我们打包好的apk就在里面。</p>
<p><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0123/115402_YXSH_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0123/115402_YXSH_251064.png" alt="" /></a></p>
<p>&nbsp;</p>
<p>大家会发现里面 debug版本，release版本都有，所以速度慢。我们一般只需要正式签名版本，所以我们在<strong>gradle</strong>clean后可以这样</p>
<p>输入命令:<span style="color: #e53333;">gradle </span><span style="color: #e53333;">assembleRelease</span>    // 这是编译并打Release的包</p>
<p>然后会发现时间比前面要快，而且apk文件里面只有release版本的了。</p>
<p><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0123/120527_V89P_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0123/120527_V89P_251064.png" alt="" /></a></p>
<p>另外我们如果只想要debug版本,输入命令<span style="color: #e53333;">gradle </span><span style="color: #e53333;">assembleDebug </span>   //这是编译并打Debug包</p>
]]></content:encoded>
			<wfw:commentRss>https://www.softwareace.cn/?feed=rss2&#038;p=1155</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android studio 使用心得(六)&#8212;android studio 如何加载.so文件</title>
		<link>https://www.softwareace.cn/?p=1153</link>
		<comments>https://www.softwareace.cn/?p=1153#comments</comments>
		<pubDate>Thu, 29 Jan 2015 01:33:55 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[开发工具]]></category>
		<category><![CDATA[Android studio]]></category>

		<guid isPermaLink="false">http://www.softwareace.cn/?p=1153</guid>
		<description><![CDATA[之前一直没怎么注意，以为.so文件android为像eclipse一样直接加载，但是直到昨天我在android [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>之前一直没怎么注意，以为.so文件android为像eclipse一样直接加载，但是直到昨天我在android studio上调试公司项目推送消息的时候，才发现，.so文件原来没有加载成功.</p>
<p>可能之前  <a style="color: #ff8373;" href="http://my.oschina.net/aibenben/blog/370107" target="_blank" rel="nofollow">Android studio 使用心得(三)&#8212;从Eclipse迁移到Android</a><a style="color: #ff8373;" href="http://my.oschina.net/aibenben/blog/370107" target="_blank" rel="nofollow"> </a>这篇文章我是用Demo4来做例子，里面并没有引用.so文件，所以大家按照这篇文章去迁移项目的时候，会遇到问题。昨天我网上找了一下关于android studio gradle 加载.so文件的文章，发现大多还停留在gradle 低版本的时候的解决方法，看上去都好复杂，现在android studio1.0以后解决这个问题就很简单啦！如果大家还在用1.0以前的版本那我就要喷你一脸啦。。</p>
<p>我先提一点，就是如果从android studio上直接创建一个项目和从eclipse迁移过来的项目其实目录结构会稍微有区别的。</p>
<p>1.  我先讲一下，怎么解决从eclipse迁移过来的代码加载.so文件.直接以我的项目为例。</p>
<p>先看一下目录结构</p>
<p><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0128/100053_is15_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0128/100053_is15_251064.png" alt="" /></a></p>
<p>大家会注意到，我们从eclipse迁移过来的项目，会默认给我们创建一个文件夹jniLibs，然后把eclipse里面libs文件夹里的内容都复制过来，如果直接在android studio 里面创建项目是不会有这个文件夹的，这是区别一。从eclipse迁移过来的项目上，会在build.gradle配置文件里面加上一段配置</p>
<p>sourceSets {<br />
main {<br />
<span style="color: #e53333;"> manifest.srcFile &#8216;AndroidManifest.xml&#8217;</span><br />
<span style="color: #e53333;">            java.srcDirs = ['src']</span><br />
<span style="color: #e53333;">            resources.srcDirs = ['src']</span><br />
<span style="color: #e53333;">            aidl.srcDirs = ['src']</span><br />
<span style="color: #e53333;">            renderscript.srcDirs = ['src']</span><br />
<span style="color: #e53333;">            res.srcDirs = ['res']</span><br />
<span style="color: #e53333;">            assets.srcDirs = ['assets']</span><br />
<span style="color: #e53333;">            jniLibs.srcDirs = ['libs']//这一行是没有的，如果我们有.so文件就需要加上这一行代码</span><br />
}</p>
<p>// Move the tests to tests/java, tests/res, etc&#8230;<br />
instrumentTest.setRoot(&#8216;tests&#8217;)</p>
<p>// Move the build types to build-types/&lt;type&gt;<br />
// For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, &#8230;<br />
// This moves them out of them default location under src/&lt;type&gt;/&#8230; which would<br />
// conflict with src/ being used by the main source set.<br />
// Adding new build types or product flavors should be accompanied<br />
// by a similar customization.<br />
debug.setRoot(&#8216;build-types/debug&#8217;)<br />
release.setRoot(&#8216;build-types/release&#8217;)<br />
}</p>
<p>再看一下图。之前我一直认为  compile fileTree(dir: &#8216;libs&#8217;, include: &#8216;*.jar&#8217;)这样就会全部加载.jar和.so文件，其实我错了，如果没有在sourceSets main里面加上一句 jniLibs.srcDirs = ['libs']，是不会加载.so文件的。<a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0128/100816_JhV0_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0128/100816_JhV0_251064.png" alt="" width="545" height="300" /></a></p>
<p>&nbsp;</p>
<p>2.如果我们创建项目就是在android studio上创建的</p>
<p><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0128/103232_HNpx_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0128/103232_HNpx_251064.png" alt="" width="714" height="300" /></a></p>
<p>&nbsp;</p>
<p>默认没有jniLibs文件夹。所以需要我们自己创建。目录<span style="color: #444444;">  src&#8212;&gt;main&#8212;&gt;jniLibs</span></p>
<p><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0128/110246_jI02_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0128/110246_jI02_251064.png" alt="" width="500" height="199" /></a></p>
<p>以加载加载信鸽sdk为例子</p>
<p>我们先把.so文件全部复制到jniLibs文件。目录不变，</p>
<p><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0128/110429_9lep_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0128/110429_9lep_251064.png" alt="" width="500" height="168" /></a></p>
<p>&nbsp;</p>
<p>最后添加成功</p>
<p><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0128/113155_to3L_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0128/113155_to3L_251064.png" alt="" width="433" height="300" /></a></p>
<p>然后，再说一下添加.jar包。跟eclipse一样，先把.jar文件放到libs目录下，然后add asLibrary.就可以了。</p>
<p>&nbsp;</p>
<p>运行项目，就Ok了。这时也不需要再去配置</p>
<p>jniLibs.srcDirs = ['libs']</p>
]]></content:encoded>
			<wfw:commentRss>https://www.softwareace.cn/?feed=rss2&#038;p=1153</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android studio 使用心得(五)&#8212;代码混淆和破解apk</title>
		<link>https://www.softwareace.cn/?p=1151</link>
		<comments>https://www.softwareace.cn/?p=1151#comments</comments>
		<pubDate>Thu, 29 Jan 2015 01:33:08 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[开发工具]]></category>
		<category><![CDATA[Android studio]]></category>

		<guid isPermaLink="false">http://www.softwareace.cn/?p=1151</guid>
		<description><![CDATA[这篇文章等是跟大家分享一在Android studio 进行代码混淆配置。之前大家在eclipse上也弄过代码 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>这篇文章等是跟大家分享一在Android studio 进行代码混淆配置。之前大家在eclipse上也弄过代码混淆配置，其实一样，大家可以把之前在eclipse上的配置文件直接拿过来用。不管是.cfg文件还是.txt文件都一样。</p>
<p>先给大家贴一个混淆模板吧。注释很清楚。是我目前一个项目用的proguard.cfg配置文件</p>
<div>
<div id="highlighter_165632" class="syntaxhighlighter  groovy">
<div class="toolbar" style="color: white !important;"><a class="toolbar_item command_help help" style="color: white !important;" href="http://my.oschina.net/aibenben/blog/371889#">?</a></div>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter" style="color: #afafaf !important;">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
<div class="line number17 index16 alt2">17</div>
<div class="line number18 index17 alt1">18</div>
<div class="line number19 index18 alt2">19</div>
<div class="line number20 index19 alt1">20</div>
<div class="line number21 index20 alt2">21</div>
<div class="line number22 index21 alt1">22</div>
<div class="line number23 index22 alt2">23</div>
<div class="line number24 index23 alt1">24</div>
<div class="line number25 index24 alt2">25</div>
<div class="line number26 index25 alt1">26</div>
<div class="line number27 index26 alt2">27</div>
<div class="line number28 index27 alt1">28</div>
<div class="line number29 index28 alt2">29</div>
<div class="line number30 index29 alt1">30</div>
<div class="line number31 index30 alt2">31</div>
<div class="line number32 index31 alt1">32</div>
<div class="line number33 index32 alt2">33</div>
<div class="line number34 index33 alt1">34</div>
<div class="line number35 index34 alt2">35</div>
<div class="line number36 index35 alt1">36</div>
<div class="line number37 index36 alt2">37</div>
<div class="line number38 index37 alt1">38</div>
<div class="line number39 index38 alt2">39</div>
<div class="line number40 index39 alt1">40</div>
<div class="line number41 index40 alt2">41</div>
<div class="line number42 index41 alt1">42</div>
<div class="line number43 index42 alt2">43</div>
<div class="line number44 index43 alt1">44</div>
<div class="line number45 index44 alt2">45</div>
<div class="line number46 index45 alt1">46</div>
<div class="line number47 index46 alt2">47</div>
<div class="line number48 index47 alt1">48</div>
<div class="line number49 index48 alt2">49</div>
<div class="line number50 index49 alt1">50</div>
<div class="line number51 index50 alt2">51</div>
<div class="line number52 index51 alt1">52</div>
<div class="line number53 index52 alt2">53</div>
<div class="line number54 index53 alt1">54</div>
<div class="line number55 index54 alt2">55</div>
<div class="line number56 index55 alt1">56</div>
<div class="line number57 index56 alt2">57</div>
<div class="line number58 index57 alt1">58</div>
<div class="line number59 index58 alt2">59</div>
<div class="line number60 index59 alt1">60</div>
<div class="line number61 index60 alt2">61</div>
<div class="line number62 index61 alt1">62</div>
<div class="line number63 index62 alt2">63</div>
<div class="line number64 index63 alt1">64</div>
<div class="line number65 index64 alt2">65</div>
<div class="line number66 index65 alt1">66</div>
<div class="line number67 index66 alt2">67</div>
<div class="line number68 index67 alt1">68</div>
<div class="line number69 index68 alt2">69</div>
<div class="line number70 index69 alt1">70</div>
<div class="line number71 index70 alt2">71</div>
<div class="line number72 index71 alt1">72</div>
<div class="line number73 index72 alt2">73</div>
<div class="line number74 index73 alt1">74</div>
<div class="line number75 index74 alt2">75</div>
<div class="line number76 index75 alt1">76</div>
<div class="line number77 index76 alt2">77</div>
<div class="line number78 index77 alt1">78</div>
<div class="line number79 index78 alt2">79</div>
<div class="line number80 index79 alt1">80</div>
<div class="line number81 index80 alt2">81</div>
<div class="line number82 index81 alt1">82</div>
<div class="line number83 index82 alt2">83</div>
<div class="line number84 index83 alt1">84</div>
<div class="line number85 index84 alt2">85</div>
<div class="line number86 index85 alt1">86</div>
<div class="line number87 index86 alt2">87</div>
<div class="line number88 index87 alt1">88</div>
<div class="line number89 index88 alt2">89</div>
<div class="line number90 index89 alt1">90</div>
<div class="line number91 index90 alt2">91</div>
<div class="line number92 index91 alt1">92</div>
<div class="line number93 index92 alt2">93</div>
<div class="line number94 index93 alt1">94</div>
<div class="line number95 index94 alt2">95</div>
<div class="line number96 index95 alt1">96</div>
<div class="line number97 index96 alt2">97</div>
<div class="line number98 index97 alt1">98</div>
<div class="line number99 index98 alt2">99</div>
<div class="line number100 index99 alt1">100</div>
<div class="line number101 index100 alt2">101</div>
<div class="line number102 index101 alt1">102</div>
<div class="line number103 index102 alt2">103</div>
<div class="line number104 index103 alt1">104</div>
<div class="line number105 index104 alt2">105</div>
<div class="line number106 index105 alt1">106</div>
<div class="line number107 index106 alt2">107</div>
<div class="line number108 index107 alt1">108</div>
<div class="line number109 index108 alt2">109</div>
<div class="line number110 index109 alt1">110</div>
<div class="line number111 index110 alt2">111</div>
<div class="line number112 index111 alt1">112</div>
<div class="line number113 index112 alt2">113</div>
<div class="line number114 index113 alt1">114</div>
<div class="line number115 index114 alt2">115</div>
<div class="line number116 index115 alt1">116</div>
<div class="line number117 index116 alt2">117</div>
<div class="line number118 index117 alt1">118</div>
<div class="line number119 index118 alt2">119</div>
<div class="line number120 index119 alt1">120</div>
<div class="line number121 index120 alt2">121</div>
<div class="line number122 index121 alt1">122</div>
<div class="line number123 index122 alt2">123</div>
<div class="line number124 index123 alt1">124</div>
<div class="line number125 index124 alt2">125</div>
<div class="line number126 index125 alt1">126</div>
<div class="line number127 index126 alt2">127</div>
<div class="line number128 index127 alt1">128</div>
<div class="line number129 index128 alt2">129</div>
<div class="line number130 index129 alt1">130</div>
<div class="line number131 index130 alt2">131</div>
<div class="line number132 index131 alt1">132</div>
<div class="line number133 index132 alt2">133</div>
<div class="line number134 index133 alt1">134</div>
<div class="line number135 index134 alt2">135</div>
<div class="line number136 index135 alt1">136</div>
<div class="line number137 index136 alt2">137</div>
<div class="line number138 index137 alt1">138</div>
<div class="line number139 index138 alt2">139</div>
<div class="line number140 index139 alt1">140</div>
<div class="line number141 index140 alt2">141</div>
<div class="line number142 index141 alt1">142</div>
<div class="line number143 index142 alt2">143</div>
<div class="line number144 index143 alt1">144</div>
<div class="line number145 index144 alt2">145</div>
<div class="line number146 index145 alt1">146</div>
<div class="line number147 index146 alt2">147</div>
<div class="line number148 index147 alt1">148</div>
<div class="line number149 index148 alt2">149</div>
<div class="line number150 index149 alt1">150</div>
<div class="line number151 index150 alt2">151</div>
<div class="line number152 index151 alt1">152</div>
<div class="line number153 index152 alt2">153</div>
<div class="line number154 index153 alt1">154</div>
<div class="line number155 index154 alt2">155</div>
<div class="line number156 index155 alt1">156</div>
<div class="line number157 index156 alt2">157</div>
<div class="line number158 index157 alt1">158</div>
<div class="line number159 index158 alt2">159</div>
<div class="line number160 index159 alt1">160</div>
<div class="line number161 index160 alt2">161</div>
<div class="line number162 index161 alt1">162</div>
<div class="line number163 index162 alt2">163</div>
<div class="line number164 index163 alt1">164</div>
<div class="line number165 index164 alt2">165</div>
<div class="line number166 index165 alt1">166</div>
<div class="line number167 index166 alt2">167</div>
<div class="line number168 index167 alt1">168</div>
<div class="line number169 index168 alt2">169</div>
<div class="line number170 index169 alt1">170</div>
<div class="line number171 index170 alt2">171</div>
<div class="line number172 index171 alt1">172</div>
<div class="line number173 index172 alt2">173</div>
<div class="line number174 index173 alt1">174</div>
<div class="line number175 index174 alt2">175</div>
<div class="line number176 index175 alt1">176</div>
<div class="line number177 index176 alt2">177</div>
<div class="line number178 index177 alt1">178</div>
<div class="line number179 index178 alt2">179</div>
<div class="line number180 index179 alt1">180</div>
<div class="line number181 index180 alt2">181</div>
<div class="line number182 index181 alt1">182</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="groovy plain">#指定代码的压缩级别</code></div>
<div class="line number2 index1 alt1"><code class="groovy plain">-optimizationpasses </code><code class="groovy value" style="color: #009900 !important;">5</code></div>
<div class="line number3 index2 alt2"></div>
<div class="line number4 index3 alt1"><code class="groovy plain">#包明不混合大小写</code></div>
<div class="line number5 index4 alt2"><code class="groovy plain">-dontusemixedcaseclassnames</code></div>
<div class="line number6 index5 alt1"></div>
<div class="line number7 index6 alt2"><code class="groovy plain">#不去忽略非公共的库类</code></div>
<div class="line number8 index7 alt1"><code class="groovy plain">-dontskipnonpubliclibraryclasses</code></div>
<div class="line number9 index8 alt2"></div>
<div class="line number10 index9 alt1"><code class="groovy spaces" style="color: #40aa53;"> </code><code class="groovy plain">#优化  不优化输入的类文件</code></div>
<div class="line number11 index10 alt2"><code class="groovy plain">-dontoptimize</code></div>
<div class="line number12 index11 alt1"></div>
<div class="line number13 index12 alt2"><code class="groovy spaces" style="color: #40aa53;"> </code><code class="groovy plain">#预校验</code></div>
<div class="line number14 index13 alt1"><code class="groovy plain">-dontpreverify</code></div>
<div class="line number15 index14 alt2"></div>
<div class="line number16 index15 alt1"><code class="groovy spaces" style="color: #40aa53;"> </code><code class="groovy plain">#混淆时是否记录日志</code></div>
<div class="line number17 index16 alt2"><code class="groovy plain">-verbose</code></div>
<div class="line number18 index17 alt1"></div>
<div class="line number19 index18 alt2"><code class="groovy spaces" style="color: #40aa53;"> </code><code class="groovy plain"># 混淆时所采用的算法</code></div>
<div class="line number20 index19 alt1"><code class="groovy plain">-optimizations !code/simplification/arithmetic,!field/*,!</code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">class</code><code class="groovy plain">/merging/*</code></div>
<div class="line number21 index20 alt2"></div>
<div class="line number22 index21 alt1"><code class="groovy plain">#保护注解</code></div>
<div class="line number23 index22 alt2"><code class="groovy plain">-keepattributes *Annotation*</code></div>
<div class="line number24 index23 alt1"></div>
<div class="line number25 index24 alt2"><code class="groovy plain"># 保持哪些类不被混淆</code></div>
<div class="line number26 index25 alt1"><code class="groovy plain">-keep </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">public</code> <code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">class</code> <code class="groovy plain">* </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">extends</code> <code class="groovy plain">android.app.Fragment</code></div>
<div class="line number27 index26 alt2"><code class="groovy plain">-keep </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">public</code> <code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">class</code> <code class="groovy plain">* </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">extends</code> <code class="groovy plain">android.app.Activity</code></div>
<div class="line number28 index27 alt1"><code class="groovy plain">-keep </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">public</code> <code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">class</code> <code class="groovy plain">* </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">extends</code> <code class="groovy plain">android.app.Application</code></div>
<div class="line number29 index28 alt2"><code class="groovy plain">-keep </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">public</code> <code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">class</code> <code class="groovy plain">* </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">extends</code> <code class="groovy plain">android.app.Service</code></div>
<div class="line number30 index29 alt1"><code class="groovy plain">-keep </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">public</code> <code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">class</code> <code class="groovy plain">* </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">extends</code> <code class="groovy plain">android.content.BroadcastReceiver</code></div>
<div class="line number31 index30 alt2"><code class="groovy plain">-keep </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">public</code> <code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">class</code> <code class="groovy plain">* </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">extends</code> <code class="groovy plain">android.content.ContentProvider</code></div>
<div class="line number32 index31 alt1"><code class="groovy plain">-keep </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">public</code> <code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">class</code> <code class="groovy plain">* </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">extends</code> <code class="groovy plain">android.app.backup.BackupAgentHelper</code></div>
<div class="line number33 index32 alt2"><code class="groovy plain">-keep </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">public</code> <code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">class</code> <code class="groovy plain">* </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">extends</code> <code class="groovy plain">android.preference.Preference</code></div>
<div class="line number34 index33 alt1"><code class="groovy plain">-keep </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">public</code> <code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">class</code> <code class="groovy plain">com.android.vending.licensing.ILicensingService</code></div>
<div class="line number35 index34 alt2"><code class="groovy plain">#如果有引用v4包可以添加下面这行</code></div>
<div class="line number36 index35 alt1"><code class="groovy plain">-keep </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">public</code> <code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">class</code> <code class="groovy plain">* </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">extends</code> <code class="groovy plain">android.support.v4.app.Fragment</code></div>
<div class="line number37 index36 alt2"></div>
<div class="line number38 index37 alt1"></div>
<div class="line number39 index38 alt2"></div>
<div class="line number40 index39 alt1"></div>
<div class="line number41 index40 alt2"><code class="groovy plain">#忽略警告</code></div>
<div class="line number42 index41 alt1"><code class="groovy plain">-ignorewarning</code></div>
<div class="line number43 index42 alt2"></div>
<div class="line number44 index43 alt1"><code class="groovy plain">#####################记录生成的日志数据,gradle build时在本项目根目录输出################</code></div>
<div class="line number45 index44 alt2"></div>
<div class="line number46 index45 alt1"><code class="groovy plain">#apk 包内所有 </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">class</code> <code class="groovy plain">的内部结构</code></div>
<div class="line number47 index46 alt2"><code class="groovy plain">-</code><code class="groovy functions" style="color: #ff1493 !important;">dump</code> <code class="groovy plain">class_files.txt</code></div>
<div class="line number48 index47 alt1"><code class="groovy plain">#未混淆的类和成员</code></div>
<div class="line number49 index48 alt2"><code class="groovy plain">-printseeds seeds.txt</code></div>
<div class="line number50 index49 alt1"><code class="groovy plain">#列出从 apk 中删除的代码</code></div>
<div class="line number51 index50 alt2"><code class="groovy plain">-printusage unused.txt</code></div>
<div class="line number52 index51 alt1"><code class="groovy plain">#混淆前后的映射</code></div>
<div class="line number53 index52 alt2"><code class="groovy plain">-printmapping mapping.txt</code></div>
<div class="line number54 index53 alt1"></div>
<div class="line number55 index54 alt2"><code class="groovy plain">#####################记录生成的日志数据，gradle build时 在本项目根目录输出-end################</code></div>
<div class="line number56 index55 alt1"></div>
<div class="line number57 index56 alt2"></div>
<div class="line number58 index57 alt1"><code class="groovy plain">################&lt;span&gt;&lt;/span&gt;混淆保护自己项目的部分代码以及引用的第三方jar包library#########################</code></div>
<div class="line number59 index58 alt2"><code class="groovy plain">#-libraryjars libs/umeng-analytics-v5.</code><code class="groovy value" style="color: #009900 !important;">2.4</code><code class="groovy plain">.jar</code></div>
<div class="line number60 index59 alt1"><code class="groovy plain">#-libraryjars libs/alipaysd&lt;span&gt;&lt;/span&gt;k.jar</code></div>
<div class="line number61 index60 alt2"><code class="groovy plain">#&lt;span&gt;&lt;/span&gt;-libraryjars libs/alipaysecsdk.jar</code></div>
<div class="line number62 index61 alt1"><code class="groovy plain">#-libraryjars libs/alipayutdid.jar</code></div>
<div class="line number63 index62 alt2"><code class="groovy plain">#-libraryjars libs/wup-</code><code class="groovy value" style="color: #009900 !important;">1.0</code><code class="groovy plain">.</code><code class="groovy value" style="color: #009900 !important;">0</code><code class="groovy plain">-SNAPSHOT.jar</code></div>
<div class="line number64 index63 alt1"><code class="groovy plain">#-libraryjars libs/weibosdkcore.jar</code></div>
<div class="line number65 index64 alt2"></div>
<div class="line number66 index65 alt1"></div>
<div class="line number67 index66 alt2"><code class="groovy plain">#三星应用市场需要添加:sdk-v1.</code><code class="groovy value" style="color: #009900 !important;">0.0</code><code class="groovy plain">.jar,look-v1.</code><code class="groovy value" style="color: #009900 !important;">0.1</code><code class="groovy plain">.jar</code></div>
<div class="line number68 index67 alt1"><code class="groovy plain">#-libraryjars libs/sdk-v1.</code><code class="groovy value" style="color: #009900 !important;">0.0</code><code class="groovy plain">.jar</code></div>
<div class="line number69 index68 alt2"><code class="groovy plain">#-libraryjars libs/look-v1.</code><code class="groovy value" style="color: #009900 !important;">0.1</code><code class="groovy plain">.jar</code></div>
<div class="line number70 index69 alt1"></div>
<div class="line number71 index70 alt2"><code class="groovy plain">#我是以libaray的形式引用了一个图片加载框架,如果不想混淆 keep 掉</code></div>
<div class="line number72 index71 alt1"><code class="groovy plain">-keep </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">class</code> <code class="groovy plain">com.nostra13.universalimageloader.** { *; }</code></div>
<div class="line number73 index72 alt2"></div>
<div class="line number74 index73 alt1"><code class="groovy plain">#友盟</code></div>
<div class="line number75 index74 alt2"><code class="groovy plain">-keep </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">class</code> <code class="groovy plain">com.umeng.**{*;}</code></div>
<div class="line number76 index75 alt1"></div>
<div class="line number77 index76 alt2"><code class="groovy plain">#支付宝</code></div>
<div class="line number78 index77 alt1"><code class="groovy plain">-keep </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">class</code> <code class="groovy plain">com.alipay.android.app.IAliPay{*;}</code></div>
<div class="line number79 index78 alt2"><code class="groovy plain">-keep </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">class</code> <code class="groovy plain">com.alipay.android.app.IAlixPay{*;}</code></div>
<div class="line number80 index79 alt1"><code class="groovy plain">-keep </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">class</code> <code class="groovy plain">com.alipay.android.app.IRemoteServiceCallback{*;}</code></div>
<div class="line number81 index80 alt2"><code class="groovy plain">-keep </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">class</code> <code class="groovy plain">com.alipay.android.app.lib.ResourceMap{*;}</code></div>
<div class="line number82 index81 alt1"></div>
<div class="line number83 index82 alt2"></div>
<div class="line number84 index83 alt1"><code class="groovy plain">#信鸽推送</code></div>
<div class="line number85 index84 alt2"><code class="groovy plain">-keep </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">class</code> <code class="groovy plain">com.tencent.android.tpush.**  {* ;}</code></div>
<div class="line number86 index85 alt1"><code class="groovy plain">-keep </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">class</code> <code class="groovy plain">com.tencent.mid.**  {* ;}</code></div>
<div class="line number87 index86 alt2"></div>
<div class="line number88 index87 alt1"></div>
<div class="line number89 index88 alt2"><code class="groovy plain">#自己项目特殊处理代码</code></div>
<div class="line number90 index89 alt1"></div>
<div class="line number91 index90 alt2"><code class="groovy plain">#忽略警告</code></div>
<div class="line number92 index91 alt1"><code class="groovy plain">-dontwarn com.veidy.mobile.common.**</code></div>
<div class="line number93 index92 alt2"><code class="groovy plain">#保留一个完整的包</code></div>
<div class="line number94 index93 alt1"><code class="groovy plain">-keep </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">class</code> <code class="groovy plain">com.veidy.mobile.common.** {</code></div>
<div class="line number95 index94 alt2"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">*;</code></div>
<div class="line number96 index95 alt1"><code class="groovy spaces" style="color: #40aa53;"> </code><code class="groovy plain">}</code></div>
<div class="line number97 index96 alt2"></div>
<div class="line number98 index97 alt1"><code class="groovy plain">-keep </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">class</code>  <code class="groovy plain">com.veidy.activity.login.WebLoginActivity{*;}</code></div>
<div class="line number99 index98 alt2"><code class="groovy plain">-keep </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">class</code>  <code class="groovy plain">com.veidy.activity.UserInfoFragment{*;}</code></div>
<div class="line number100 index99 alt1"><code class="groovy plain">-keep </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">class</code>  <code class="groovy plain">com.veidy.activity.HomeFragmentActivity{*;}</code></div>
<div class="line number101 index100 alt2"><code class="groovy plain">-keep </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">class</code>  <code class="groovy plain">com.veidy.activity.CityActivity{*;}</code></div>
<div class="line number102 index101 alt1"><code class="groovy plain">-keep </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">class</code>  <code class="groovy plain">com.veidy.activity.ClinikActivity{*;}</code></div>
<div class="line number103 index102 alt2"></div>
<div class="line number104 index103 alt1"><code class="groovy plain">#如果引用了v4或者v7包</code></div>
<div class="line number105 index104 alt2"><code class="groovy plain">-dontwarn android.support.**</code></div>
<div class="line number106 index105 alt1"></div>
<div class="line number107 index106 alt2"><code class="groovy plain">############&lt;span&gt;&lt;/span&gt;混淆保护自己项目的部分代码以及引用的第三方jar包library-end##################</code></div>
<div class="line number108 index107 alt1"></div>
<div class="line number109 index108 alt2"><code class="groovy plain">-keep </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">public</code> <code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">class</code> <code class="groovy plain">* </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">extends</code> <code class="groovy plain">android.view.View {</code></div>
<div class="line number110 index109 alt1"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">public</code> <code class="groovy plain">&lt;init&gt;(android.content.Context);</code></div>
<div class="line number111 index110 alt2"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">public</code> <code class="groovy plain">&lt;init&gt;(android.content.Context, android.util.AttributeSet);</code></div>
<div class="line number112 index111 alt1"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">public</code> <code class="groovy plain">&lt;init&gt;(android.content.Context, android.util.AttributeSet, </code><code class="groovy color1" style="color: grey !important;">int</code><code class="groovy plain">);</code></div>
<div class="line number113 index112 alt2"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">public</code> <code class="groovy color1" style="color: grey !important;">void</code> <code class="groovy plain">set*(...);</code></div>
<div class="line number114 index113 alt1"><code class="groovy plain">}</code></div>
<div class="line number115 index114 alt2"></div>
<div class="line number116 index115 alt1"><code class="groovy plain">#保持 native 方法不被混淆</code></div>
<div class="line number117 index116 alt2"><code class="groovy plain">-keepclasseswithmembernames </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">class</code> <code class="groovy plain">* {</code></div>
<div class="line number118 index117 alt1"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">native &lt;methods&gt;;</code></div>
<div class="line number119 index118 alt2"><code class="groovy plain">}</code></div>
<div class="line number120 index119 alt1"></div>
<div class="line number121 index120 alt2"><code class="groovy plain">#保持自定义控件类不被混淆</code></div>
<div class="line number122 index121 alt1"><code class="groovy plain">-keepclasseswithmembers </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">class</code> <code class="groovy plain">* {</code></div>
<div class="line number123 index122 alt2"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">public</code> <code class="groovy plain">&lt;init&gt;(android.content.Context, android.util.AttributeSet);</code></div>
<div class="line number124 index123 alt1"><code class="groovy plain">}</code></div>
<div class="line number125 index124 alt2"></div>
<div class="line number126 index125 alt1"><code class="groovy plain">#保持自定义控件类不被混淆</code></div>
<div class="line number127 index126 alt2"><code class="groovy plain">-keepclasseswithmembers </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">class</code> <code class="groovy plain">* {</code></div>
<div class="line number128 index127 alt1"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">public</code> <code class="groovy plain">&lt;init&gt;(android.content.Context, android.util.AttributeSet, </code><code class="groovy color1" style="color: grey !important;">int</code><code class="groovy plain">);</code></div>
<div class="line number129 index128 alt2"><code class="groovy plain">}</code></div>
<div class="line number130 index129 alt1"><code class="groovy plain">#保持自定义控件类不被混淆</code></div>
<div class="line number131 index130 alt2"><code class="groovy plain">-keepclassmembers </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">class</code> <code class="groovy plain">* </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">extends</code> <code class="groovy plain">android.app.Activity {</code></div>
<div class="line number132 index131 alt1"><code class="groovy spaces" style="color: #40aa53;">   </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">public</code> <code class="groovy color1" style="color: grey !important;">void</code> <code class="groovy plain">*(android.view.View);</code></div>
<div class="line number133 index132 alt2"><code class="groovy plain">}</code></div>
<div class="line number134 index133 alt1"></div>
<div class="line number135 index134 alt2"><code class="groovy plain">#保持 Parcelable 不被混淆</code></div>
<div class="line number136 index135 alt1"><code class="groovy plain">-keep </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">class</code> <code class="groovy plain">* </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">implements</code> <code class="groovy plain">android.os.Parcelable {</code></div>
<div class="line number137 index136 alt2"><code class="groovy spaces" style="color: #40aa53;">  </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">public</code> <code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">static</code> <code class="groovy plain">final android.os.Parcelable$Creator *;</code></div>
<div class="line number138 index137 alt1"><code class="groovy plain">}</code></div>
<div class="line number139 index138 alt2"></div>
<div class="line number140 index139 alt1"><code class="groovy plain">#保持 Serializable 不被混淆</code></div>
<div class="line number141 index140 alt2"><code class="groovy plain">-keepnames </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">class</code> <code class="groovy plain">* </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">implements</code> <code class="groovy plain">java.io.Serializable</code></div>
<div class="line number142 index141 alt1"></div>
<div class="line number143 index142 alt2"><code class="groovy plain">#保持 Serializable 不被混淆并且enum 类也不被混淆</code></div>
<div class="line number144 index143 alt1"><code class="groovy plain">-keepclassmembers </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">class</code> <code class="groovy plain">* </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">implements</code> <code class="groovy plain">java.io.Serializable {</code></div>
<div class="line number145 index144 alt2"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">static</code> <code class="groovy plain">final </code><code class="groovy color1" style="color: grey !important;">long</code> <code class="groovy plain">serialVersionUID;</code></div>
<div class="line number146 index145 alt1"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">private</code> <code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">static</code> <code class="groovy plain">final java.io.ObjectStreamField[] serialPersistentFields;</code></div>
<div class="line number147 index146 alt2"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">!</code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">static</code> <code class="groovy plain">!transient &lt;fields&gt;;</code></div>
<div class="line number148 index147 alt1"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">!</code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">private</code> <code class="groovy plain">&lt;fields&gt;&lt;span&gt;&lt;/span&gt;;</code></div>
<div class="line number149 index148 alt2"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">!</code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">private</code> <code class="groovy plain">&lt;methods&gt;;</code></div>
<div class="line number150 index149 alt1"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">private</code> <code class="groovy color1" style="color: grey !important;">void</code> <code class="groovy plain">writeObject(java.io.ObjectOutputStream);</code></div>
<div class="line number151 index150 alt2"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">private</code> <code class="groovy color1" style="color: grey !important;">void</code> <code class="groovy plain">readObject(java.io.ObjectInputStream);</code></div>
<div class="line number152 index151 alt1"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">java.lang.Object writeReplace();</code></div>
<div class="line number153 index152 alt2"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">java.lang.Object readResolve();</code></div>
<div class="line number154 index153 alt1"><code class="groovy plain">}</code></div>
<div class="line number155 index154 alt2"></div>
<div class="line number156 index155 alt1"><code class="groovy plain">#保持枚举 enum 类不被混淆 如果混淆报错，建议直接使用上面的 -keepclassmembers </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">class</code> <code class="groovy plain">* </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">implements</code> <code class="groovy plain">java.io.Serializable即可</code></div>
<div class="line number157 index156 alt2"><code class="groovy plain">#-keepclassmembers enum * {</code></div>
<div class="line number158 index157 alt1"><code class="groovy plain">#  </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">public</code> <code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">static</code> <code class="groovy plain">**[] values();</code></div>
<div class="line number159 index158 alt2"><code class="groovy plain">#  </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">public</code> <code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">static</code> <code class="groovy plain">** valueOf(java.lang.String);</code></div>
<div class="line number160 index159 alt1"><code class="groovy plain">#}</code></div>
<div class="line number161 index160 alt2"></div>
<div class="line number162 index161 alt1"><code class="groovy plain">-keepclassmembers </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">class</code> <code class="groovy plain">* {</code></div>
<div class="line number163 index162 alt2"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">public</code> <code class="groovy color1" style="color: grey !important;">void</code> <code class="groovy plain">*ButtonClicked(android.view.View);</code></div>
<div class="line number164 index163 alt1"><code class="groovy plain">}</code></div>
<div class="line number165 index164 alt2"></div>
<div class="line number166 index165 alt1"><code class="groovy plain">#不混淆资源类</code></div>
<div class="line number167 index166 alt2"><code class="groovy plain">-keepclassmembers </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">class</code> <code class="groovy plain">**.R$* {</code></div>
<div class="line number168 index167 alt1"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">public</code> <code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">static</code> <code class="groovy plain">&lt;fields&gt;;</code></div>
<div class="line number169 index168 alt2"><code class="groovy plain">}</code></div>
<div class="line number170 index169 alt1"></div>
<div class="line number171 index170 alt2"><code class="groovy plain">#避免混淆泛型 如果混淆报错建议关掉</code></div>
<div class="line number172 index171 alt1"><code class="groovy plain">#–keepattributes Signature</code></div>
<div class="line number173 index172 alt2"></div>
<div class="line number174 index173 alt1"><code class="groovy plain">#移除log 测试了下没有用还是建议自己定义一个开关控制是否输出日志</code></div>
<div class="line number175 index174 alt2"><code class="groovy plain">#-assumenosideeffects </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">class</code> <code class="groovy plain">android.util.Log {</code></div>
<div class="line number176 index175 alt1"><code class="groovy plain">#    </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">public</code> <code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">static</code> <code class="groovy color1" style="color: grey !important;">boolean</code> <code class="groovy plain">isLoggable(java.lang.String, </code><code class="groovy color1" style="color: grey !important;">int</code><code class="groovy plain">);</code></div>
<div class="line number177 index176 alt2"><code class="groovy plain">#    </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">public</code> <code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">static</code> <code class="groovy color1" style="color: grey !important;">int</code> <code class="groovy plain">v(...);</code></div>
<div class="line number178 index177 alt1"><code class="groovy plain">#    </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">public</code> <code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">static</code> <code class="groovy color1" style="color: grey !important;">int</code> <code class="groovy plain">i(...);</code></div>
<div class="line number179 index178 alt2"><code class="groovy plain">#    </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">public</code> <code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">static</code> <code class="groovy color1" style="color: grey !important;">int</code> <code class="groovy plain">w(...);</code></div>
<div class="line number180 index179 alt1"><code class="groovy plain">#    </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">public</code> <code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">static</code> <code class="groovy color1" style="color: grey !important;">int</code> <code class="groovy plain">d(...);</code></div>
<div class="line number181 index180 alt2"><code class="groovy plain">#    </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">public</code> <code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">static</code> <code class="groovy color1" style="color: grey !important;">int</code> <code class="groovy plain">e(...);</code></div>
<div class="line number182 index181 alt1"><code class="groovy plain">#}</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>大家可以先看看这篇文章</p>
<h1><a style="color: #ff8373;" href="http://my.oschina.net/aibenben/blog/370985" target="_blank" rel="nofollow">Android studio 使用心得(四)&#8212;android studio 多渠道打包(二)</a></h1>
<p style="color: #000000;">了解一下打包过程。</p>
<p style="color: #000000;">然后大家看看打包的配置文件build.gradle里面的一段配置代码</p>
<p style="color: #000000;"><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0126/154039_95M3_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0126/154039_95M3_251064.png" alt="" /></a></p>
<div>
<div>  //混淆,新版本是ninifyEnabled不再是runproguard</div>
<div>    minifyEnabled true</div>
</div>
<div> //加载默认混淆配置文件及自定义混淆 配置</div>
<div>   <span style="color: #e53333;">proguardFiles getDefaultProguardFile(&#8216;proguard-android.txt&#8217;),&#8217;proguard.cfg&#8217;</span></div>
<div></div>
<div>我们设置minifyEnabled true,就会在打包的时候进行代码混淆处理. 其中proguard-android.txt不用管，在sdk目录里面，我们主要是配置了proguard.cfg文件。可能大家直接在android studio创建项目不会有这个文件，而是 <span style="color: #e53333;">proguard-rules.pro</span>文件，其实一样的，我这里是因为项目是从eclipse迁移过来的，之前在eclipse上混淆是 <span style="color: #e53333;">proguard.cfg</span>文件.</div>
<p>&nbsp;</p>
<p>一切就绪后，就是打包了。这里我就不再多说了，大家可以去看</p>
<p>&nbsp;</p>
<h1><a style="color: #ff8373;" href="http://my.oschina.net/aibenben/blog/370577" target="_blank" rel="nofollow">Android studio 使用心得(四)&#8212;android studio 多渠道打包</a></h1>
<h1><a style="color: #ff8373;" href="http://my.oschina.net/aibenben/blog/370985" target="_blank" rel="nofollow">Android studio 使用心得(四)&#8212;android studio 多渠道打包(二)</a></h1>
<h1></h1>
<p>我这里用第二种,gradle 命令打包.我建议大家在gradle clean后，不要直接gradle build,而是用<span style="color: #e53333;">gradle </span><span style="color: #e53333;">assembleRelease</span> .用gradle build第一是因为慢，第二，我自己项目打包时这样遇到一个错误，现在也没解决</p>
<p>Lint found errors in the project; aborting build.</p>
<p>Fix the issues identified by lint, or add the following to your build script to proceed with errors:<br />
&#8230;<br />
android {<br />
lintOptions {<br />
abortOnError false<br />
}<br />
}<br />
&#8230;</p>
<p>可以我明明已经设置</p>
<p>//执行lint检查，有任何的错误或者警告提示，都会终止构建，我们可以将其关掉。<br />
lintOptions {<br />
abortOnError false<br />
}<br />
搞不清楚。希望大家谁知道的也告诉下我。</p>
<p>&nbsp;</p>
<p>当我们执行命令 gradle build或者<span style="color: #e53333;">gradle </span><span style="color: #e53333;">assembleRelease</span>后，会自动进行混淆操作。。。直到成功。</p>
<p>各位 注意下，如果你的混淆配置有问题，可能会报错。Execution failed for task &#8216;:proguardUmengRelease&#8217;.大家可以根据报错去排除问题，</p>
<p>比如说我遇到的一个问题,</p>
<p>&nbsp;</p>
<div></div>
<p><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0126/163013_B1Aj_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0126/163013_B1Aj_251064.png" alt="" /></a></p>
<div></div>
<div></div>
<div>出现这个问题是因为配置文件里面我有一行 keepattributes Signature #避免混淆泛型 , 如果混淆报错建议关掉,因为下面这个就会避免混淆泛型</div>
<div>-keepclassmembers class * implements java.io.Serializable {<br />
static final long serialVersionUID;<br />
private static final java.io.ObjectStreamField[] serialPersistentFields;<br />
!static !transient &lt;fields&gt;;<br />
!private &lt;fields&gt;;<br />
!private &lt;methods&gt;;<br />
private void writeObject(java.io.ObjectOutputStream);<br />
private void readObject(java.io.ObjectInputStream);<br />
java.lang.Object writeReplace();<br />
java.lang.Object readResolve();<br />
}</div>
<div></div>
<div></div>
<div>大家可以看到这个错误提示，有一个<span style="color: #e53333;">line 168 </span>,这个是行号，但是各位注意了这个行号定位不是特别精准，只能一个大概的定位。</div>
<div></div>
<div></div>
<div></div>
<div>混淆真正的成功与否，需要我们自己来亲自验证，那就是我们来破解自己的apk.我上传了 一个我使用的破解工具</div>
<div>链接: http://pan.baidu.com/s/1o60tLj0 密码: 3bqp</div>
<div></div>
<div>1,解压apk.用好压就能直接解压，获取到classes.dex文件</div>
<div><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0126/181143_Ydsi_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0126/181143_Ydsi_251064.png" alt="" /></a></div>
<div>2.用dex2jar这个工具来生成classes_dex2jar文件.</div>
<div> a,把刚刚解压出来的classes.dex文件放到dex2jar根目录，然后用dos命令定位到该目录，执行命令dex2jar.bat classes.dex直到done.</div>
<p><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0126/181249_TpGO_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0126/181249_TpGO_251064.png" alt="" /></a></p>
<div></div>
<div>2.细心的朋友就会发现多了一个jar文件。</div>
<div>.<a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0126/181405_6r8T_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0126/181405_6r8T_251064.png" alt="" /></a></div>
<div> c.然后用jd-gui打开这个jar文件,就能看到项目的结构了。。</div>
<div></div>
<div><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0126/181511_2CuL_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0126/181511_2CuL_251064.png" alt="" /></a></div>
<div></div>
<div>如果有a.b.c这些，就说明混淆成功啦</div>
<div><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0126/181526_7Ce2_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0126/181526_7Ce2_251064.png" alt="" /></a></div>
<div></div>
]]></content:encoded>
			<wfw:commentRss>https://www.softwareace.cn/?feed=rss2&#038;p=1151</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android studio 使用心得(四)&#8212;android studio 多渠道打包</title>
		<link>https://www.softwareace.cn/?p=1149</link>
		<comments>https://www.softwareace.cn/?p=1149#comments</comments>
		<pubDate>Thu, 29 Jan 2015 01:32:03 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[开发工具]]></category>
		<category><![CDATA[Android studio]]></category>

		<guid isPermaLink="false">http://www.softwareace.cn/?p=1149</guid>
		<description><![CDATA[之前有发表过一篇android studio 打包的文章http://my.oschina.net/aiben [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>之前有发表过一篇android studio 打包的文章<a style="color: #ff8373;" href="http://my.oschina.net/aibenben/blog/350967" rel="nofollow">http://my.oschina.net/aibenben/blog/350967</a>。今天这个是介绍多渠道打包，继续以Demo4为例</p>
<p>&nbsp;</p>
<p>第一就是配置：在项目的build.gradle里面配置  先上图，再上代码。<a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0126/170811_YC9T_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0126/170811_YC9T_251064.png" alt="" /></a></p>
<p>&nbsp;</p>
<p><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0122/115643_0H8j_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0122/115643_0H8j_251064.png" alt="" /></a><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0122/121058_CclR_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0122/121058_CclR_251064.png" alt="" /></a><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0122/121130_xObX_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0122/121130_xObX_251064.png" alt="" /></a></p>
<p>第二步，就是打包。(网上有介绍用命令打包，可是我这人太懒，发现了个小窍门，直接在android studio 里面进行。)上图（另外，后面我还是补上了gradle命令打包的介绍。大家可以看看<a style="color: #ff8373;" href="http://my.oschina.net/aibenben/blog/370985" rel="nofollow">http://my.oschina.net/aibenben/blog/370985</a>）</p>
<p><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0122/115853_mz3B_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0122/115853_mz3B_251064.png" alt="" /></a></p>
<p>如果没有keystore,先创建一个，默认为.jks文件，一样的。</p>
<p><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0122/115913_U8qK_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0122/115913_U8qK_251064.png" alt="" /></a></p>
<p><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0122/115958_ruy9_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0122/115958_ruy9_251064.png" alt="" /></a></p>
<p>大家这里创建完后，可以再回头看看前面配置的build.gradle里面signingConfigs的内容。是不是就懂了（其实我这里有一个疑问，感觉如果用我这种方式去打包，签名文件都没有去读取配置文件里面的了）</p>
<p><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0122/120011_GIp3_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0122/120011_GIp3_251064.png" alt="" /></a></p>
<p>大家可以注意这里的Flavors，先回头看看前面配置的buld.gradle文件里面的productFlavors，嘿嘿，渠道都在这了，按住ctrl，选择你要打包的渠道，然后Finish.静静等待。需要要时间</p>
<p><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0122/120857_u0Xi_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0122/120857_u0Xi_251064.png" alt="" /></a></p>
<p>打包成功！点击直接会进入到项目</p>
<p><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0122/135801_9Ovu_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0122/135801_9Ovu_251064.png" alt="" /></a></p>
<p>打包好的apk，就在这了。</p>
<p><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0122/135836_XYOB_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0122/135836_XYOB_251064.png" alt="" width="489" height="400" /></a></p>
<p>&nbsp;</p>
<p>&#8212;-当然，打包的过程中，好多盆友可能会遇到一个错误.导致打包失败。</p>
<p>Execution failed for task &#8216;:proguardGooglePlayRelease&#8217;.java.io.IOException: Can&#8217;t write [D:\androidstudiocode\Demo4\build\intermediates\classes-proguard\GooglePlay\release\classes.jar] (Can&#8217;t read [D:\androidstudiocode\Demo4\build\intermediates\exploded-aar\Demo4\appcompat_v7_8\unspecified\libs\android-support-v4.jar(;;;;;;!META-INF/MANIFEST.MF)] (Duplicate zip entry [android/support/v4/b/d.class == android-support-v4.jar:android/support/v4/os/ParcelableCompatCreatorHoneycombMR2.class]))</p>
<p>是因为混淆打包的时候，有重复的v4包，所以你只需要删掉一个，在Demo4这个项目里面，我是直接注释掉</p>
<p><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0122/135724_8k0A_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0122/135724_8k0A_251064.png" alt="" /></a></p>
<p>&nbsp;</p>
<p>再打包,等待，成功。</p>
<p>&nbsp;</p>
<p>最后直接贴上配置代码</p>
<p>&nbsp;</p>
<div>
<div id="highlighter_72348" class="syntaxhighlighter  groovy">
<div class="toolbar" style="color: white !important;"><a class="toolbar_item command_help help" style="color: white !important;" href="http://my.oschina.net/aibenben/blog/370577#">?</a></div>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter" style="color: #afafaf !important;">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
<div class="line number17 index16 alt2">17</div>
<div class="line number18 index17 alt1">18</div>
<div class="line number19 index18 alt2">19</div>
<div class="line number20 index19 alt1">20</div>
<div class="line number21 index20 alt2">21</div>
<div class="line number22 index21 alt1">22</div>
<div class="line number23 index22 alt2">23</div>
<div class="line number24 index23 alt1">24</div>
<div class="line number25 index24 alt2">25</div>
<div class="line number26 index25 alt1">26</div>
<div class="line number27 index26 alt2">27</div>
<div class="line number28 index27 alt1">28</div>
<div class="line number29 index28 alt2">29</div>
<div class="line number30 index29 alt1">30</div>
<div class="line number31 index30 alt2">31</div>
<div class="line number32 index31 alt1">32</div>
<div class="line number33 index32 alt2">33</div>
<div class="line number34 index33 alt1">34</div>
<div class="line number35 index34 alt2">35</div>
<div class="line number36 index35 alt1">36</div>
<div class="line number37 index36 alt2">37</div>
<div class="line number38 index37 alt1">38</div>
<div class="line number39 index38 alt2">39</div>
<div class="line number40 index39 alt1">40</div>
<div class="line number41 index40 alt2">41</div>
<div class="line number42 index41 alt1">42</div>
<div class="line number43 index42 alt2">43</div>
<div class="line number44 index43 alt1">44</div>
<div class="line number45 index44 alt2">45</div>
<div class="line number46 index45 alt1">46</div>
<div class="line number47 index46 alt2">47</div>
<div class="line number48 index47 alt1">48</div>
<div class="line number49 index48 alt2">49</div>
<div class="line number50 index49 alt1">50</div>
<div class="line number51 index50 alt2">51</div>
<div class="line number52 index51 alt1">52</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="groovy plain">apply plugin: </code><code class="groovy string" style="color: blue !important;">'com.android.application'</code></div>
<div class="line number2 index1 alt1"></div>
<div class="line number3 index2 alt2"><code class="groovy plain">dependencies {</code></div>
<div class="line number4 index3 alt1"><code class="groovy comments" style="color: #008200 !important;">//    compile fileTree(dir: 'libs', include: '*.jar')</code></div>
<div class="line number5 index4 alt2"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">compile project(</code><code class="groovy string" style="color: blue !important;">':appcompat_v7_8'</code><code class="groovy plain">)</code></div>
<div class="line number6 index5 alt1"><code class="groovy plain">}</code></div>
<div class="line number7 index6 alt2"><code class="groovy plain">buildscript {</code></div>
<div class="line number8 index7 alt1"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">repositories {</code></div>
<div class="line number9 index8 alt2"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">mavenCentral()</code></div>
<div class="line number10 index9 alt1"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">}</code></div>
<div class="line number11 index10 alt2"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">dependencies {</code></div>
<div class="line number12 index11 alt1"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">classpath </code><code class="groovy string" style="color: blue !important;">'com.android.tools.build:gradle:1.0.0'</code></div>
<div class="line number13 index12 alt2"></div>
<div class="line number14 index13 alt1"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">}</code></div>
<div class="line number15 index14 alt2"><code class="groovy plain">}</code></div>
<div class="line number16 index15 alt1"><code class="groovy plain">android {</code></div>
<div class="line number17 index16 alt2"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">compileSdkVersion </code><code class="groovy value" style="color: #009900 !important;">19</code></div>
<div class="line number18 index17 alt1"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">buildToolsVersion </code><code class="groovy string" style="color: blue !important;">"21.0.2"</code></div>
<div class="line number19 index18 alt2"></div>
<div class="line number20 index19 alt1"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">sourceSets {</code></div>
<div class="line number21 index20 alt2"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">main {</code></div>
<div class="line number22 index21 alt1"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy plain">manifest.srcFile </code><code class="groovy string" style="color: blue !important;">'AndroidManifest.xml'</code></div>
<div class="line number23 index22 alt2"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy plain">java.srcDirs = [</code><code class="groovy string" style="color: blue !important;">'src'</code><code class="groovy plain">]</code></div>
<div class="line number24 index23 alt1"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy plain">resources.srcDirs = [</code><code class="groovy string" style="color: blue !important;">'src'</code><code class="groovy plain">]</code></div>
<div class="line number25 index24 alt2"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy plain">aidl.srcDirs = [</code><code class="groovy string" style="color: blue !important;">'src'</code><code class="groovy plain">]</code></div>
<div class="line number26 index25 alt1"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy plain">renderscript.srcDirs = [</code><code class="groovy string" style="color: blue !important;">'src'</code><code class="groovy plain">]</code></div>
<div class="line number27 index26 alt2"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy plain">res.srcDirs = [</code><code class="groovy string" style="color: blue !important;">'res'</code><code class="groovy plain">]</code></div>
<div class="line number28 index27 alt1"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy plain">assets.srcDirs = [</code><code class="groovy string" style="color: blue !important;">'assets'</code><code class="groovy plain">]</code></div>
<div class="line number29 index28 alt2"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">}</code></div>
<div class="line number30 index29 alt1"></div>
<div class="line number31 index30 alt2"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy comments" style="color: #008200 !important;">// Move the tests to tests/java, tests/res, etc...</code></div>
<div class="line number32 index31 alt1"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">instrumentTest.setRoot(</code><code class="groovy string" style="color: blue !important;">'tests'</code><code class="groovy plain">)</code></div>
<div class="line number33 index32 alt2"></div>
<div class="line number34 index33 alt1"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy comments" style="color: #008200 !important;">// Move the build types to build-types/&lt;type&gt;</code></div>
<div class="line number35 index34 alt2"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy comments" style="color: #008200 !important;">// For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...</code></div>
<div class="line number36 index35 alt1"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy comments" style="color: #008200 !important;">// This moves them out of them default location under src/&lt;type&gt;/... which would</code></div>
<div class="line number37 index36 alt2"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy comments" style="color: #008200 !important;">// conflict with src/ being used by the main source set.</code></div>
<div class="line number38 index37 alt1"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy comments" style="color: #008200 !important;">// Adding new build types or product flavors should be accompanied</code></div>
<div class="line number39 index38 alt2"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy comments" style="color: #008200 !important;">// by a similar customization.</code></div>
<div class="line number40 index39 alt1"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">debug.setRoot(</code><code class="groovy string" style="color: blue !important;">'build-types/debug'</code><code class="groovy plain">)</code></div>
<div class="line number41 index40 alt2"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">release.setRoot(</code><code class="groovy string" style="color: blue !important;">'build-types/release'</code><code class="groovy plain">)</code></div>
<div class="line number42 index41 alt1"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">}</code></div>
<div class="line number43 index42 alt2"></div>
<div class="line number44 index43 alt1"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">defaultConfig {</code></div>
<div class="line number45 index44 alt2"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">applicationId </code><code class="groovy string" style="color: blue !important;">"com.example.demo4"</code></div>
<div class="line number46 index45 alt1"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">minSdkVersion </code><code class="groovy value" style="color: #009900 !important;">8</code></div>
<div class="line number47 index46 alt2"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">targetSdkVersion </code><code class="groovy value" style="color: #009900 !important;">19</code></div>
<div class="line number48 index47 alt1"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">versionCode </code><code class="groovy value" style="color: #009900 !important;">1</code></div>
<div class="line number49 index48 alt2"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">versionName </code><code class="groovy string" style="color: blue !important;">"1.0"</code></div>
<div class="line number50 index49 alt1"></div>
<div class="line number51 index50 alt2"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy comments" style="color: #008200 !important;">// dex突破65535的限制</code></div>
<div class="line number52 index51 alt1"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">multiDexEnabled true</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div>
<div id="highlighter_911945" class="syntaxhighlighter  groovy">
<div class="toolbar" style="color: white !important;"><a class="toolbar_item command_help help" style="color: white !important;" href="http://my.oschina.net/aibenben/blog/370577#">?</a></div>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter" style="color: #afafaf !important;">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
<div class="line number17 index16 alt2">17</div>
<div class="line number18 index17 alt1">18</div>
<div class="line number19 index18 alt2">19</div>
<div class="line number20 index19 alt1">20</div>
<div class="line number21 index20 alt2">21</div>
<div class="line number22 index21 alt1">22</div>
<div class="line number23 index22 alt2">23</div>
<div class="line number24 index23 alt1">24</div>
<div class="line number25 index24 alt2">25</div>
<div class="line number26 index25 alt1">26</div>
<div class="line number27 index26 alt2">27</div>
<div class="line number28 index27 alt1">28</div>
<div class="line number29 index28 alt2">29</div>
<div class="line number30 index29 alt1">30</div>
<div class="line number31 index30 alt2">31</div>
<div class="line number32 index31 alt1">32</div>
<div class="line number33 index32 alt2">33</div>
<div class="line number34 index33 alt1">34</div>
<div class="line number35 index34 alt2">35</div>
<div class="line number36 index35 alt1">36</div>
<div class="line number37 index36 alt2">37</div>
<div class="line number38 index37 alt1">38</div>
<div class="line number39 index38 alt2">39</div>
<div class="line number40 index39 alt1">40</div>
<div class="line number41 index40 alt2">41</div>
<div class="line number42 index41 alt1">42</div>
<div class="line number43 index42 alt2">43</div>
<div class="line number44 index43 alt1">44</div>
<div class="line number45 index44 alt2">45</div>
<div class="line number46 index45 alt1">46</div>
<div class="line number47 index46 alt2">47</div>
<div class="line number48 index47 alt1">48</div>
<div class="line number49 index48 alt2">49</div>
<div class="line number50 index49 alt1">50</div>
<div class="line number51 index50 alt2">51</div>
<div class="line number52 index51 alt1">52</div>
<div class="line number53 index52 alt2">53</div>
<div class="line number54 index53 alt1">54</div>
<div class="line number55 index54 alt2">55</div>
<div class="line number56 index55 alt1">56</div>
<div class="line number57 index56 alt2">57</div>
<div class="line number58 index57 alt1">58</div>
<div class="line number59 index58 alt2">59</div>
<div class="line number60 index59 alt1">60</div>
<div class="line number61 index60 alt2">61</div>
<div class="line number62 index61 alt1">62</div>
<div class="line number63 index62 alt2">63</div>
<div class="line number64 index63 alt1">64</div>
<div class="line number65 index64 alt2">65</div>
<div class="line number66 index65 alt1">66</div>
<div class="line number67 index66 alt2">67</div>
<div class="line number68 index67 alt1">68</div>
<div class="line number69 index68 alt2">69</div>
<div class="line number70 index69 alt1">70</div>
<div class="line number71 index70 alt2">71</div>
<div class="line number72 index71 alt1">72</div>
<div class="line number73 index72 alt2">73</div>
<div class="line number74 index73 alt1">74</div>
<div class="line number75 index74 alt2">75</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="groovy spaces" style="color: #40aa53;">      </code><code class="groovy comments" style="color: #008200 !important;">// AndroidManifest.xml 里面UMENG_CHANNEL的value为 ${UMENG_CHANNEL_VALUE}        manifestPlaceholders = [UMENG_CHANNEL_VALUE: "channel_name"]</code></div>
<div class="line number2 index1 alt1"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">}</code></div>
<div class="line number3 index2 alt2"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy comments" style="color: #008200 !important;">//执行lint检查，有任何的错误或者警告提示，都会终止构建，我们可以将其关掉。</code></div>
<div class="line number4 index3 alt1"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">lintOptions {</code></div>
<div class="line number5 index4 alt2"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">abortOnError false</code></div>
<div class="line number6 index5 alt1"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">}</code></div>
<div class="line number7 index6 alt2"></div>
<div class="line number8 index7 alt1"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy comments" style="color: #008200 !important;">//签名</code></div>
<div class="line number9 index8 alt2"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">signingConfigs {</code></div>
<div class="line number10 index9 alt1"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">debug {</code></div>
<div class="line number11 index10 alt2"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy plain">storeFile file(</code><code class="groovy string" style="color: blue !important;">"C:/Users/xxx/.android/debug.keystore"</code><code class="groovy plain">)</code></div>
<div class="line number12 index11 alt1"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">}</code></div>
<div class="line number13 index12 alt2"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">relealse {</code></div>
<div class="line number14 index13 alt1"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy plain">storeFile file(</code><code class="groovy string" style="color: blue !important;">"demo.jks"</code><code class="groovy plain">)</code></div>
<div class="line number15 index14 alt2"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy plain">storePassword </code><code class="groovy string" style="color: blue !important;">"demo123456"</code></div>
<div class="line number16 index15 alt1"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy plain">keyAlias </code><code class="groovy string" style="color: blue !important;">"demo_4"</code></div>
<div class="line number17 index16 alt2"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy plain">keyPassword </code><code class="groovy string" style="color: blue !important;">"demo123456"</code></div>
<div class="line number18 index17 alt1"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">}</code></div>
<div class="line number19 index18 alt2"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">}</code></div>
<div class="line number20 index19 alt1"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">buildTypes {</code></div>
<div class="line number21 index20 alt2"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">debug {</code></div>
<div class="line number22 index21 alt1"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy comments" style="color: #008200 !important;">// 显示Log</code></div>
<div class="line number23 index22 alt2"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy plain">buildConfigField </code><code class="groovy string" style="color: blue !important;">"boolean"</code><code class="groovy plain">, </code><code class="groovy string" style="color: blue !important;">"LOG_DEBUG"</code><code class="groovy plain">, </code><code class="groovy string" style="color: blue !important;">"true"</code></div>
<div class="line number24 index23 alt1"></div>
<div class="line number25 index24 alt2"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy plain">versionNameSuffix </code><code class="groovy string" style="color: blue !important;">"-debug"</code></div>
<div class="line number26 index25 alt1"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy plain">minifyEnabled false</code></div>
<div class="line number27 index26 alt2"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy plain">zipAlignEnabled false</code></div>
<div class="line number28 index27 alt1"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy plain">shrinkResources false</code></div>
<div class="line number29 index28 alt2"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy plain">signingConfig signingConfigs.debug</code></div>
<div class="line number30 index29 alt1"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">}</code></div>
<div class="line number31 index30 alt2"></div>
<div class="line number32 index31 alt1"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">release {</code></div>
<div class="line number33 index32 alt2"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy comments" style="color: #008200 !important;">// 不显示Log</code></div>
<div class="line number34 index33 alt1"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy plain">buildConfigField </code><code class="groovy string" style="color: blue !important;">"boolean"</code><code class="groovy plain">, </code><code class="groovy string" style="color: blue !important;">"LOG_DEBUG"</code><code class="groovy plain">, </code><code class="groovy string" style="color: blue !important;">"false"</code></div>
<div class="line number35 index34 alt2"></div>
<div class="line number36 index35 alt1"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy comments" style="color: #008200 !important;">//混淆</code></div>
<div class="line number37 index36 alt2"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy plain">minifyEnabled true</code></div>
<div class="line number38 index37 alt1"></div>
<div class="line number39 index38 alt2"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy comments" style="color: #008200 !important;">//Zipalign优化</code></div>
<div class="line number40 index39 alt1"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy plain">zipAlignEnabled true</code></div>
<div class="line number41 index40 alt2"></div>
<div class="line number42 index41 alt1"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy comments" style="color: #008200 !important;">// 移除无用的resource文件</code></div>
<div class="line number43 index42 alt2"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy plain">shrinkResources true</code></div>
<div class="line number44 index43 alt1"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy comments" style="color: #008200 !important;">//加载默认混淆配置文件 progudard-android.txt在sdk目录里面，不用管，proguard.cfg是我们自己配&lt;span&gt;&lt;/span&gt;的混淆文件</code></div>
<div class="line number45 index44 alt2"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy plain">proguardFiles getDefaultProguardFile(</code><code class="groovy string" style="color: blue !important;">'proguard-android.txt'</code><code class="groovy plain">), </code><code class="groovy string" style="color: blue !important;">'proguard.cfg'</code></div>
<div class="line number46 index45 alt1"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy comments" style="color: #008200 !important;">//签名</code></div>
<div class="line number47 index46 alt2"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy plain">signingConfig signingConfigs.relealse</code></div>
<div class="line number48 index47 alt1"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">}</code></div>
<div class="line number49 index48 alt2"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">}</code></div>
<div class="line number50 index49 alt1"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy comments" style="color: #008200 !important;">//渠道Flavors，我这里写了一些常用的</code></div>
<div class="line number51 index50 alt2"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">productFlavors {</code></div>
<div class="line number52 index51 alt1"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">GooglePlay {}</code></div>
<div class="line number53 index52 alt2"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">xiaomi {}</code></div>
<div class="line number54 index53 alt1"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">umeng {}</code></div>
<div class="line number55 index54 alt2"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">}</code></div>
<div class="line number56 index55 alt1"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">compileOptions {</code></div>
<div class="line number57 index56 alt2"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">sourceCompatibility JavaVersion.VERSION_1_7</code></div>
<div class="line number58 index57 alt1"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">targetCompatibility JavaVersion.VERSION_1_7</code></div>
<div class="line number59 index58 alt2"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">}</code></div>
<div class="line number60 index59 alt1"></div>
<div class="line number61 index60 alt2"></div>
<div class="line number62 index61 alt1"></div>
<div class="line number63 index62 alt2"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">productFlavors.all { flavor -&gt;</code></div>
<div class="line number64 index63 alt1"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]</code></div>
<div class="line number65 index64 alt2"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">}</code></div>
<div class="line number66 index65 alt1"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">applicationVariants.all { variant -&gt;</code></div>
<div class="line number67 index66 alt2"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">variant.outputs.</code><code class="groovy functions" style="color: #ff1493 !important;">each</code> <code class="groovy plain">{ output -&gt;</code></div>
<div class="line number68 index67 alt1"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">def</code> <code class="groovy plain">outputFile = output.outputFile</code></div>
<div class="line number69 index68 alt2"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">if</code> <code class="groovy plain">(outputFile != </code><code class="groovy constants" style="color: #0066cc !important;">null</code> <code class="groovy plain">&amp;&amp; outputFile.name.endsWith(</code><code class="groovy string" style="color: blue !important;">'.apk'</code><code class="groovy plain">)) {</code></div>
<div class="line number70 index69 alt1"><code class="groovy spaces" style="color: #40aa53;">                </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">def</code> <code class="groovy plain">fileName = outputFile.name.replace(</code><code class="groovy string" style="color: blue !important;">".apk"</code><code class="groovy plain">, </code><code class="groovy string" style="color: blue !important;">"-${defaultConfig.versionName}.apk"</code><code class="groovy plain">)</code></div>
<div class="line number71 index70 alt2"><code class="groovy spaces" style="color: #40aa53;">                </code><code class="groovy plain">output.outputFile = </code><code class="groovy keyword" style="font-weight: bold !important; color: #006699 !important;">new</code> <code class="groovy plain">File(outputFile.parent, fileName)</code></div>
<div class="line number72 index71 alt1"><code class="groovy spaces" style="color: #40aa53;">            </code><code class="groovy plain">}</code></div>
<div class="line number73 index72 alt2"><code class="groovy spaces" style="color: #40aa53;">        </code><code class="groovy plain">}</code></div>
<div class="line number74 index73 alt1"><code class="groovy spaces" style="color: #40aa53;">    </code><code class="groovy plain">}</code></div>
<div class="line number75 index74 alt2"><code class="groovy plain">}</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>https://www.softwareace.cn/?feed=rss2&#038;p=1149</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android studio 使用心得(三)&#8212;从Eclipse迁移到Android studio</title>
		<link>https://www.softwareace.cn/?p=1147</link>
		<comments>https://www.softwareace.cn/?p=1147#comments</comments>
		<pubDate>Thu, 29 Jan 2015 01:31:11 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[开发工具]]></category>
		<category><![CDATA[Android studio]]></category>

		<guid isPermaLink="false">http://www.softwareace.cn/?p=1147</guid>
		<description><![CDATA[断断续续的也算是把eclipse上的代码成功迁移到android studio上来了，现在，我同事继续用ecl [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>断断续续的也算是把eclipse上的代码成功迁移到android studio上来了，现在，我同事继续用eclipse，我用android studio，svn上还是之前eclipse的项目，迁移成功后，我也能happy的开发了,两不误.直接来分享我捉摸的一点小成果吧</p>
<p>以Demo4 为例，并引用了library包appcompat_v7_8.</p>
<p>1,第一步，Eclipse还是要有滴，并且adt 得在22以上，我相信大家adt肯定在22以上了吧，不然还开发个毛。</p>
<p>(1) <span style="color: #000000;">在Eclipse中，选择Flie-&gt;Export&#8211;&gt;Android&#8211;&gt;<span style="color: #222222;">Generate Gradle build files</span></span></p>
<p><span style="color: #000000;"><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0121/120113_dmQy_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0121/120113_dmQy_251064.png" alt="" width="320" height="335" /></a></span></p>
<p><span style="color: #000000;">(2),next&#8211;&gt;选中自己要导的项目&#8211;&gt;next&#8211;&gt;先只勾选Force overriding of exeisting files&#8211;&gt;finish&#8212;&gt;finish</span></p>
<p><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0121/120346_7g4D_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0121/120346_7g4D_251064.png" alt="" width="320" height="391" /></a><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0121/120450_JtdW_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0121/120450_JtdW_251064.png" alt="" width="320" height="391" /></a><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0121/120517_6XOR_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0121/120517_6XOR_251064.png" alt="" /></a></p>
<p>(3).各位，注意啦，有东西要改啦，先在eclipse项目里面去瞧瞧项目，增加了一个文件build.gradle,然后直接在这里面改点东西。<a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0121/121027_6MNy_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0121/121027_6MNy_251064.png" alt="" width="511" height="320" /></a></p>
<p><span style="color: #000000;">改什么东西本呢，先上我改完后的图。高清无码大图,好戏在后头</span></p>
<p><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0121/121613_oGc5_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0121/121613_oGc5_251064.png" alt="" width="500" height="320" /></a></p>
<p>a,把apply plugin: &#8216;android&#8217;  改成 apply plugin: &#8216;com.android.application&#8217;因为，apply plugin: &#8216;android&#8217; 已经不适合现在的版本啦</p>
<p>b,加一段代码，相信我，加上去就行，亲测</p>
<p>buildscript {<br />
repositories {<br />
mavenCentral()<br />
}<br />
dependencies {<br />
classpath &#8216;com.android.tools.build:gradle:1.0.0&#8242;</p>
<p>}<br />
}</p>
<p>c,把 buildToolsVersion &#8220;19.1.0&#8243;改成  buildToolsVersion &#8220;21.0.2&#8243;。注意啦，别看我这是21.0.2,你得看你自己sdk里面的版本，如图</p>
<p><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0121/123612_OvCs_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0121/123612_OvCs_251064.png" alt="" /></a></p>
<p>ok! ctrl+s保存刚刚改的东西，eclipse我们可以暂时不用看啦，</p>
<p>2，第二步，，我们找到eclipse的工作空间，就是你项目放代码的要目录.嘿嘿，会发现多了几个文件。如图</p>
<p><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0121/123912_FjAL_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0121/123912_FjAL_251064.png" alt="" width="463" height="480" /></a></p>
<p>我们要改两个东西，相信我，绝对要改，不改就被坑，</p>
<p>(1)第一个是 build.gradle,如果你的是0.8.+，就改成1.0.0   还是版本问题</p>
<p><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0121/124027_w2iW_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0121/124027_w2iW_251064.png" alt="" width="885" height="288" /></a></p>
<p>(2).第二个一定要改，gradle\wrapper 这个目录里面的gradle-wrapper.properties 文件，默认是在线加载，在天朝去谷歌下载，你懂的。所以我们要改成加载本地的。你本地得先有这个东西啊<a style="color: #ff8373;" href="http://pan.baidu.com/s/1bnxYzmv" target="_blank" rel="nofollow">gradle-2.2.1-all</a>. 如果没有就去()下载</p>
<p>链接: http://pan.baidu.com/s/1bnxYzmv 密码: nd2l</p>
<p>&nbsp;</p>
<p><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0121/124300_AjqU_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0121/124300_AjqU_251064.png" alt="" width="318" height="100" /></a><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0121/124328_CK8b_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0121/124328_CK8b_251064.png" alt="" width="337" height="120" /></a></p>
<p>好啦，好戏来啦，android studio 终于可以上场啦。</p>
<p>3,第三步,打开android studio,选择import Non-Android studio project &#8211;&gt;选择项目Demo4 里面的build.gradle文件，别选错,点击ok.可能弹出提示框，直接ok就行。然后就等待它创建项目吧。哈哈哈</p>
<p><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0121/124847_1V71_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0121/124847_1V71_251064.png" alt="" width="300" height="223" /></a><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0121/124924_Klkb_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0121/124924_Klkb_251064.png" alt="" width="314" height="320" /></a></p>
<p>ok 后，下面如果出现这个错，那就说明没问题啦。这一看就知道，我们没有导入libray包啦.</p>
<p><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0121/125214_gV5j_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0121/125214_gV5j_251064.png" alt="" width="264" height="200" /></a></p>
<p>回来eclipse,选择要引入的包appcompat_v7_8，和之前Demo4一样，生成build.gradle文件。然后再回到android studio. 导入，File&#8211;&gt;import module&#8211;&gt;appcompat_v7_v8&#8211;&gt;ok  (ps:这里直接选择项目就行，不要再去选择里面的build.gradle文件) 注意啦，反正我这么干，很爽，上图&#8212;如果还引用了其它的library包，同样的操作，爽。</p>
<p><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0121/125610_alJx_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0121/125610_alJx_251064.png" alt="" width="195" height="200" /></a><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0121/125620_qQVR_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0121/125620_qQVR_251064.png" alt="" width="196" height="200" /></a><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0121/125629_Da7k_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0121/125629_Da7k_251064.png" alt="" width="200" height="128" /></a><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0121/130100_YkBi_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0121/130100_YkBi_251064.png" alt="" width="214" height="120" /></a></p>
<p>4，最后再稍微配置下就ok啦。就是你原来引用了几个library包，你就要检查一个地方是否有没配置</p>
<p><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0121/130405_dULw_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0121/130405_dULw_251064.png" alt="" width="439" height="300" /></a></p>
<p>dependencies {<br />
compile fileTree(dir: &#8216;libs&#8217;, include: &#8216;*.jar&#8217;)<br />
compile project(&#8216;:appcompat_v7_8&#8242;)<br />
}</p>
<p>（ps:如果你之前项目有加载.so文件，比如说用到了地图sdk，推送sdk，这些里面有.so文件，光compilefileTree(dir:&#8217;libs&#8217;,include:&#8217;*.jar&#8217;)没用的，还需要配置一下才能加载<span style="color: #e53333;">.so</span>文件。大家可以看这篇文章的介绍<a style="color: #ff8373;" href="http://my.oschina.net/aibenben/blog/372634" target="_blank" rel="nofollow">Android studio 使用心得(六)&#8212;android studio 如何加载.so文件</a>)</p>
<p>解读一下， compile fileTree(dir: &#8216;libs&#8217;, include: &#8216;*.jar&#8217;) 这一行，会把你之前eclipse里面的lib文件夹里面的.jar包都引进来，所以你不用管了，  compile project(&#8221;)就是你import module的library包，你每导一个进来，在</p>
<p><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0121/130702_JPpz_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0121/130702_JPpz_251064.png" alt="" width="483" height="200" /></a></p>
<p>settings.gradle这里面都会有，直接把include 后面的copy过去，因为，怕你手动敲敲错，导致报错。</p>
<p>5.大功造成，run! Hello world!来了。。。</p>
<p><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0121/130952_UszG_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0121/130952_UszG_251064.png" alt="" width="414" height="300" /></a> <a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0121/131102_e5Ci_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0121/131102_e5Ci_251064.png" alt="" width="270" height="480" /></a></p>
<p>&nbsp;</p>
<p>好啦。。。同事们都午睡了，我也不敲得键盘响了。。睡觉。。。希望这篇文章能帮助到大家。大家迁移代码的时候，有什么问题也可以说出来大家一起讨论一下，相互学习，解决问题。</p>
]]></content:encoded>
			<wfw:commentRss>https://www.softwareace.cn/?feed=rss2&#038;p=1147</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android studio使用心得(二)&#8212; 打包签名apk发布</title>
		<link>https://www.softwareace.cn/?p=1145</link>
		<comments>https://www.softwareace.cn/?p=1145#comments</comments>
		<pubDate>Thu, 29 Jan 2015 01:29:50 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[开发工具]]></category>
		<category><![CDATA[Android studio]]></category>

		<guid isPermaLink="false">http://www.softwareace.cn/?p=1145</guid>
		<description><![CDATA[1.&#8212;&#8211;Android Studio菜单   Build-&#62;Generate S [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>1.&#8212;&#8211;<span style="color: #362e2b;">Android Studio菜单   Build-&gt;Generate Signed APK </span></p>
<p><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2014/1201/161207_XZtz_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2014/1201/161207_XZtz_251064.png" alt="" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>2.&#8212;&#8212;Create new..</p>
<p><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2014/1201/161207_NW9p_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2014/1201/161207_NW9p_251064.png" alt="" /></a></p>
<p>&nbsp;</p>
<p>3.&#8212;&#8212;-跟eclipse里面一样，添加keystore 信息</p>
<p><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2014/1201/161348_DsUK_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2014/1201/161348_DsUK_251064.png" alt="" /></a></p>
<p>&nbsp;</p>
<p>4.&#8212;&#8212;&#8212;&#8212;Finish   搞定收工！</p>
<p>&nbsp;</p>
<p><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2014/1201/161426_lAvh_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2014/1201/161426_lAvh_251064.png" alt="" /></a></p>
]]></content:encoded>
			<wfw:commentRss>https://www.softwareace.cn/?feed=rss2&#038;p=1145</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android studio 使用心得(一)&#8212;android studio快速掌握快捷键</title>
		<link>https://www.softwareace.cn/?p=1143</link>
		<comments>https://www.softwareace.cn/?p=1143#comments</comments>
		<pubDate>Thu, 29 Jan 2015 01:25:16 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[开发工具]]></category>
		<category><![CDATA[Android studio]]></category>

		<guid isPermaLink="false">http://www.softwareace.cn/?p=1143</guid>
		<description><![CDATA[大家都是从eclipse转过来了，所以早就熟悉了eclipse那一套快捷键。 File&#8212;&#62;s [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>大家都是从eclipse转过来了，所以早就熟悉了eclipse那一套快捷键。<br />
File&#8212;&gt;settings&#8212;&gt;keymap&#8211;&gt;选择eclipse就搞定<br />
<a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0122/162517_1jkB_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0122/162517_1jkB_251064.png" alt="" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>话是这么说，但是自动化提示的变了  <span style="color: #000000;">Ctrl+Alt+Space</span>。熟悉了alt+/后很不适应,我们可以修改</p>
<p>&nbsp;</p>
<p>1,  搜索<span style="color: #000000;">Class Name Completion 就找到了.</span></p>
<p><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0122/162708_ui7m_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0122/162708_ui7m_251064.png" alt="" /></a></p>
<p>2,添加快捷键</p>
<p><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0122/162907_pkwe_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0122/162907_pkwe_251064.png" alt="" /></a></p>
<p>3.输入alt+/ 要一起按下两个键.点击ok搞定</p>
<p><a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0122/163009_RqO6_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0122/163009_RqO6_251064.png" alt="" /></a></p>
<p>&nbsp;</p>
<p>想修改其它的类似了。</p>
<p>&nbsp;</p>
<p>还有一个小技巧，就是自动导包的设置，因为现在已经变成了 alt+enter;每次都这么输也烦，照下图改了后，就爽歪歪了，自动导包。<a style="color: #ff8373;" href="http://static.oschina.net/uploads/space/2015/0122/163254_Tdv4_251064.png" target="_blank"><img src="http://static.oschina.net/uploads/space/2015/0122/163254_Tdv4_251064.png" alt="" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>当然我们之前在eclipse里面findViewById的时候，强制转换很方便，但是在android studio你鼠标放多久都不会让你转，所以我们只需要把光标移动findViewById前，然后alt+enter,也搞定啦</p>
]]></content:encoded>
			<wfw:commentRss>https://www.softwareace.cn/?feed=rss2&#038;p=1143</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
