<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;DEIFRX48fCp7ImA9WhBVFEk.&quot;"><id>tag:blogger.com,1999:blog-1072233363145751245</id><updated>2013-04-20T04:28:34.074-04:00</updated><category term="mobile" /><category term="sonyericsson" /><category term="bytecode" /><category term="android" /><category term="j2me" /><category term="obfuscation" /><category term="java" /><category term="plugin" /><category term="programming" /><category term="total commander" /><category term="DEX" /><category term="disassembler" /><category term="developer" /><category term="proguard" /><category term="error" /><category term="samsung" /><category term="preverification" /><title>Lula's Chronicles</title><subtitle type="html">Developing in J2ME, Android, Blackberry, IPhone, Brew... and more</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://lulachronicles.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://lulachronicles.blogspot.com/" /><author><name>Ignacio Tomas Crespo</name><uri>https://plus.google.com/104916813805563750986</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-_GcemzLdrgQ/AAAAAAAAAAI/AAAAAAAAAAA/yTdhrLFskpw/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>21</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/LulaChronicles" /><feedburner:info uri="lulachronicles" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;DEANRnw8fSp7ImA9WhNRGU0.&quot;"><id>tag:blogger.com,1999:blog-1072233363145751245.post-8455095869034779743</id><published>2012-11-14T10:26:00.001-05:00</published><updated>2012-11-14T10:26:37.275-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-11-14T10:26:37.275-05:00</app:edited><title>Android SDK Manager can't find latest updates!</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
I had a nice surprise today. After updating the ADT plugin in Eclipse it says that I must update the android tools.&lt;br /&gt;
&lt;br /&gt;
Ok, one more time I opened the SDK Manager and searched for the updates. But wait... there is no updates. And Eclipse doesn't work! WTF?&lt;br /&gt;
&lt;br /&gt;
"It must be a bad nightmare, take it easy" I think. Just do the obvious thing, close the SDK Manager and open it again. Stupid solution, it doesn't work.&lt;br /&gt;
&lt;br /&gt;
Ok, something is bad, so I enter to the preferences and what I see is "Cache size" with the option "Delete cache". Oh yea! Now it works. God exists.&lt;br /&gt;
&lt;br /&gt;
Stupid cache, you think you know everything, but I am better than you :D&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/LulaChronicles/~4/puVDL8gwJJs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://lulachronicles.blogspot.com/feeds/8455095869034779743/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://lulachronicles.blogspot.com/2012/11/android-sdk-manager-cant-find-latest.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1072233363145751245/posts/default/8455095869034779743?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1072233363145751245/posts/default/8455095869034779743?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LulaChronicles/~3/puVDL8gwJJs/android-sdk-manager-cant-find-latest.html" title="Android SDK Manager can't find latest updates!" /><author><name>Ignacio Tomas Crespo</name><uri>https://plus.google.com/104916813805563750986</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-_GcemzLdrgQ/AAAAAAAAAAI/AAAAAAAAAAA/yTdhrLFskpw/s512-c/photo.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://lulachronicles.blogspot.com/2012/11/android-sdk-manager-cant-find-latest.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEQEQ3g-cSp7ImA9WhNREkw.&quot;"><id>tag:blogger.com,1999:blog-1072233363145751245.post-1667440396881452534</id><published>2012-11-06T03:03:00.002-05:00</published><updated>2012-11-06T10:38:22.659-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-11-06T10:38:22.659-05:00</app:edited><title>Development tools I can't live without</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;br /&gt;
Every developer has his own set of preferred tools. Me too. In my case all these tools are Java oriented because is the language I use more often. Obviously these are not the best tools you can find on internet, I'm sure you use other tools better and you hate my tools, but they gave me so many satisfactions that I think my work can't be finished without them. Too bad uh?&lt;br /&gt;
&lt;br /&gt;
&lt;ul style="text-align: left;"&gt;
&lt;li&gt;&lt;a href="http://www.eclipse.org/"&gt;Eclipse&lt;/a&gt;: "naaaaaaaaaaa, no way" maybe you think. I understand people complaining this fantastic IDE, but I am in love with this tool. I tried all IntelliJ, Netbeans, etc. and I think I know Eclipse so well that I can face any problem that it can have, I accept it's buggy due to the free plugins we install all the time.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://findbugs.sourceforge.net/"&gt;Findbugs&lt;/a&gt;: great free tool to detect common programming problems.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://checkstyle.sourceforge.net/"&gt;CheckStyle&lt;/a&gt;: the best tool to detect coding standard violations. I use it inside Eclipse of course.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.ucdetector.org/"&gt;UCDetector&lt;/a&gt;: Unused Code Detector. When your project it's really big you notice a lot of code that it is not being used. You can remove it automatically with proguard, but the best option is to delete it. Less code, less problems. This free Eclipse plugin will do the hard work for you, with many options, and allowing to remove multiple things with quickfix.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://asm.ow2.org/eclipse/index.html"&gt;ASM Bytecode Plugin&lt;/a&gt;: amazing plugin to see the java bytecode in real time. Sometimes when you want to improve something it is good to check the bytecode, you will get some nice surprises. You can change the code, but the bytecode could be exactly the same or even worst.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://tools.android.com/tips/lint"&gt;Lint&lt;/a&gt;: checks for problems in Android projects. It is included in the android SDK and the ADT plugin.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.ghisler.com/"&gt;Total Commander&lt;/a&gt;: wtf? This is not for java. Of course not, it is only THE file commander. Extremely powerful, and with lot of free plugins. It's for windows only but I use it with "wine" in MacOS. If you create a plugin the author will send you a personal license for free! Thanks Ghisler, you made me happy on christmas ;)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.sonarsource.org/"&gt;Sonar&lt;/a&gt;: easily receive reports with code coverage and errors.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://plantuml.sourceforge.net/"&gt;PlantUML&lt;/a&gt;: combined with Javadoc is an amazing tool to add UML graphs to your documentation.&lt;/li&gt;
&lt;li&gt;Google: do I need to put the link? When you don't know something he knows it :D&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
And the last thing I can say is: use the tools that are more comfortable for you, and use them well and wisely. You will love your daily job.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Cheers,&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Lula&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/LulaChronicles/~4/Pz48s1nADSo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://lulachronicles.blogspot.com/feeds/1667440396881452534/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://lulachronicles.blogspot.com/2012/11/development-tools-i-cant-live-with.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1072233363145751245/posts/default/1667440396881452534?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1072233363145751245/posts/default/1667440396881452534?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LulaChronicles/~3/Pz48s1nADSo/development-tools-i-cant-live-with.html" title="Development tools I can't live without" /><author><name>Ignacio Tomas Crespo</name><uri>https://plus.google.com/104916813805563750986</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-_GcemzLdrgQ/AAAAAAAAAAI/AAAAAAAAAAA/yTdhrLFskpw/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://lulachronicles.blogspot.com/2012/11/development-tools-i-cant-live-with.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkcGQXw_eSp7ImA9WhdaEEg.&quot;"><id>tag:blogger.com,1999:blog-1072233363145751245.post-5380020458358013437</id><published>2011-10-19T13:55:00.001-04:00</published><updated>2011-10-19T15:53:40.241-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-19T15:53:40.241-04:00</app:edited><title>What I want to see in Logcat plugin for Eclipse</title><content type="html">The new logcat plugin is cool, now has regex and more options to filter. But it lacks of:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;highlight searched text&lt;/li&gt;
&lt;li&gt; syntax coloring for XML and others&lt;/li&gt;
&lt;li&gt;selection of log format (brief, full, etc.) and ring buffer (main, radio, events)&lt;/li&gt;
&lt;/ul&gt;
I developed a small logcat plugin with those both features. Warning, this logcat plugin is ugly (I'm not a UI designer), it's just a small example.&lt;br /&gt;
&lt;br /&gt;
You can download it here: &lt;a href="https://skydrive.live.com/redir.aspx?cid=511e6cc6d535b08d&amp;amp;resid=511E6CC6D535B08D%21123"&gt;https://skydrive.live.com/redir.aspx?cid=511e6cc6d535b08d&amp;amp;resid=511E6CC6D535B08D!123&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
A few screenshots&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-2MWxZ9216_4/Tp8OSFpNQ8I/AAAAAAAADKE/Y_2IC2PRPpU/s1600/Screen+shot+2011-10-19+at+3.01.27+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="131" src="http://4.bp.blogspot.com/-2MWxZ9216_4/Tp8OSFpNQ8I/AAAAAAAADKE/Y_2IC2PRPpU/s400/Screen+shot+2011-10-19+at+3.01.27+PM.png" width="400" /&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
highlight searched text in yellow&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-gqAs5ghkKV8/Tp8OtjqgDuI/AAAAAAAADKM/NaRBAP1QKFU/s1600/Screen+shot+2011-10-19+at+3.03.08+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="65" src="http://1.bp.blogspot.com/-gqAs5ghkKV8/Tp8OtjqgDuI/AAAAAAAADKM/NaRBAP1QKFU/s400/Screen+shot+2011-10-19+at+3.03.08+PM.png" width="400" /&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
syntax highlight in XML&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
I will continue using the original logcat plugin, is really great, but still has many things to improve. Congratulations to all the developers, they did a great job.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
BR,&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
Lula&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/LulaChronicles/~4/SP2LAH8J5D4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://lulachronicles.blogspot.com/feeds/5380020458358013437/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://lulachronicles.blogspot.com/2011/10/what-i-want-to-see-in-logcat-plugin-for.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1072233363145751245/posts/default/5380020458358013437?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1072233363145751245/posts/default/5380020458358013437?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LulaChronicles/~3/SP2LAH8J5D4/what-i-want-to-see-in-logcat-plugin-for.html" title="What I want to see in Logcat plugin for Eclipse" /><author><name>Ignacio Tomas Crespo</name><uri>https://plus.google.com/104916813805563750986</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-_GcemzLdrgQ/AAAAAAAAAAI/AAAAAAAAAAA/yTdhrLFskpw/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-2MWxZ9216_4/Tp8OSFpNQ8I/AAAAAAAADKE/Y_2IC2PRPpU/s72-c/Screen+shot+2011-10-19+at+3.01.27+PM.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://lulachronicles.blogspot.com/2011/10/what-i-want-to-see-in-logcat-plugin-for.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUMGRXYzfSp7ImA9WhdXGE0.&quot;"><id>tag:blogger.com,1999:blog-1072233363145751245.post-7583953017929831243</id><published>2011-08-31T11:10:00.002-04:00</published><updated>2011-08-31T11:10:24.885-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-31T11:10:24.885-04:00</app:edited><title>Another option to disassemble APK files</title><content type="html">&lt;a href="http://code.google.com/p/dex2jar/"&gt;http://code.google.com/p/dex2jar/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
I didn't tested it, just found the project.&lt;br /&gt;
&lt;br /&gt;
BR,&lt;br /&gt;
&lt;br /&gt;
Lula&lt;img src="http://feeds.feedburner.com/~r/LulaChronicles/~4/_ohxdiwiZj8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://lulachronicles.blogspot.com/feeds/7583953017929831243/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://lulachronicles.blogspot.com/2011/08/another-option-to-disassemble-apk-files.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1072233363145751245/posts/default/7583953017929831243?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1072233363145751245/posts/default/7583953017929831243?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LulaChronicles/~3/_ohxdiwiZj8/another-option-to-disassemble-apk-files.html" title="Another option to disassemble APK files" /><author><name>Ignacio Tomas Crespo</name><uri>https://plus.google.com/104916813805563750986</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-_GcemzLdrgQ/AAAAAAAAAAI/AAAAAAAAAAA/yTdhrLFskpw/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://lulachronicles.blogspot.com/2011/08/another-option-to-disassemble-apk-files.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUYNQHo8eCp7ImA9WhdXGE0.&quot;"><id>tag:blogger.com,1999:blog-1072233363145751245.post-2095818843517311670</id><published>2011-08-31T11:05:00.003-04:00</published><updated>2011-08-31T11:06:31.470-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-31T11:06:31.470-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="disassembler" /><category scheme="http://www.blogger.com/atom/ns#" term="DEX" /><category scheme="http://www.blogger.com/atom/ns#" term="android" /><title>New DEX disassembler</title><content type="html">Checkout this new DEX file disassembler&lt;br /&gt;
&lt;a href="http://www.blogger.com/goog_113738725"&gt;&lt;br /&gt;
&lt;/a&gt;&lt;br /&gt;
&lt;a href="https://code.google.com/p/smali/"&gt;&lt;tt id="checkoutcmd"&gt;https://code.google.com/p/smali/&lt;/tt&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;tt id="checkoutcmd"&gt;it looks good and has lots of options&lt;/tt&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;tt id="checkoutcmd"&gt;BR,&lt;/tt&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;tt id="checkoutcmd"&gt;Lula &lt;/tt&gt;&lt;img src="http://feeds.feedburner.com/~r/LulaChronicles/~4/zDAEsWT-TwQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://lulachronicles.blogspot.com/feeds/2095818843517311670/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://lulachronicles.blogspot.com/2011/08/new-dex-disassembler.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1072233363145751245/posts/default/2095818843517311670?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1072233363145751245/posts/default/2095818843517311670?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LulaChronicles/~3/zDAEsWT-TwQ/new-dex-disassembler.html" title="New DEX disassembler" /><author><name>Ignacio Tomas Crespo</name><uri>https://plus.google.com/104916813805563750986</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-_GcemzLdrgQ/AAAAAAAAAAI/AAAAAAAAAAA/yTdhrLFskpw/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://lulachronicles.blogspot.com/2011/08/new-dex-disassembler.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0AFRn85cSp7ImA9WhZVGEs.&quot;"><id>tag:blogger.com,1999:blog-1072233363145751245.post-6858542769131169300</id><published>2011-05-31T14:15:00.000-04:00</published><updated>2011-05-31T14:15:17.129-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-31T14:15:17.129-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="proguard" /><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="obfuscation" /><category scheme="http://www.blogger.com/atom/ns#" term="android" /><title>Obfuscate android builds using proguard</title><content type="html">The new android SDK comes with proguard included in the build system. You can check how to use it at &lt;a href="http://developer.android.com/guide/developing/tools/proguard.html"&gt;http://developer.android.com/guide/developing/tools/proguard.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Not all the proguard options can be used, specially those used for optimizations. &lt;br /&gt;
&lt;br /&gt;
You should keep all classes used in xml files. The best way to do it is to keep classes that extend from android.content.Context due to almost everything related to android UI and services belong to the android context.&lt;br /&gt;
&lt;br /&gt;
After some research I give you the best proguard.cfg for almost any application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;i&gt;&lt;span style="color: black;"&gt;-dontpreverify&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;-dontskipnonpubliclibraryclasses&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;-dontskipnonpubliclibraryclassmembers&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;-optimizations !code/simplification/arithmetic&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;-optimizationpasses 5&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;-useuniqueclassmembernames&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;-dontusemixedcaseclassnames&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;-verbose&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;-target 1.6&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;# -repackageclasses mypackage&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;-keep public class * extends android.content.Context {&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp; *** &lt;init&gt;(...); &lt;/init&gt;&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;}&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;-keepclassmembers enum * {&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static **[] values();&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static ** valueOf(java.lang.String);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;}&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;-keepattributes Exceptions, InnerClasses, Signature&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;# Keep names - Native method names. Keep all native class/method names.&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;-keepclasseswithmembers,allowshrinking class * {&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; native &lt;methods&gt;;&lt;/methods&gt;&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;}&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;-assumenosideeffects public class android.util.Log {&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp; *** *(...);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;}&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;# Remove - System method calls. Remove all invocations of System&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;# methods without side effects whose return values are not used.&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;-assumenosideeffects public class java.lang.System {&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static long currentTimeMillis();&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; static java.lang.Class getCallerClass();&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static int identityHashCode(java.lang.Object);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.SecurityManager getSecurityManager();&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.util.Properties getProperties();&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.String getProperty(java.lang.String);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.String getenv(java.lang.String);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.String mapLibraryName(java.lang.String);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.String getProperty(java.lang.String,java.lang.String);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;}&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;# Remove - Math method calls. Remove all invocations of Math&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;# methods without side effects whose return values are not used.&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;-assumenosideeffects public class java.lang.Math {&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static double sin(double);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static double cos(double);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static double tan(double);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static double asin(double);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static double acos(double);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static double atan(double);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static double toRadians(double);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static double toDegrees(double);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static double exp(double);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static double log(double);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static double log10(double);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static double sqrt(double);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static double cbrt(double);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static double IEEEremainder(double,double);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static double ceil(double);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static double floor(double);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static double rint(double);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static double atan2(double,double);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static double pow(double,double);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static int round(float);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static long round(double);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static double random();&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static int abs(int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static long abs(long);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static float abs(float);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static double abs(double);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static int max(int,int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static long max(long,long);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static float max(float,float);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static double max(double,double);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static int min(int,int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static long min(long,long);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static float min(float,float);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static double min(double,double);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static double ulp(double);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static float ulp(float);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static double signum(double);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static float signum(float);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static double sinh(double);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static double cosh(double);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static double tanh(double);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static double hypot(double,double);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static double expm1(double);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static double log1p(double);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;}&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;# Remove - Number method calls. Remove all invocations of Number&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;# methods without side effects whose return values are not used.&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;-assumenosideeffects public class java.lang.* extends java.lang.Number {&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.String toString(byte);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.Byte valueOf(byte);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static byte parseByte(java.lang.String);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static byte parseByte(java.lang.String,int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.Byte valueOf(java.lang.String,int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.Byte valueOf(java.lang.String);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.Byte decode(java.lang.String);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int compareTo(java.lang.Byte);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.String toString(short);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static short parseShort(java.lang.String);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static short parseShort(java.lang.String,int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.Short valueOf(java.lang.String,int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.Short valueOf(java.lang.String);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.Short valueOf(short);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.Short decode(java.lang.String);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static short reverseBytes(short);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int compareTo(java.lang.Short);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.String toString(int,int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.String toHexString(int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.String toOctalString(int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.String toBinaryString(int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.String toString(int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static int parseInt(java.lang.String,int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static int parseInt(java.lang.String);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.Integer valueOf(java.lang.String,int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.Integer valueOf(java.lang.String);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.Integer valueOf(int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.Integer getInteger(java.lang.String);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.Integer getInteger(java.lang.String,int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.Integer getInteger(java.lang.String,java.lang.Integer);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.Integer decode(java.lang.String);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static int highestOneBit(int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static int lowestOneBit(int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static int numberOfLeadingZeros(int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static int numberOfTrailingZeros(int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static int bitCount(int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static int rotateLeft(int,int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static int rotateRight(int,int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static int reverse(int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static int signum(int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static int reverseBytes(int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int compareTo(java.lang.Integer);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.String toString(long,int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.String toHexString(long);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.String toOctalString(long);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.String toBinaryString(long);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.String toString(long);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static long parseLong(java.lang.String,int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static long parseLong(java.lang.String);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.Long valueOf(java.lang.String,int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.Long valueOf(java.lang.String);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.Long valueOf(long);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.Long decode(java.lang.String);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.Long getLong(java.lang.String);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.Long getLong(java.lang.String,long);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.Long getLong(java.lang.String,java.lang.Long);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static long highestOneBit(long);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static long lowestOneBit(long);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static int numberOfLeadingZeros(long);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static int numberOfTrailingZeros(long);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static int bitCount(long);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static long rotateLeft(long,int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static long rotateRight(long,int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static long reverse(long);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static int signum(long);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static long reverseBytes(long);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int compareTo(java.lang.Long);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.String toString(float);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.String toHexString(float);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.Float valueOf(java.lang.String);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.Float valueOf(float);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static float parseFloat(java.lang.String);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static boolean isNaN(float);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static boolean isInfinite(float);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static int floatToIntBits(float);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static int floatToRawIntBits(float);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static float intBitsToFloat(int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static int compare(float,float);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public boolean isNaN();&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public boolean isInfinite();&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int compareTo(java.lang.Float);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.String toString(double);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.String toHexString(double);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.Double valueOf(java.lang.String);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.Double valueOf(double);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static double parseDouble(java.lang.String);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static boolean isNaN(double);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static boolean isInfinite(double);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static long doubleToLongBits(double);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static long doubleToRawLongBits(double);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static double longBitsToDouble(long);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static int compare(double,double);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public boolean isNaN();&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public boolean isInfinite();&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int compareTo(java.lang.Double);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public &lt;init&gt;(byte);&lt;/init&gt;&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public &lt;init&gt;(short);&lt;/init&gt;&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public &lt;init&gt;(int);&lt;/init&gt;&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public &lt;init&gt;(long);&lt;/init&gt;&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public &lt;init&gt;(float);&lt;/init&gt;&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public &lt;init&gt;(double);&lt;/init&gt;&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public &lt;init&gt;(java.lang.String);&lt;/init&gt;&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public byte byteValue();&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public short shortValue();&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int intValue();&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public long longValue();&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public float floatValue();&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public double doubleValue();&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int compareTo(java.lang.Object);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public boolean equals(java.lang.Object);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int hashCode();&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public java.lang.String toString();&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;}&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;# Remove - String method calls. Remove all invocations of String&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;# methods without side effects whose return values are not used.&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;-assumenosideeffects public class java.lang.String {&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public &lt;init&gt;();&lt;/init&gt;&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public &lt;init&gt;(byte[]);&lt;/init&gt;&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public &lt;init&gt;(byte[],int);&lt;/init&gt;&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public &lt;init&gt;(byte[],int,int);&lt;/init&gt;&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public &lt;init&gt;(byte[],int,int,int);&lt;/init&gt;&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public &lt;init&gt;(byte[],int,int,java.lang.String);&lt;/init&gt;&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public &lt;init&gt;(byte[],java.lang.String);&lt;/init&gt;&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public &lt;init&gt;(char[]);&lt;/init&gt;&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public &lt;init&gt;(char[],int,int);&lt;/init&gt;&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public &lt;init&gt;(java.lang.String);&lt;/init&gt;&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public &lt;init&gt;(java.lang.StringBuffer);&lt;/init&gt;&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.String copyValueOf(char[]);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.String copyValueOf(char[],int,int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.String valueOf(boolean);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.String valueOf(char);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.String valueOf(char[]);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.String valueOf(char[],int,int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.String valueOf(double);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.String valueOf(float);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.String valueOf(int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.String valueOf(java.lang.Object);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static java.lang.String valueOf(long);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public boolean contentEquals(java.lang.StringBuffer);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public boolean endsWith(java.lang.String);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public boolean equalsIgnoreCase(java.lang.String);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public boolean equals(java.lang.Object);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public boolean matches(java.lang.String);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public boolean regionMatches(boolean,int,java.lang.String,int,int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public boolean regionMatches(int,java.lang.String,int,int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public boolean startsWith(java.lang.String);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public boolean startsWith(java.lang.String,int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public byte[] getBytes();&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public byte[] getBytes(java.lang.String);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public char charAt(int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public char[] toCharArray();&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int compareToIgnoreCase(java.lang.String);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int compareTo(java.lang.Object);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int compareTo(java.lang.String);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int hashCode();&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int indexOf(int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int indexOf(int,int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int indexOf(java.lang.String);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int indexOf(java.lang.String,int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int lastIndexOf(int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int lastIndexOf(int,int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int lastIndexOf(java.lang.String);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int lastIndexOf(java.lang.String,int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int length();&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public java.lang.CharSequence subSequence(int,int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public java.lang.String concat(java.lang.String);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public java.lang.String replaceAll(java.lang.String,java.lang.String);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public java.lang.String replace(char,char);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public java.lang.String replaceFirst(java.lang.String,java.lang.String);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public java.lang.String[] split(java.lang.String);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public java.lang.String[] split(java.lang.String,int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public java.lang.String substring(int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public java.lang.String substring(int,int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public java.lang.String toLowerCase();&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public java.lang.String toLowerCase(java.util.Locale);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public java.lang.String toString();&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public java.lang.String toUpperCase();&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public java.lang.String toUpperCase(java.util.Locale);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public java.lang.String trim();&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;}&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;# Remove - StringBuffer method calls. Remove all invocations of StringBuffer&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;# methods without side effects whose return values are not used.&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;-assumenosideeffects public class java.lang.StringBuffer {&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public &lt;init&gt;();&lt;/init&gt;&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public &lt;init&gt;(int);&lt;/init&gt;&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public &lt;init&gt;(java.lang.String);&lt;/init&gt;&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public &lt;init&gt;(java.lang.CharSequence);&lt;/init&gt;&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public java.lang.String toString();&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public char charAt(int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int capacity();&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int codePointAt(int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int codePointBefore(int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int indexOf(java.lang.String,int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int lastIndexOf(java.lang.String);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int lastIndexOf(java.lang.String,int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int length();&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public java.lang.String substring(int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public java.lang.String substring(int,int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;}&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;# Remove - StringBuilder method calls. Remove all invocations of StringBuilder&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;# methods without side effects whose return values are not used.&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;-assumenosideeffects public class java.lang.StringBuilder {&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public &lt;init&gt;();&lt;/init&gt;&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public &lt;init&gt;(int);&lt;/init&gt;&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public &lt;init&gt;(java.lang.String);&lt;/init&gt;&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public &lt;init&gt;(java.lang.CharSequence);&lt;/init&gt;&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public java.lang.String toString();&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public char charAt(int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int capacity();&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int codePointAt(int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int codePointBefore(int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int indexOf(java.lang.String,int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int lastIndexOf(java.lang.String);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int lastIndexOf(java.lang.String,int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int length();&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public java.lang.String substring(int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public java.lang.String substring(int,int);&lt;/span&gt;&lt;br style="color: black;" /&gt;&lt;span style="color: black;"&gt;}&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
BR,&lt;br /&gt;
&lt;br /&gt;
Lula&lt;img src="http://feeds.feedburner.com/~r/LulaChronicles/~4/Fjlz4PgCPIk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://lulachronicles.blogspot.com/feeds/6858542769131169300/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://lulachronicles.blogspot.com/2011/05/obfuscate-android-builds-using-proguard.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1072233363145751245/posts/default/6858542769131169300?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1072233363145751245/posts/default/6858542769131169300?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LulaChronicles/~3/Fjlz4PgCPIk/obfuscate-android-builds-using-proguard.html" title="Obfuscate android builds using proguard" /><author><name>Ignacio Tomas Crespo</name><uri>https://plus.google.com/104916813805563750986</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-_GcemzLdrgQ/AAAAAAAAAAI/AAAAAAAAAAA/yTdhrLFskpw/s512-c/photo.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://lulachronicles.blogspot.com/2011/05/obfuscate-android-builds-using-proguard.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUARH88fyp7ImA9WhZQGEg.&quot;"><id>tag:blogger.com,1999:blog-1072233363145751245.post-6475885085380033510</id><published>2011-04-26T16:37:00.000-04:00</published><updated>2011-04-26T16:37:25.177-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-26T16:37:25.177-04:00</app:edited><title>How to check if an APK has the flag android:debuggable="true"</title><content type="html">Using the aapt tool you can check lots of things inside an apk. Use the following command:&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;aapt list -v -a myfile.apk&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
this shows hundreds of lines, but you must search the following text "android:debuggable"&lt;br /&gt;
&lt;br /&gt;
this flag can have the values:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;0x0&lt;/b&gt;: debuggable false&lt;br /&gt;
&lt;b&gt;0xffffffff&lt;/b&gt;: debugabble true&lt;br /&gt;
&lt;br /&gt;
in my case the entire line is the following&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;A: android:debuggable(0x0101000f)=(type 0x12)0xffffffff&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Ups! My release build had the flag enabled ;) &lt;br /&gt;
&lt;br /&gt;
Cheers,&lt;br /&gt;
&lt;br /&gt;
Lula&lt;img src="http://feeds.feedburner.com/~r/LulaChronicles/~4/L4JiLLgH1BE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://lulachronicles.blogspot.com/feeds/6475885085380033510/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://lulachronicles.blogspot.com/2011/04/how-to-check-if-apk-has-flag.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1072233363145751245/posts/default/6475885085380033510?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1072233363145751245/posts/default/6475885085380033510?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LulaChronicles/~3/L4JiLLgH1BE/how-to-check-if-apk-has-flag.html" title="How to check if an APK has the flag android:debuggable=&quot;true&quot;" /><author><name>Ignacio Tomas Crespo</name><uri>https://plus.google.com/104916813805563750986</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-_GcemzLdrgQ/AAAAAAAAAAI/AAAAAAAAAAA/yTdhrLFskpw/s512-c/photo.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://lulachronicles.blogspot.com/2011/04/how-to-check-if-apk-has-flag.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEIMR3c8fCp7ImA9WxBUFUo.&quot;"><id>tag:blogger.com,1999:blog-1072233363145751245.post-3415267839151667948</id><published>2010-03-02T18:29:00.000-05:00</published><updated>2010-03-02T18:29:46.974-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-02T18:29:46.974-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="proguard" /><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="mobile" /><category scheme="http://www.blogger.com/atom/ns#" term="error" /><category scheme="http://www.blogger.com/atom/ns#" term="obfuscation" /><category scheme="http://www.blogger.com/atom/ns#" term="j2me" /><title>Proguard 4.x error -  java.lang.ArrayIndexOutOfBoundsException - How to fix it</title><content type="html">Using Proguard to obfuscate your classes in your midlets is a must. The jar size is reduced and the code is optimized.&lt;br /&gt;
&lt;br /&gt;
But when I obfuscated my app an error is displayed and the jar is not obfustaced. The error is similar to:&lt;br /&gt;
&lt;br /&gt;
 java.lang.ArrayIndexOutOfBoundsException: 2&lt;br /&gt;
