<?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; proguard</title>
	<atom:link href="http://blog.zhourunsheng.com/tag/proguard/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.zhourunsheng.com</link>
	<description>天空一朵雨做的云</description>
	<lastBuildDate>Sat, 08 May 2021 05:17:21 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.41</generator>
	<item>
		<title>Android 配置 Ant 脚本之代码混淆和优化</title>
		<link>http://blog.zhourunsheng.com/2012/06/android-%e9%85%8d%e7%bd%ae-ant-%e8%84%9a%e6%9c%ac%e4%b9%8b%e4%bb%a3%e7%a0%81%e6%b7%b7%e6%b7%86%e5%92%8c%e4%bc%98%e5%8c%96/</link>
		<comments>http://blog.zhourunsheng.com/2012/06/android-%e9%85%8d%e7%bd%ae-ant-%e8%84%9a%e6%9c%ac%e4%b9%8b%e4%bb%a3%e7%a0%81%e6%b7%b7%e6%b7%86%e5%92%8c%e4%bc%98%e5%8c%96/#comments</comments>
		<pubDate>Wed, 20 Jun 2012 09:49:35 +0000</pubDate>
		<dc:creator><![CDATA[润物无声]]></dc:creator>
				<category><![CDATA[移动开发]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[ant]]></category>
		<category><![CDATA[proguard]]></category>

		<guid isPermaLink="false">http://blog.zhourunsheng.com/?p=1622</guid>
		<description><![CDATA[<p>本文的目的是介绍怎么样配置android的ant自动化编译脚本，来实现编译发布版本时代码的混淆和代码的优化，利 [&#8230;]</p>
<p><a rel="nofollow" href="http://blog.zhourunsheng.com/2012/06/android-%e9%85%8d%e7%bd%ae-ant-%e8%84%9a%e6%9c%ac%e4%b9%8b%e4%bb%a3%e7%a0%81%e6%b7%b7%e6%b7%86%e5%92%8c%e4%bc%98%e5%8c%96/">Android 配置 Ant 脚本之代码混淆和优化</a>，首发于<a rel="nofollow" href="http://blog.zhourunsheng.com">润物无声</a>。</p>
]]></description>
				<content:encoded><![CDATA[<p>本文的目的是介绍怎么样配置android的ant自动化编译脚本，来实现编译发布版本时代码的混淆和代码的优化，利用的主要工具包括ant和proguard。</p>
<h2>编译环境</h2>
<ul>
<li>ant 版本 1.8.4
<pre>F:\workspace\eReader&gt;ant -version
Apache Ant(TM) version 1.8.4 compiled on May 22 2012</pre>
</li>
<li>java 版本 1.7
<pre>F:\workspace\eReader&gt;java -version
java version "1.7.0_05"
Java(TM) SE Runtime Environment (build 1.7.0_05-b05)
Java HotSpot(TM) Client VM (build 23.1-b03, mixed mode, sharing)</pre>
</li>
</ul>
<p><span id="more-1622"></span></p>
<h2>文件配置</h2>
<p>因为 Android 已经内置了 proguard 的支持，所以我们只需要进行配置启用该功能即可。</p>
<ul>
<li>生成 build.xml 文件
<pre>F:\workspace\eReader&gt;android update project -p .</pre>
</li>
<li>配置 local.properties 文件<br />
sdk.dir会自动指向当前系统android的开发环境路径，key.store和key.alias分别指向签名文件和签名文件的别名，这个需要自己制作，主要是release的时候需要使用</p>
<pre>sdk.dir=E:\\PROGRA~1\\android-sdk-windows

key.store=F:\\Android\\android_key\\careychow.keystore
key.alias=Carey</pre>
</li>
<li>配置 build.xml 文件<br />
配置签名算法为 SHA1</p>
<pre> &lt;?xml version="1.0" encoding="UTF-8"?&gt;
 &lt;project name="GAReader" default="help"&gt;
     .... 此处省略若干

     &lt;presetdef name="signjar"&gt;
         &lt;signjar sigalg="MD5withRSA" digestalg="SHA1" /&gt;
     &lt;/presetdef&gt;

 &lt;/project&gt;</pre>
</li>
</ul>
<h2>自动化编译</h2>
<ul>
<li>执行编译命令 ant release
<pre>   F:\workspace\eReader&gt;ant release</pre>
</li>
<li>输入签名密钥的密码和签名别名的密码进行签名
<pre>   ......
   -release-prompt-for-password:
    [input] Please enter keystore password (store:F:\Android\android_key\careych
ow.keystore):
careychow
    [input] Please enter password for alias 'Carey':
careychow
   ......
-release-sign:
     [echo] Signing final apk...
  [signjar] Signing JAR: F:\workspace\eReader\bin\GAReader-release-unsigned.apk
to F:\workspace\eReader\bin\GAReader-release-unaligned.apk as Carey
  [signjar] 输入密钥库的密码短语:
 [zipalign] Running zip align on final apk...
     [echo] Release Package: F:\workspace\eReader\bin\GAReader-release.apk
[propertyfile] Updating property file: F:\workspace\eReader\bin\build.prop
[propertyfile] Updating property file: F:\workspace\eReader\bin\build.prop
[propertyfile] Updating property file: F:\workspace\eReader\bin\build.prop
[propertyfile] Updating property file: F:\workspace\eReader\bin\build.prop

-post-build:

release:

BUILD SUCCESSFUL
Total time: 1 minute 36 seconds</pre>
</li>
</ul>
<h2>常见错误</h2>
<ul>
<li>去除 proguard 的警告信息，尤其在自己引用第三方library的时候， 代码混淆的过程中，proguard分析当前所有的类库，会警告有些类或者方法无法识别，因为这些都是第三方library自己编译的，我们无法再去找它所依赖的其他包，只需要配置忽略这些警告即可，方法如下：<br />
配置 proguard.cfg 文件,在文件的最后加上要忽略的类</p>
<pre>  ......
-dontwarn java.awt.**,antlr.**,org.junit.**,jargs.gnu.**</pre>
</li>
<li>解决签名错误 INSTALL_PARSE_FAILED_NO_CERTIFICATES<br />
目前在JDK7的版本和ant1.8.4会出现这个问题，如果不指明所使用的签名算法，则APK就无法正确签名，在安装的过程中就会出现如上的错误信息，解决办法就是在build.xml中指明签名算法。<br />
还有另外的解决方法，可参照如下文章：</p>
<ul>
<li><a href="http://stackoverflow.com/questions/8036422/android-signing-with-ant">http://stackoverflow.com/questions/8036422/android-signing-with-ant</a></li>
<li><a href="http://stackoverflow.com/questions/9820769/why-does-adb-fail-with-failure-install-parse-failed-no-certificates">http://stackoverflow.com/questions/9820769/why-does-adb-fail-with-failure-install-parse-failed-no-certificates</a></li>
</ul>
</li>
</ul>
<h2>总结</h2>
<p>配置和启用的过程倒是不复杂，主要就是出现的一些版本兼容问题比较难解决，好了，内容就讲解这么多！</p>
<p><a rel="nofollow" href="http://blog.zhourunsheng.com/2012/06/android-%e9%85%8d%e7%bd%ae-ant-%e8%84%9a%e6%9c%ac%e4%b9%8b%e4%bb%a3%e7%a0%81%e6%b7%b7%e6%b7%86%e5%92%8c%e4%bc%98%e5%8c%96/">Android 配置 Ant 脚本之代码混淆和优化</a>，首发于<a rel="nofollow" href="http://blog.zhourunsheng.com">润物无声</a>。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zhourunsheng.com/2012/06/android-%e9%85%8d%e7%bd%ae-ant-%e8%84%9a%e6%9c%ac%e4%b9%8b%e4%bb%a3%e7%a0%81%e6%b7%b7%e6%b7%86%e5%92%8c%e4%bc%98%e5%8c%96/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