&lt;br /&gt;
WTF is this? :)&lt;br /&gt;
&lt;br /&gt;
I don't know why, I didn't download the source of proguard (BTW this amazing tool is opensource)&lt;br /&gt;
&lt;br /&gt;
How to fix it? Two options:&lt;br /&gt;
* disable optimization. It's not the best option but it helps. Use parameter -dontoptimize&lt;br /&gt;
* disable optimization partially. I used this option. The last proguard has many parameters for optimization, and I found the parameter that worked in my midlet:&lt;br /&gt;
&lt;br /&gt;
-optimizations !method/marking/static&lt;br /&gt;
&lt;br /&gt;
this means the optimizer will avoid marking methods as static.&lt;br /&gt;
&lt;br /&gt;
It worked for me, I hope it works for you.&lt;br /&gt;
&lt;br /&gt;
Proguard optimizations site: http://proguard.sourceforge.net/manual/optimizations.html&lt;img src="http://feeds.feedburner.com/~r/LulaChronicles/~4/OuP67JTCuCk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://lulachronicles.blogspot.com/feeds/3415267839151667948/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://lulachronicles.blogspot.com/2010/03/proguard-4x-error-javalangarrayindexout.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1072233363145751245/posts/default/3415267839151667948?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1072233363145751245/posts/default/3415267839151667948?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LulaChronicles/~3/OuP67JTCuCk/proguard-4x-error-javalangarrayindexout.html" title="Proguard 4.x error -  java.lang.ArrayIndexOutOfBoundsException - How to fix it" /><author><name>Ignacio Tomas Crespo</name><uri>https://plus.google.com/104916813805563750986</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-_GcemzLdrgQ/AAAAAAAAAAI/AAAAAAAAAAA/yTdhrLFskpw/s512-c/photo.jpg" /></author><thr:total>3</thr:total><feedburner:origLink>http://lulachronicles.blogspot.com/2010/03/proguard-4x-error-javalangarrayindexout.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEEMQHk8fSp7ImA9WxBUGU0.&quot;"><id>tag:blogger.com,1999:blog-1072233363145751245.post-6173152771238365561</id><published>2010-03-02T18:17:00.001-05:00</published><updated>2010-03-06T15:18:01.775-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-06T15:18:01.775-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="mobile" /><category scheme="http://www.blogger.com/atom/ns#" term="samsung" /><category scheme="http://www.blogger.com/atom/ns#" term="error" /><category scheme="http://www.blogger.com/atom/ns#" term="j2me" /><title>Samsung - Java Error: Invalid Format. How to fix it.</title><content type="html">There is a strange error in Samsung phones. When you try to launch a midlet the phone displays the message "Java Error: Invalid format".&lt;br /&gt;
&lt;br /&gt;
Why?&lt;br /&gt;
&lt;br /&gt;
This means the virtual machine can't load the classes of the midlet. It could be:&lt;br /&gt;
- the classes are not preverified&lt;br /&gt;
- the classes are corrupted&lt;br /&gt;
- the classes are ok but the VM can't load them, because an exception is launched while they are loading..&lt;br /&gt;
&lt;br /&gt;
We will focus in the last option. &lt;b&gt;Why a class can't be loaded and how to fix it?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
- Sometimes we write some lines of code in the midlet constructor. But this lines can have method calls to other classes and so on, and all classes must be loaded BEFORE the midlet is initializad. If the midlet is not initialized it can't manage well things like screen.getWidth and getHeight, etc. &lt;b&gt;Avoid method calls in the midlet constructor.&lt;/b&gt;&lt;br /&gt;
- &lt;b&gt;Other cause can be to write method calls in static blocks or static variables&lt;/b&gt;. It's the same problem than before, lots of things must be loaded BEFORE the midlet is instantiated.&lt;br /&gt;
&lt;br /&gt;
So, now the midlet is instantiated before the classes are loaded. Now the error "Invalid Formatd" shouldn't appear. Your phone must launch now an exception or anything similar.&lt;br /&gt;
&lt;br /&gt;
E.g: Samsung S8000 Jet. This phone has a problem in some firmwares. The method Font.getSize() returns a non standard value, and when you want to obtain a new font using the size returned by Font.getSize() an exception is launched.&amp;nbsp; If this code is called by the constructor block an exception is thrown before the midlet is instantiated, so the error "Invalid Format" is displayed.&lt;br /&gt;
&lt;br /&gt;
I worked with lots of samsungs and generally the solution is the same. Avoid coding in the constructor to find easily the errors.&lt;br /&gt;
&lt;br /&gt;
I hope it works for you.&lt;br /&gt;
&lt;br /&gt;
Cheers,&lt;br /&gt;
&lt;br /&gt;
Lula&lt;img src="http://feeds.feedburner.com/~r/LulaChronicles/~4/zhJfNGXLUqQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://lulachronicles.blogspot.com/feeds/6173152771238365561/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://lulachronicles.blogspot.com/2010/03/samsung-java-error-invalid-format-how.html#comment-form" title="19 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1072233363145751245/posts/default/6173152771238365561?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1072233363145751245/posts/default/6173152771238365561?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LulaChronicles/~3/zhJfNGXLUqQ/samsung-java-error-invalid-format-how.html" title="Samsung - Java Error: Invalid Format. How to fix it." /><author><name>Ignacio Tomas Crespo</name><uri>https://plus.google.com/104916813805563750986</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-_GcemzLdrgQ/AAAAAAAAAAI/AAAAAAAAAAA/yTdhrLFskpw/s512-c/photo.jpg" /></author><thr:total>19</thr:total><feedburner:origLink>http://lulachronicles.blogspot.com/2010/03/samsung-java-error-invalid-format-how.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEYFSH44cSp7ImA9WxBUFUo.&quot;"><id>tag:blogger.com,1999:blog-1072233363145751245.post-2861863784688113187</id><published>2010-02-27T00:27:00.002-05:00</published><updated>2010-03-02T18:21:59.039-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-02T18:21:59.039-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="sonyericsson" /><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="mobile" /><category scheme="http://www.blogger.com/atom/ns#" term="error" /><category scheme="http://www.blogger.com/atom/ns#" term="j2me" /><title>Bug Sony W580: error displaying text using UTF8 encoding</title><content type="html">There is a strange bug with SonyEricsson W580. When drawing strings in UTF8 format some special characters are not displayed.&lt;br /&gt;
The strings are created using the following:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="color: blue;"&gt;new String(bytearray, offset, size, "UTF-8")&lt;/div&gt;&lt;br /&gt;
and to fix the bug it must be created using:&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; StringBuffer sb = new StringBuffer();&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; for (int i = offset; i &amp;lt; offset + size; i++) {&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sb.append(new String(bytearray, i, bytearray[i] &amp;lt; 0 ? 2 : 1, "UTF-8"));&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (bytearray[i] &amp;lt; 0){ i++; }&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; String txt = sb.toString();&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
A tiny bug, and a very ugly fix ;)&lt;br /&gt;
&lt;br /&gt;
Lula&lt;img src="http://feeds.feedburner.com/~r/LulaChronicles/~4/CE3EkQXhM_Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://lulachronicles.blogspot.com/feeds/2861863784688113187/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://lulachronicles.blogspot.com/2010/02/bug-sony-w580-error-displaying-text-in.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1072233363145751245/posts/default/2861863784688113187?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1072233363145751245/posts/default/2861863784688113187?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LulaChronicles/~3/CE3EkQXhM_Q/bug-sony-w580-error-displaying-text-in.html" title="Bug Sony W580: error displaying text using UTF8 encoding" /><author><name>Ignacio Tomas Crespo</name><uri>https://plus.google.com/104916813805563750986</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-_GcemzLdrgQ/AAAAAAAAAAI/AAAAAAAAAAA/yTdhrLFskpw/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://lulachronicles.blogspot.com/2010/02/bug-sony-w580-error-displaying-text-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UNQHg4eip7ImA9WxBTFEQ.&quot;"><id>tag:blogger.com,1999:blog-1072233363145751245.post-3902465421410619110</id><published>2009-12-10T21:41:00.000-05:00</published><updated>2009-12-10T21:41:31.632-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-10T21:41:31.632-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="plugin" /><category scheme="http://www.blogger.com/atom/ns#" term="total commander" /><category scheme="http://www.blogger.com/atom/ns#" term="bytecode" /><title>Java Class unpacker v0.7.1 released</title><content type="html">Java Class Unpacker v0.7.1 released.&lt;br /&gt;
Plugin for Total Commander&lt;br /&gt;
&lt;br /&gt;
Changes:&lt;br /&gt;
&amp;nbsp; * fixed LDC_W opcode&lt;br /&gt;
&amp;nbsp; * fixed MULTIANEWARRAY opcode&lt;br /&gt;
&amp;nbsp; * fixed GOTO_W opcode&lt;br /&gt;
&amp;nbsp; * fixed NEWARRAY opcode&lt;br /&gt;
&amp;nbsp; - refactoring&lt;br /&gt;
&amp;nbsp; - implemented basic configuration&lt;br /&gt;
&amp;nbsp; - fixed char type in constant pool&lt;br /&gt;
&lt;br /&gt;
Download: &lt;a href="http://cid-511e6cc6d535b08d.skydrive.live.com/self.aspx/JavaClassUnpacker"&gt;http://cid-511e6cc6d535b08d.skydrive.live.com/self.aspx/JavaClassUnpacker&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Cheers,&lt;br /&gt;
&lt;br /&gt;
Lula&lt;img src="http://feeds.feedburner.com/~r/LulaChronicles/~4/_xPD2fUjA4s" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://lulachronicles.blogspot.com/feeds/3902465421410619110/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://lulachronicles.blogspot.com/2009/12/java-class-unpacker-v071-released.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1072233363145751245/posts/default/3902465421410619110?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1072233363145751245/posts/default/3902465421410619110?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LulaChronicles/~3/_xPD2fUjA4s/java-class-unpacker-v071-released.html" title="Java Class unpacker v0.7.1 released" /><author><name>Ignacio Tomas Crespo</name><uri>https://plus.google.com/104916813805563750986</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-_GcemzLdrgQ/AAAAAAAAAAI/AAAAAAAAAAA/yTdhrLFskpw/s512-c/photo.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://lulachronicles.blogspot.com/2009/12/java-class-unpacker-v071-released.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkIARXsyfCp7ImA9WxNaFko.&quot;"><id>tag:blogger.com,1999:blog-1072233363145751245.post-3525000544378833807</id><published>2009-12-01T09:42:00.000-05:00</published><updated>2009-12-01T09:42:24.594-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-01T09:42:24.594-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="plugin" /><category scheme="http://www.blogger.com/atom/ns#" term="total commander" /><category scheme="http://www.blogger.com/atom/ns#" term="bytecode" /><title>Java Class Unpacker v0.7.0</title><content type="html">Java Class Unpacker v0.7.0 released.&lt;br /&gt;
Plugin for Total Commander&lt;br /&gt;
&lt;br /&gt;
Changes:&lt;br /&gt;
&amp;nbsp; - fixed NEW opcode&lt;br /&gt;
&amp;nbsp; - fixed error with classes containing many attribute types: SourceFile, ConstantValue, Exceptions, InnerClasses, Synthetic, LineNumberTable, LocalVariableTable, Deprecated,&lt;br /&gt;
&amp;nbsp; - fixed native methods&lt;br /&gt;
&amp;nbsp; + added header.txt in class unpack containing class header info&lt;br /&gt;
&amp;nbsp; - fixed locals and stack size in method unpack&lt;br /&gt;
&amp;nbsp; - fixed integer, long, float and double in constant pool&lt;br /&gt;
&lt;br /&gt;
Download: &lt;a href="http://cid-511e6cc6d535b08d.skydrive.live.com/self.aspx/JavaClassUnpacker"&gt;http://cid-511e6cc6d535b08d.skydrive.live.com/self.aspx/JavaClassUnpacker&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Cheers,&lt;br /&gt;
&lt;br /&gt;
Lula&lt;img src="http://feeds.feedburner.com/~r/LulaChronicles/~4/3HbjZhGMpuM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://lulachronicles.blogspot.com/feeds/3525000544378833807/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://lulachronicles.blogspot.com/2009/12/java-class-unpacker-v070.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1072233363145751245/posts/default/3525000544378833807?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1072233363145751245/posts/default/3525000544378833807?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LulaChronicles/~3/3HbjZhGMpuM/java-class-unpacker-v070.html" title="Java Class Unpacker v0.7.0" /><author><name>Ignacio Tomas Crespo</name><uri>https://plus.google.com/104916813805563750986</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-_GcemzLdrgQ/AAAAAAAAAAI/AAAAAAAAAAA/yTdhrLFskpw/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://lulachronicles.blogspot.com/2009/12/java-class-unpacker-v070.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkAGQ3YzeSp7ImA9WxNaE0o.&quot;"><id>tag:blogger.com,1999:blog-1072233363145751245.post-3139649235437740920</id><published>2009-11-27T22:24:00.001-05:00</published><updated>2009-11-27T22:25:22.881-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-27T22:25:22.881-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="plugin" /><category scheme="http://www.blogger.com/atom/ns#" term="total commander" /><category scheme="http://www.blogger.com/atom/ns#" term="bytecode" /><title>Java Class Unpacker v0.6.0</title><content type="html">Java Class Unpacker v0.6.0 released.&lt;br /&gt;
Plugin for Total Commander&lt;br /&gt;
&lt;br /&gt;
Changes:&lt;br /&gt;
&amp;nbsp;- fixed: abstract classes and methods&lt;br /&gt;
&amp;nbsp;- added constant pool&lt;br /&gt;
&amp;nbsp;- implemented decompilation of tableswitch and lookupswitch&lt;br /&gt;
&amp;nbsp;- file offsets and hexa bytes in code&lt;br /&gt;
&amp;nbsp;- renamed file to JavaClassUnpacker.wcx&lt;br /&gt;
&lt;br /&gt;
Download: &lt;a href="http://cid-511e6cc6d535b08d.skydrive.live.com/self.aspx/JavaClassUnpacker"&gt;http://cid-511e6cc6d535b08d.skydrive.live.com/self.aspx/JavaClassUnpacker&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Cheers,&lt;br /&gt;
&lt;br /&gt;
Lula&lt;img src="http://feeds.feedburner.com/~r/LulaChronicles/~4/6MxLV4zlaIg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://lulachronicles.blogspot.com/feeds/3139649235437740920/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://lulachronicles.blogspot.com/2009/11/java-class-unpacker-v060.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1072233363145751245/posts/default/3139649235437740920?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1072233363145751245/posts/default/3139649235437740920?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LulaChronicles/~3/6MxLV4zlaIg/java-class-unpacker-v060.html" title="Java Class Unpacker v0.6.0" /><author><name>Ignacio Tomas Crespo</name><uri>https://plus.google.com/104916813805563750986</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-_GcemzLdrgQ/AAAAAAAAAAI/AAAAAAAAAAA/yTdhrLFskpw/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://lulachronicles.blogspot.com/2009/11/java-class-unpacker-v060.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUIMSHk-eCp7ImA9WxNaEkQ.&quot;"><id>tag:blogger.com,1999:blog-1072233363145751245.post-398891643369829744</id><published>2009-11-26T23:53:00.000-05:00</published><updated>2009-11-26T23:53:09.750-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-26T23:53:09.750-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="plugin" /><category scheme="http://www.blogger.com/atom/ns#" term="total commander" /><category scheme="http://www.blogger.com/atom/ns#" term="bytecode" /><title>New Total Commander Plugin - Java Class Unpacker v0.5.0</title><content type="html">I developed a new plugin for the amazing Total Commander. Using this plugin you can enter to class files as compressed files and see fields and methods as files.&lt;br /&gt;
Methods can be viewed using F3, the java bytecode is displayed as text.&lt;br /&gt;
&lt;br /&gt;
I have no site so I uploaded to megaupload, you can download it from:&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.megaupload.com/?d=8BW30ZAD"&gt;http://www.megaupload.com/?d=8BW30ZAD&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Please feel free to send me bugs, comments or suggestions.&lt;br /&gt;
&lt;br /&gt;
Enjoy!&lt;img src="http://feeds.feedburner.com/~r/LulaChronicles/~4/ygm0q9QLl1w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://lulachronicles.blogspot.com/feeds/398891643369829744/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://lulachronicles.blogspot.com/2009/11/new-total-commander-plugin-java-class.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1072233363145751245/posts/default/398891643369829744?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1072233363145751245/posts/default/398891643369829744?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LulaChronicles/~3/ygm0q9QLl1w/new-total-commander-plugin-java-class.html" title="New Total Commander Plugin - Java Class Unpacker v0.5.0" /><author><name>Ignacio Tomas Crespo</name><uri>https://plus.google.com/104916813805563750986</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-_GcemzLdrgQ/AAAAAAAAAAI/AAAAAAAAAAA/yTdhrLFskpw/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://lulachronicles.blogspot.com/2009/11/new-total-commander-plugin-java-class.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE8BQXY4eip7ImA9WxNbEU8.&quot;"><id>tag:blogger.com,1999:blog-1072233363145751245.post-8387157749463322216</id><published>2009-11-13T09:34:00.000-05:00</published><updated>2009-11-13T09:34:10.832-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-13T09:34:10.832-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="preverification" /><category scheme="http://www.blogger.com/atom/ns#" term="j2me" /><title>J2ME: Fixing Cannot find class java/lang/NoClassDefFoundError at preverify</title><content type="html">I had a strange error when preverifying a midlet.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [exec] Error preverifying class temp.TestMidlet&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [exec]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; VERIFIER ERROR temp/TestMidlet.&lt;clinit&gt;()V:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [exec] Cannot find class java/lang/NoClassDefFoundError&lt;/clinit&gt;&lt;br /&gt;
&lt;br /&gt;
The midlet is ok, Eclipse doesn't display an error. Searching in all the library jars in WTK I found the class NoClassDefFoundError is inside cldcapi11.jar. I modified the cldc jar and nows compiles.&lt;br /&gt;
&lt;br /&gt;
But is not enough for me, I'm not using float or doubles so I want to compile the midlet for CLDC10. So I continued playing and I found the reason: I'm using the field named "class" to obtain the name of a class.&lt;br /&gt;
&lt;br /&gt;
E.g:&lt;br /&gt;
&lt;br /&gt;
To obtain the Class object of class TestMidlet I'm using the following code:&lt;br /&gt;
&lt;br /&gt;
Class clazz = TestMidlet.class;&lt;br /&gt;
&lt;br /&gt;
this is ok for CLDC11 but for CLDC10 is wrong, I must use this.getClass or something similar.&lt;br /&gt;
&lt;br /&gt;
I hope you can find this useful.&lt;br /&gt;
&lt;br /&gt;
Cheers,&lt;br /&gt;
&lt;br /&gt;
Lula&lt;img src="http://feeds.feedburner.com/~r/LulaChronicles/~4/T78baROk5tc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://lulachronicles.blogspot.com/feeds/8387157749463322216/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://lulachronicles.blogspot.com/2009/11/j2me-fixing-cannot-find-class.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1072233363145751245/posts/default/8387157749463322216?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1072233363145751245/posts/default/8387157749463322216?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LulaChronicles/~3/T78baROk5tc/j2me-fixing-cannot-find-class.html" title="J2ME: Fixing Cannot find class java/lang/NoClassDefFoundError at preverify" /><author><name>Ignacio Tomas Crespo</name><uri>https://plus.google.com/104916813805563750986</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-_GcemzLdrgQ/AAAAAAAAAAI/AAAAAAAAAAA/yTdhrLFskpw/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://lulachronicles.blogspot.com/2009/11/j2me-fixing-cannot-find-class.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEIGSHc6cCp7ImA9WxNbEUw.&quot;"><id>tag:blogger.com,1999:blog-1072233363145751245.post-1124059598116344088</id><published>2009-11-13T07:47:00.001-05:00</published><updated>2009-11-13T07:48:49.918-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-13T07:48:49.918-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="mobile" /><category scheme="http://www.blogger.com/atom/ns#" term="developer" /><title>All mobile developer sites</title><content type="html">Just for reference, I'm writing here all developer sites useful for mobile frikis:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Java Mobile&lt;/b&gt;&lt;br /&gt;
&lt;a href="http://developers.sun.com/mobility"&gt;http://developers.sun.com/mobility&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Sony&lt;/b&gt;&lt;br /&gt;
&lt;a href="http://developer.sonyericsson.com/"&gt;http://developer.sonyericsson.com&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Motorola&lt;/b&gt;&lt;br /&gt;
&lt;a href="http://developer.motorola.com/"&gt;http://developer.motorola.com&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Nokia&lt;/b&gt;&lt;br /&gt;
&lt;a href="http://www.nokia.com/developers"&gt;http://www.nokia.com/developers&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Samsung&lt;/b&gt;&lt;br /&gt;
&lt;a href="http://innovator.samsungmobile.com/"&gt;http://innovator.samsungmobile.com&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;IPhone&lt;/b&gt;&lt;br /&gt;
&lt;a href="http://developer.apple.com/iphone"&gt;http://developer.apple.com/iphone&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Android&lt;/b&gt;&lt;br /&gt;
&lt;a href="http://developer.android.com/"&gt;http://developer.android.com&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Blackberry&lt;/b&gt;&lt;br /&gt;
&lt;a href="http://na.blackberry.com/eng/developers"&gt;http://na.blackberry.com/eng/developers&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;BREW&lt;/b&gt;&lt;br /&gt;
&lt;a href="http://brew.qualcomm.com/brew/en/developer/overview.html"&gt;http://brew.qualcomm.com/brew/en/developer/overview.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;HTC&lt;/b&gt;&lt;br /&gt;
&lt;a href="http://developer.htc.com/"&gt;http://developer.htc.com&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Windows Mobile&lt;/b&gt;&lt;br /&gt;
&lt;a href="http://developer.windowsmobile.com/"&gt;http://developer.windowsmobile.com&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://msdn.microsoft.com/en-us/windowsmobile/default.aspx"&gt;http://msdn.microsoft.com/en-us/windowsmobile/default.aspx&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;OpenGL ES&lt;/b&gt;&lt;br /&gt;
&lt;a href="http://www.khronos.org/opengles"&gt;http://www.khronos.org/opengles&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Let's go mobile!&lt;br /&gt;
&lt;br /&gt;
Cheers,&lt;br /&gt;
&lt;br /&gt;
Lula&lt;img src="http://feeds.feedburner.com/~r/LulaChronicles/~4/RgmecncBRuw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://lulachronicles.blogspot.com/feeds/1124059598116344088/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://lulachronicles.blogspot.com/2009/11/all-mobile-developer-sites.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1072233363145751245/posts/default/1124059598116344088?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1072233363145751245/posts/default/1124059598116344088?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LulaChronicles/~3/RgmecncBRuw/all-mobile-developer-sites.html" title="All mobile developer sites" /><author><name>Ignacio Tomas Crespo</name><uri>https://plus.google.com/104916813805563750986</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-_GcemzLdrgQ/AAAAAAAAAAI/AAAAAAAAAAA/yTdhrLFskpw/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://lulachronicles.blogspot.com/2009/11/all-mobile-developer-sites.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE8MRH0ycCp7ImA9WxNUGEs.&quot;"><id>tag:blogger.com,1999:blog-1072233363145751245.post-7512167563389755435</id><published>2009-11-10T10:28:00.000-05:00</published><updated>2009-11-10T10:28:05.398-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-10T10:28:05.398-05:00</app:edited><title>Convert Android DEX to Java</title><content type="html">I'm playing with a great Android to Java converter named UnDX. You can find it at&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.illegalaccess.org/undx"&gt;http://www.illegalaccess.org/undx&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
it uses BCEL to convert the files. It's in beta, has some errors.&lt;br /&gt;
&lt;br /&gt;
So, I decided to create my own converter using ASM. The idea is simple:&lt;br /&gt;
&lt;br /&gt;
- Create a DEX reader extending ClassReader. Here call all the Visitor events to generate the java code.&lt;br /&gt;
- Use ASM to manipulate the java bytecode.&lt;br /&gt;
- Create a DEX ClassWriter. It must be exactly the same for java, but after generating all the bytearrays it must use dx command to create de DEX file.&lt;br /&gt;
&lt;br /&gt;
The idea is simple, I had some tests and it works! I'm generating the java code and I can manipulate it.&lt;br /&gt;
&lt;br /&gt;
I'll tell you later what happens with some big DEX files.&lt;br /&gt;
&lt;br /&gt;
Cheers,&lt;br /&gt;
&lt;br /&gt;
Lula&lt;img src="http://feeds.feedburner.com/~r/LulaChronicles/~4/l9lQ2-BJ8DQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://lulachronicles.blogspot.com/feeds/7512167563389755435/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://lulachronicles.blogspot.com/2009/11/convert-android-dex-to-java.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1072233363145751245/posts/default/7512167563389755435?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1072233363145751245/posts/default/7512167563389755435?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LulaChronicles/~3/l9lQ2-BJ8DQ/convert-android-dex-to-java.html" title="Convert Android DEX to Java" /><author><name>Ignacio Tomas Crespo</name><uri>https://plus.google.com/104916813805563750986</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-_GcemzLdrgQ/AAAAAAAAAAI/AAAAAAAAAAA/yTdhrLFskpw/s512-c/photo.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://lulachronicles.blogspot.com/2009/11/convert-android-dex-to-java.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUBRXcyfSp7ImA9WxBbEE0.&quot;"><id>tag:blogger.com,1999:blog-1072233363145751245.post-7636282859116260422</id><published>2009-11-05T00:04:00.001-05:00</published><updated>2010-03-07T19:30:54.995-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-07T19:30:54.995-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="bytecode" /><category scheme="http://www.blogger.com/atom/ns#" term="android" /><title>How to manipulate bytecode in android</title><content type="html">The following was tested successfully in Android SDK 1.1 and 2.0&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Step 1:&lt;/span&gt; Create an android project in eclipse&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Step 2: &lt;/span&gt;open the activity class and change the event onCreate with the following&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: 85%;"&gt;&lt;span style="font-family: verdana;"&gt; &lt;span style="color: #3333ff;"&gt;boolean flag = false;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #3333ff; font-family: verdana;"&gt;    &lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #3333ff; font-family: verdana;"&gt;    /** Called when the activity is first created. */&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #3333ff; font-family: verdana;"&gt;    @Override&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #3333ff; font-family: verdana;"&gt;    public void onCreate(Bundle savedInstanceState) {&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #3333ff; font-family: verdana;"&gt;   super.onCreate(savedInstanceState);&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #3333ff; font-family: verdana;"&gt;   TextView tv = new TextView(this);&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #3333ff; font-family: verdana;"&gt;   if(flag){&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #3333ff; font-family: verdana;"&gt;      tv.setText("CONGRATS! YOU CRACKED MY CODE! ;)");&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #3333ff; font-family: verdana;"&gt;   } else{&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #3333ff; font-family: verdana;"&gt;      tv.setText("NOT CRACKED YET... :("); &lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #3333ff; font-family: verdana;"&gt;   }&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #3333ff; font-family: verdana;"&gt;   setContentView(tv);&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #3333ff; font-family: verdana;"&gt;    }&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Check the new variable named flag, it is our main objective.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Step 3:&lt;/span&gt; run the project in the emulator, you will see a screen showing the text "NOT CRACKED YET... :("&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Step 4:&lt;/span&gt; go to the folder YOUR_PROJECT\bin and remove the signature from the APK file. If you don't know how to do it read my previous entry &lt;a href="http://lulachronicles.blogspot.com/2009/11/remove-signature-from-apk-file-and-sign.html"&gt;here&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Step 5&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;disassemble the file classes.dex. If you don't know how to do it read my previous entry &lt;a href="http://lulachronicles.blogspot.com/2009/11/disassemble-dex-files.html"&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Search the text "onCreate" to find the body of the onCreate method. You will find something like this:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: verdana; font-size: 78%;"&gt;Virtual methods   -&lt;br /&gt;
#0              : (in La/a/Start;)&lt;br /&gt;
name          : 'onCreate'&lt;br /&gt;
type          : '(Landroid/os/Bundle;)V'&lt;br /&gt;
access        : 0x0001 (PUBLIC)&lt;br /&gt;
code          -&lt;br /&gt;
registers     : 4&lt;br /&gt;
ins           : 2&lt;br /&gt;
outs          : 2&lt;br /&gt;
insns size    : 27 16-bit code units&lt;br /&gt;
0003c4:                                        |[0003c4] a.a.Start.onCreate:(Landroid/os/Bundle;)V&lt;br /&gt;
0003d4: 6f20 0900 3200                         |0000: invoke-super {v2, v3}, Landroid/app/Activity;.onCreate:(Landroid/os/Bundle;)V // method@0009&lt;br /&gt;
0003da: 2200 0b00                              |0003: new-instance v0, Landroid/widget/TextView; // class@000b&lt;br /&gt;
0003de: 7020 0a00 2000                         |0005: invoke-direct {v0, v2}, Landroid/widget/TextView;.&lt;init&gt;:(Landroid/content/Context;)V // method@000a&lt;br /&gt;
0003e4: 5521 0400                              |0008: iget-boolean v1, v2, La/a/Start;.flag:Z // field@0004&lt;br /&gt;
&lt;span style="color: red;"&gt;0003e8: &lt;span style="color: #663300;"&gt;3801 0b00&lt;/span&gt;                              |000a: if-eqz v1, &lt;span style="color: #3333ff;"&gt;0015 &lt;/span&gt;// +000b&lt;/span&gt;&lt;br /&gt;
0003ec: 1a01 0100                              |000c: const-string v1, "&lt;span style="color: #cc33cc;"&gt;CONGRATS! YOU CRACKED MY CODE! ;)&lt;/span&gt;" // string@0001&lt;br /&gt;
0003f0: 6e20 0b00 1000                         |000e: invoke-virtual {v0, v1}, Landroid/widget/TextView;.setText:(Ljava/lang/CharSequence;)V // method@000b&lt;br /&gt;
0003f6: 6e20 0700 0200                         |&lt;span style="color: #009900;"&gt;0011&lt;/span&gt;: invoke-virtual {v2, v0}, La/a/Start;.setContentView:(Landroid/view/View;)V // method@0007&lt;br /&gt;
0003fc: 0e00                                   |0014: return-void&lt;br /&gt;
0003fe: 1a01 1300                              |&lt;span style="color: #3333ff;"&gt;0015&lt;/span&gt;: const-string v1, "&lt;span style="color: #cc33cc;"&gt;NOT CRACKED YET... :(&lt;/span&gt;" // string@0013&lt;br /&gt;
000402: 6e20 0b00 1000                         |0017: invoke-virtual {v0, v1}, Landroid/widget/TextView;.setText:(Ljava/lang/CharSequence;)V // method@000b&lt;br /&gt;
000408: 28f7                                   |001a: &lt;span style="color: #009900;"&gt;goto 0011 &lt;/span&gt;// -0009&lt;br /&gt;
catches       : (none)&lt;br /&gt;
positions     :&lt;br /&gt;
0x0000 line=15&lt;br /&gt;
0x0003 line=16&lt;br /&gt;
0x0008 line=17&lt;br /&gt;
0x000c line=18&lt;br /&gt;
0x0011 line=22&lt;br /&gt;
0x0014 line=23&lt;br /&gt;
0x0015 line=20&lt;br /&gt;
locals        :&lt;br /&gt;
0x0008 - 0x001b reg=0 tv Landroid/widget/TextView;&lt;br /&gt;
0x0000 - 0x001b reg=2 this La/a/Start;&lt;br /&gt;
0x0000 - 0x001b reg=3 savedInstanceState Landroid/os/Bundle; &lt;/init&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
You need to understand how bytecode works. If you don't have any experience with bytecode manipulation please stop here.&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;I marked in red the line we want to change, because it is a jump that involves the lines of code showing texts. We must invert the jump so the screen will display another text.&lt;/li&gt;
&lt;li&gt;edit in hexadecimal the file classes.dex and go to the offset 03E8, you will se the hex numbers 38 01 0b 00&lt;br /&gt;
Why? Check the following line:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: verdana; font-size: 78%;"&gt;&lt;span style="color: red;"&gt;0003e8: &lt;span style="color: #663300;"&gt;3801 0b00&lt;/span&gt;                              |000a: if-eqz v1, &lt;span style="color: #3333ff;"&gt;0015 &lt;/span&gt;// +000b&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
the first number is the offset in the classes.dex file, the following numbers are the opcode and parameters.&lt;br /&gt;
If you check the opcode numbers &lt;a href="http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html"&gt;HERE &lt;/a&gt;you can see the value 0x38 is for the opcode if-eqz, we must change this opcode to if-nez to invert the jump. Checking the opcodes list we see the value for if-nez is 0x39, so change the 38 value at offset 0x3E8 by 39&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Now you must fix the checksum or you will have errors when installing the app. You can calculate the checksum with the following code:&lt;/li&gt;
&lt;/ul&gt;&lt;span style="color: #3333ff; font-family: verdana; font-size: 78%;"&gt;public class FixDEXChecksum(){&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
* Calculates the checksum for the &lt;code&gt;.dex&lt;/code&gt; file in the&lt;br /&gt;
* given array, and modify the array to contain it.&lt;br /&gt;
*&lt;br /&gt;
* @param bytes non-null; the bytes of the file&lt;br /&gt;
*/&lt;br /&gt;
private static void calcChecksum(byte[] bytes) {&lt;br /&gt;
Adler32 a32 = new Adler32();&lt;br /&gt;
&lt;br /&gt;
a32.update(bytes, 12, bytes.length - 12);&lt;br /&gt;
&lt;br /&gt;
int sum = (int) a32.getValue();&lt;br /&gt;
&lt;br /&gt;
bytes[8]  = (byte) sum;&lt;br /&gt;
bytes[9]  = (byte) (sum &amp;gt;&amp;gt; 8);&lt;br /&gt;
bytes[10] = (byte) (sum &amp;gt;&amp;gt; 16);&lt;br /&gt;
bytes[11] = (byte) (sum &amp;gt;&amp;gt; 24);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public static void main(String[] args) {&lt;br /&gt;
try {&lt;br /&gt;
File file = new File(args[0]);&lt;br /&gt;
FileInputStream fis = new FileInputStream(file);&lt;br /&gt;
byte[] data = new byte[fis.available()];&lt;br /&gt;
System.out.println("Reading DEX file");&lt;br /&gt;
fis.read(data);&lt;br /&gt;
System.out.println("Calculating new checksum");&lt;br /&gt;
calcChecksum(data);&lt;br /&gt;
fis.close();&lt;br /&gt;
System.out.println("Making backup");&lt;br /&gt;
file.renameTo(new File(args[0]+".bak"));&lt;br /&gt;
System.out.println("Writing new DEX file with checksum "+ Integer.toHexString(data[8]) +" "+ Integer.toHexString(data[9]) +" "+ Integer.toHexString(data[10]) +" "+ Integer.toHexString(data[11]));&lt;br /&gt;
FileOutputStream fos = new FileOutputStream(new File(args[0]));&lt;br /&gt;
fos.write(data);&lt;br /&gt;
fos.close();&lt;br /&gt;
} catch (Exception e) {&lt;br /&gt;
// TODO Auto-generated catch block&lt;br /&gt;
e.printStackTrace();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #3333ff; font-family: verdana; font-size: 78%;"&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Put the new classes.dex inside your unsigned APK&lt;/li&gt;
&lt;li&gt;Sign the APK file again.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Run the program and voila! The text displayed is "CONGRATS! YOU CRACKED MY CODE! ;)"&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
I know it is a very small program and we know how the code works, but this is useful to see what can be done with bytecode manipulation.&lt;br /&gt;
&lt;br /&gt;
Removing bytecode is not so simple, but you can try replacing the bytecode values in the lines you want to remove by zeros 00, it is the NOP bytecode.&lt;br /&gt;
&lt;br /&gt;
Injecting bytecode is another story, lots of offsets must be modified in the classes.dex file. I will tell you later.&lt;br /&gt;
&lt;br /&gt;
And I will test this in SDK 1.5, 1.6, but another day, i'm tired now :)&lt;br /&gt;
&lt;br /&gt;
Enjoy!&lt;img src="http://feeds.feedburner.com/~r/LulaChronicles/~4/IBCpuHyhAvo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://lulachronicles.blogspot.com/feeds/7636282859116260422/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://lulachronicles.blogspot.com/2009/11/how-to-manipulate-bytecode-in-android.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1072233363145751245/posts/default/7636282859116260422?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1072233363145751245/posts/default/7636282859116260422?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LulaChronicles/~3/IBCpuHyhAvo/how-to-manipulate-bytecode-in-android.html" title="How to manipulate bytecode in android" /><author><name>Ignacio Tomas Crespo</name><uri>https://plus.google.com/104916813805563750986</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-_GcemzLdrgQ/AAAAAAAAAAI/AAAAAAAAAAA/yTdhrLFskpw/s512-c/photo.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://lulachronicles.blogspot.com/2009/11/how-to-manipulate-bytecode-in-android.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUNRH85fSp7ImA9WxNUFU8.&quot;"><id>tag:blogger.com,1999:blog-1072233363145751245.post-7199177732786125497</id><published>2009-11-04T23:42:00.000-05:00</published><updated>2009-11-06T10:11:35.125-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-06T10:11:35.125-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="bytecode" /><category scheme="http://www.blogger.com/atom/ns#" term="android" /><title>How to check the signature in APK files or JAR files</title><content type="html">You can use the jarsigner tool from JDK.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;JDKFOLDER\bin\jarsigner.exe -verify -verbose -certs myAndroidProgram.apk&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;JDKFOLDER\bin\jarsigner.exe -verify -verbose -certs myJavaProgram.jar&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
the output will be the list of files with a detail of the signature, as following:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #3333ff; font-family: courier new; font-size: 85%;"&gt;sm      3366 Thu Nov 05 00:57:58 ART 2009 res/drawable/icon.png&lt;br /&gt;
&lt;br /&gt;
X.509, CN=Android Debug, O=Android, C=US&lt;br /&gt;
[certificate is valid from 05/11/09 00:01 to 05/11/10 00:01]&lt;br /&gt;
&lt;br /&gt;
sm       640 Thu Nov 05 00:57:58 ART 2009 res/layout/main.xml&lt;br /&gt;
&lt;br /&gt;
X.509, CN=Android Debug, O=Android, C=US&lt;br /&gt;
[certificate is valid from 05/11/09 00:01 to 05/11/10 00:01]&lt;br /&gt;
&lt;br /&gt;
sm      1248 Thu Nov 05 00:57:58 ART 2009 AndroidManifest.xml&lt;br /&gt;
&lt;br /&gt;
X.509, CN=Android Debug, O=Android, C=US&lt;br /&gt;
[certificate is valid from 05/11/09 00:01 to 05/11/10 00:01]&lt;br /&gt;
&lt;br /&gt;
sm      1012 Thu Nov 05 00:57:58 ART 2009 resources.arsc&lt;br /&gt;
&lt;br /&gt;
X.509, CN=Android Debug, O=Android, C=US&lt;br /&gt;
[certificate is valid from 05/11/09 00:01 to 05/11/10 00:01]&lt;br /&gt;
&lt;br /&gt;
sm      1984 Thu Nov 05 00:57:58 ART 2009 classes.dex&lt;br /&gt;
&lt;br /&gt;
X.509, CN=Android Debug, O=Android, C=US&lt;br /&gt;
[certificate is valid from 05/11/09 00:01 to 05/11/10 00:01]&lt;br /&gt;
&lt;br /&gt;
401 Thu Nov 05 00:57:58 ART 2009 META-INF/MANIFEST.MF&lt;br /&gt;
454 Thu Nov 05 00:57:58 ART 2009 META-INF/CERT.SF&lt;br /&gt;
771 Thu Nov 05 00:57:58 ART 2009 META-INF/CERT.RSA&lt;br /&gt;
&lt;br /&gt;
s = signature was verified&lt;br /&gt;
m = entry is listed in manifest&lt;br /&gt;
k = at least one certificate was found in keystore&lt;br /&gt;
i = at least one certificate was found in identity scope&lt;br /&gt;
&lt;br /&gt;
jar verified.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Cheers&lt;img src="http://feeds.feedburner.com/~r/LulaChronicles/~4/kBpTGdW7mZY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://lulachronicles.blogspot.com/feeds/7199177732786125497/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://lulachronicles.blogspot.com/2009/11/how-to-check-signature-in-apk-files-or.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1072233363145751245/posts/default/7199177732786125497?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1072233363145751245/posts/default/7199177732786125497?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LulaChronicles/~3/kBpTGdW7mZY/how-to-check-signature-in-apk-files-or.html" title="How to check the signature in APK files or JAR files" /><author><name>Ignacio Tomas Crespo</name><uri>https://plus.google.com/104916813805563750986</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-_GcemzLdrgQ/AAAAAAAAAAI/AAAAAAAAAAA/yTdhrLFskpw/s512-c/photo.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://lulachronicles.blogspot.com/2009/11/how-to-check-signature-in-apk-files-or.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUCQHw9eip7ImA9WxNUFU8.&quot;"><id>tag:blogger.com,1999:blog-1072233363145751245.post-2774837767024244099</id><published>2009-11-04T23:32:00.000-05:00</published><updated>2009-11-06T10:11:01.262-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-06T10:11:01.262-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="bytecode" /><category scheme="http://www.blogger.com/atom/ns#" term="android" /><title>Remove signature from APK file and sign it again</title><content type="html">The APK file is just a zip file with another extension. To remove the signature just unzip it, remove the folder META-INF and zip it again.&lt;br /&gt;
&lt;br /&gt;
but how to sign it again? You can use your own signature or the debug signature used by Android SDK named debug.keystore&lt;br /&gt;
&lt;br /&gt;
You can copy the debug signature from &lt;span style="color: #3333ff;"&gt;C:\Documents and Settings\\Local Settings\Application Data\Android\&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
The data of the signature is the following:&lt;br /&gt;
&lt;br /&gt;
* Keystore name: "debug.keystore"&lt;br /&gt;
* Keystore password: "android"&lt;br /&gt;
* Key alias: "androiddebugkey"&lt;br /&gt;
* Key password: "android"&lt;br /&gt;
* CN: "CN=Android Debug,O=Android,C=US"&lt;br /&gt;
&lt;br /&gt;
for more details go to &lt;a href="http://developer.android.com/guide/publishing/app-signing.html"&gt;http://developer.android.com/guide/publishing/app-signing.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Now, how to sign the apk again? Use the jarsigner.exe tool, this tool comes with the JDK.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;JDKFOLDER\bin\jarsigner.exe -verbose -storepass android -keystore debug.keystore &lt;span style="color: #3333ff;"&gt;myprogram.apk&lt;/span&gt; androiddebugkey&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
replace &lt;span style="color: #3333ff;"&gt;myprogram.apk&lt;/span&gt; with your own unsigned apk.&lt;br /&gt;
&lt;br /&gt;
Is this useful? Maybe, if you want to modify the build with reverse engineering or something similar, use your imagination.&lt;br /&gt;
&lt;br /&gt;
voila!&lt;img src="http://feeds.feedburner.com/~r/LulaChronicles/~4/UsZkshYmO9c" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://lulachronicles.blogspot.com/feeds/2774837767024244099/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://lulachronicles.blogspot.com/2009/11/remove-signature-from-apk-file-and-sign.html#comment-form" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1072233363145751245/posts/default/2774837767024244099?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1072233363145751245/posts/default/2774837767024244099?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LulaChronicles/~3/UsZkshYmO9c/remove-signature-from-apk-file-and-sign.html" title="Remove signature from APK file and sign it again" /><author><name>Ignacio Tomas Crespo</name><uri>https://plus.google.com/104916813805563750986</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-_GcemzLdrgQ/AAAAAAAAAAI/AAAAAAAAAAA/yTdhrLFskpw/s512-c/photo.jpg" /></author><thr:total>5</thr:total><feedburner:origLink>http://lulachronicles.blogspot.com/2009/11/remove-signature-from-apk-file-and-sign.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUESH44cCp7ImA9WxNUFU8.&quot;"><id>tag:blogger.com,1999:blog-1072233363145751245.post-5056007790196239073</id><published>2009-11-04T23:29:00.000-05:00</published><updated>2009-11-06T10:10:09.038-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-06T10:10:09.038-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="bytecode" /><category scheme="http://www.blogger.com/atom/ns#" term="android" /><title>Disassemble dex files</title><content type="html">Android SDK comes with the tool dexdump.exe&lt;br /&gt;
&lt;br /&gt;
To disassemble a dex file just use the following command:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;dexdump.exe -d -f -h classes.dex &amp;gt;dexdump.txt&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
The output will be stored in the file dexdump.txt, and the format is dalvik bytecode, not java bytecode.&lt;br /&gt;
&lt;br /&gt;
I will investigate how to modify this file.&lt;img src="http://feeds.feedburner.com/~r/LulaChronicles/~4/iZZfKf61uD4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://lulachronicles.blogspot.com/feeds/5056007790196239073/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://lulachronicles.blogspot.com/2009/11/disassemble-dex-files.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1072233363145751245/posts/default/5056007790196239073?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1072233363145751245/posts/default/5056007790196239073?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LulaChronicles/~3/iZZfKf61uD4/disassemble-dex-files.html" title="Disassemble dex files" /><author><name>Ignacio Tomas Crespo</name><uri>https://plus.google.com/104916813805563750986</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-_GcemzLdrgQ/AAAAAAAAAAI/AAAAAAAAAAA/yTdhrLFskpw/s512-c/photo.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://lulachronicles.blogspot.com/2009/11/disassemble-dex-files.html</feedburner:origLink></entry></feed>
