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

<channel>
	<title>Digipom</title>
	<atom:link href="https://www.digipom.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.digipom.com</link>
	<description>Adventures in Mobile App Development</description>
	<lastBuildDate>Sat, 30 May 2020 02:02:52 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.6.5</generator>
	<item>
		<title>Easy Voice Recorder Pro is now part of Google Play Pass</title>
		<link>https://www.digipom.com/easy-voice-recorder-pro-is-now-part-of-google-play-pass/</link>
					<comments>https://www.digipom.com/easy-voice-recorder-pro-is-now-part-of-google-play-pass/#respond</comments>
		
		<dc:creator><![CDATA[Kevin]]></dc:creator>
		<pubDate>Fri, 27 Sep 2019 01:54:00 +0000</pubDate>
				<category><![CDATA[Easy Voice Recorder]]></category>
		<category><![CDATA[Google Play Pass]]></category>
		<guid isPermaLink="false">http://www.digipom.com/?p=628</guid>

					<description><![CDATA[Easy Voice Recorder Pro is now available with Google Play Pass! Unlock all of the pro features with your subscription. Check it out! Copyright &#169; 2012 This feed is for personal, non-commercial use only. The use of this feed on other websites breaches copyright. If this content is not in your news reader, it makes [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><a href="https://play.google.com/store/apps/details?id=com.digipom.easyvoicerecorder.pro">Easy Voice Recorder Pro</a> is now available with <a href="https://play.google.com/store/pass?pcampaignid=MKT-AC-na-us-0000000-co-pr-gm-playpas s-Aug3019-Text-US_Developer">Google Play Pass</a>! Unlock all of the pro features with your subscription. Check it out! </p>



<figure class="wp-block-image size-large"><a href="https://play.google.com/store/pass?pcampaignid=MKT-AC-na-us-0000000-co-pr-gm-playpas s-Aug3019-Text-US_Developer"><img decoding="async" width="1024" height="858" src="http://www.digipom.com/wordpress/wp-content/uploads/2020/05/facebook_3x-1024x858.png" alt="" class="wp-image-629" srcset="https://www.digipom.com/wordpress/wp-content/uploads/2020/05/facebook_3x-1024x858.png 1024w, https://www.digipom.com/wordpress/wp-content/uploads/2020/05/facebook_3x-300x251.png 300w, https://www.digipom.com/wordpress/wp-content/uploads/2020/05/facebook_3x-768x644.png 768w, https://www.digipom.com/wordpress/wp-content/uploads/2020/05/facebook_3x-1536x1288.png 1536w, https://www.digipom.com/wordpress/wp-content/uploads/2020/05/facebook_3x-2048x1717.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>
<hr /><small>Copyright &copy; 2012<br /> This feed is for personal, non-commercial use only. <br /> The use of this feed on other websites breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint:<br /> 57093891627bcf5753cb6dde17dba8f4)</small>]]></content:encoded>
					
					<wfw:commentRss>https://www.digipom.com/easy-voice-recorder-pro-is-now-part-of-google-play-pass/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Easy Voice Recorder is Editors&#8217; Choice over at Google Play</title>
		<link>https://www.digipom.com/easy-voice-recorder-is-editors-choice-over-at-google-play/</link>
					<comments>https://www.digipom.com/easy-voice-recorder-is-editors-choice-over-at-google-play/#respond</comments>
		
		<dc:creator><![CDATA[Kevin]]></dc:creator>
		<pubDate>Mon, 04 Dec 2017 23:15:08 +0000</pubDate>
				<category><![CDATA[Easy Voice Recorder]]></category>
		<category><![CDATA[Editors' Choice]]></category>
		<category><![CDATA[Google Play]]></category>
		<guid isPermaLink="false">http://www.digipom.com/?p=515</guid>

					<description><![CDATA[I&#8217;m very happy to announce that Easy Voice Recorder has been featured with the prestigious Editors&#8217; Choice badge on Google Play! To give some background on the app, I began working on the app as a solo developer at the beginning of 2012, and have been working on it ever since. The app has gone [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><a href="http://www.digipom.com/wordpress/wp-content/uploads/2017/12/editorschoice-1.png"><img loading="lazy" decoding="async" class="size-medium wp-image-520 alignright" src="http://www.digipom.com/wordpress/wp-content/uploads/2017/12/editorschoice-1-267x300.png" alt="Easy Voice Recorder -- Editors' Choice at Google Play" width="267" height="300" srcset="https://www.digipom.com/wordpress/wp-content/uploads/2017/12/editorschoice-1-267x300.png 267w, https://www.digipom.com/wordpress/wp-content/uploads/2017/12/editorschoice-1-768x863.png 768w, https://www.digipom.com/wordpress/wp-content/uploads/2017/12/editorschoice-1.png 772w" sizes="(max-width: 267px) 100vw, 267px" /></a>I&#8217;m very happy to announce that <a href="https://play.google.com/store/apps/details?id=com.coffeebeanventures.easyvoicerecorder">Easy Voice Recorder</a> has been featured with the prestigious Editors&#8217; Choice badge on Google Play!</p>
<p>To give some background on the app, I began working on the app as a solo developer at the beginning of 2012, and have been working on it ever since. The app has gone through three major redesigns, first to the Holo design theme back around 2013, and again to the modern Material design at the beginning of 2016.</p>
<p>When I started working on the app back in 2012, I was looking for a voice recorder that could capture my grandmother&#8217;s stories for posterity, and the apps available at the time all left something to be desired. I saw that there was a place for a voice recorder with a focus on quality and ease of use. I strived to create an app where the tension between simplicity and power would be balanced, where anyone could just install and get going in seconds, while keeping the customizability that power users demand. That is still my goal today.</p>
<p>While I have always developed the app as an independent developer, I have definitely not been alone on this journey. I have much gratitude to everyone who has been part of the journey with me, including my <a title="Rodrigo Maia" href="https://www.linkedin.com/in/rodmaia/">talented UI designer</a>, a great QA and customer support team, and also the many users who have pitched in with feedback and translations, not to mention my own family for being supportive from the beginning. I am also very honoured and grateful to Google for validating my efforts, and for building a platform giving small developers like myself the opportunity to work for ourselves and reach a worldwide audience.</p>
<p>Easy Voice Recorder can be downloaded directly from Google Play by clicking on the badge below:</p>
<p><a href="https://play.google.com/store/apps/details?id=com.coffeebeanventures.easyvoicerecorder"><br />
<img decoding="async" src="https://developer.android.com/images/brand/en_generic_rgb_wo_60.png" alt="Get it on Google Play"><br />
</a></p>
<p>Any questions or comments? Please don&#8217;t hesitate to let me know! I can be reached directly via Help &#8211; Contact Us inside the app, and I&#8217;m always happy to hear from you.</p>
<hr />
<p><small>Copyright &copy; 2012<br /> This feed is for personal, non-commercial use only. <br /> The use of this feed on other websites breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint:<br /> 57093891627bcf5753cb6dde17dba8f4)</small></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.digipom.com/easy-voice-recorder-is-editors-choice-over-at-google-play/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Easy Voice Recorder for iOS, and Recent Reviews</title>
		<link>https://www.digipom.com/easy-voice-recorder-for-ios-and-recent-reviews/</link>
					<comments>https://www.digipom.com/easy-voice-recorder-for-ios-and-recent-reviews/#respond</comments>
		
		<dc:creator><![CDATA[Kevin]]></dc:creator>
		<pubDate>Wed, 15 Nov 2017 17:14:08 +0000</pubDate>
				<category><![CDATA[Easy Voice Recorder]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[Android apps for me]]></category>
		<category><![CDATA[Digital Citizen]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[MIUI]]></category>
		<guid isPermaLink="false">http://www.digipom.com/?p=510</guid>

					<description><![CDATA[Easy Voice Recorder is now available for iOS devices! It can be downloaded from the App Store. If you have any questions or comments about the app, please don&#8217;t hesitate to let us know using the &#8220;Feedback&#8221; option from the app&#8217;s settings. I&#8217;ve also recently noticed that Easy Voice Recorder has been mentioned in the [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Easy Voice Recorder is now available for iOS devices! It can be downloaded from the <a href="https://itunes.apple.com/us/app/easy-voice-recorder/id1222784166?mt=8">App Store</a>. If you have any questions or comments about the app, please don&#8217;t hesitate to let us know using the &#8220;Feedback&#8221; option from the app&#8217;s settings.</p>
<p>I&#8217;ve also recently noticed that Easy Voice Recorder has been mentioned in the following reviews &#8212; thanks!</p>
<p><a href="https://androidappsforme.com/easy-voice-recorder-app-review/">Easy Voice Recorder app review</a><br />
<a href="https://www.digitalcitizen.life/best-voice-recording-apps-android">The 5 best voice recording apps for Android smartphones and tablets</a><br />
<a href="http://en.miui.com/thread-581386-1-1.html">[App Review] Review Of Easy Voice Recorder Pro: The Ultimate Recorder</a></p>
<hr />
<p><small>Copyright &copy; 2012<br /> This feed is for personal, non-commercial use only. <br /> The use of this feed on other websites breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint:<br /> 57093891627bcf5753cb6dde17dba8f4)</small></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.digipom.com/easy-voice-recorder-for-ios-and-recent-reviews/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>The Great Thanksgivi​ng Charity Giveaway</title>
		<link>https://www.digipom.com/the-great-thanksgivi%e2%80%8bng-charity-giveaway/</link>
					<comments>https://www.digipom.com/the-great-thanksgivi%e2%80%8bng-charity-giveaway/#respond</comments>
		
		<dc:creator><![CDATA[Kevin]]></dc:creator>
		<pubDate>Wed, 05 Nov 2014 14:08:40 +0000</pubDate>
				<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[charity giveaway]]></category>
		<guid isPermaLink="false">http://www.digipom.com/?p=426</guid>

					<description><![CDATA[Welcome to The Great Thanksgiving Charity Giveaway! We&#8217;re happy to partner up with Budgeting in the Fun Stuff and several other bloggers to run a November giveaway, with $125 going to one big winner, and at least another $125 going to charity! To enter and learn all the details, simply head over to Budgeting in [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Welcome to The Great Thanksgiving Charity Giveaway! We&#8217;re happy to partner up with Budgeting in the Fun Stuff and several other bloggers to run a November giveaway, with $125 going to one big winner, and at least another $125 going to charity! To enter and learn all the details, simply head over to <a href="http://www.budgetinginthefunstuff.com/great-charity-giveaway-win-125/">Budgeting in the Fun Stuff</a> and submit your entries before the contest closes at the end of Thanksgiving Day. Good luck!</p>
<hr />
<p><small>Copyright &copy; 2012<br /> This feed is for personal, non-commercial use only. <br /> The use of this feed on other websites breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint:<br /> 57093891627bcf5753cb6dde17dba8f4)</small></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.digipom.com/the-great-thanksgivi%e2%80%8bng-charity-giveaway/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Recent Reviews and Features</title>
		<link>https://www.digipom.com/recent-reviews-and-features/</link>
					<comments>https://www.digipom.com/recent-reviews-and-features/#respond</comments>
		
		<dc:creator><![CDATA[Kevin]]></dc:creator>
		<pubDate>Mon, 11 Nov 2013 17:48:03 +0000</pubDate>
				<category><![CDATA[Easy Voice Recorder]]></category>
		<category><![CDATA[Night Filter]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[Les Applications Android]]></category>
		<category><![CDATA[mobiFlip]]></category>
		<category><![CDATA[mobile ASCII]]></category>
		<guid isPermaLink="false">http://www.digipom.com/?p=194</guid>

					<description><![CDATA[Night Filter has been reviewed by mobiFlip, a popular German mobile news and review site: Night Filter: Dunkler Bildschirm für Android Easy Voice Recorder has also been featured by Les Applications Android and mobile ASCII: Les 30 meilleures applications Android de 2012 シンプルなボイスレコーダーで 会議の議事録を録音！ Copyright &#169; 2012 This feed is for personal, non-commercial use only. [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><a href="http://www.digipom.com/portfolio-items/night-filter/">Night Filter</a> has been reviewed by mobiFlip, a popular German mobile news and review site: <a href="http://www.mobiflip.de/night-filter-dunkler-bildschirm-fuer-android/">Night Filter: Dunkler Bildschirm für Android</a></p>
<p><a href="http://www.digipom.com/portfolio-items/easy-voice-recorder/">Easy Voice Recorder</a> has also been featured by Les Applications Android and mobile ASCII:</p>
<ul>
<li><a href="Les 30 meilleures applications Android de 2012">Les 30 meilleures applications Android de 2012</a></li>
<li><a href="http://mobileascii.jp/elem/000/000/074/74928/">シンプルなボイスレコーダーで 会議の議事録を録音！</a></li>
</ul>
<hr />
<p><small>Copyright &copy; 2012<br /> This feed is for personal, non-commercial use only. <br /> The use of this feed on other websites breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint:<br /> 57093891627bcf5753cb6dde17dba8f4)</small></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.digipom.com/recent-reviews-and-features/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Important Notice to Our RSS Readers: Your Subscription May End</title>
		<link>https://www.digipom.com/important-notice-to-our-rss-readers-your-subscription-may-end/</link>
					<comments>https://www.digipom.com/important-notice-to-our-rss-readers-your-subscription-may-end/#respond</comments>
		
		<dc:creator><![CDATA[Kevin]]></dc:creator>
		<pubDate>Fri, 21 Jun 2013 14:52:45 +0000</pubDate>
				<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[Google Reader]]></category>
		<category><![CDATA[RSS]]></category>
		<guid isPermaLink="false">http://www.digipom.com/?p=316</guid>

					<description><![CDATA[Google Reader is shutting down on July 1st. If you haven&#8217;t yet migrated to another reader, then you won&#8217;t be able to receive new updates from our site after that date. Here are a couple of ways that you can stay subscribed: Head over to http://feeds.feedburner.com/Digipom, and choose one of the options in the box that [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Google Reader is shutting down on July 1st. If you haven&#8217;t yet migrated to another reader, then you won&#8217;t be able to receive new updates from our site after that date.</p>
<p>Here are a couple of ways that you can stay subscribed:</p>
<ol>
<li>Head over to <a href="http://feeds.feedburner.com/Digipom">http://feeds.feedburner.com/Digipom</a>, and choose one of the options in the box that says &#8220;Subscribe Now!&#8221;</li>
<li>Subscribe via email by selecting <a href="http://feedburner.google.com/fb/a/mailverify?uri=Digipom" target="popupwindow">Get Digipom delivered by email</a>.</li>
</ol>
<p>We hope that you continue your subscription with us, and thank you for your continued support, as always. <img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<hr />
<p><small>Copyright &copy; 2012<br /> This feed is for personal, non-commercial use only. <br /> The use of this feed on other websites breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint:<br /> 57093891627bcf5753cb6dde17dba8f4)</small></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.digipom.com/important-notice-to-our-rss-readers-your-subscription-may-end/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Using Android Library Projects to Configure an App for Different Markets</title>
		<link>https://www.digipom.com/using-android-library-projects-to-configure-an-app-for-different-markets/</link>
					<comments>https://www.digipom.com/using-android-library-projects-to-configure-an-app-for-different-markets/#respond</comments>
		
		<dc:creator><![CDATA[Kevin]]></dc:creator>
		<pubDate>Tue, 22 Jan 2013 23:17:04 +0000</pubDate>
				<category><![CDATA[Android Development]]></category>
		<category><![CDATA[ADT]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[library projects]]></category>
		<category><![CDATA[Proguard]]></category>
		<guid isPermaLink="false">http://www.digipom.com/?p=200</guid>

					<description><![CDATA[One of the great benefits of developing for Android is that you have a lot of markets to select from, and you can distribute on all of them. The downside is that this can become cumbersome to manage, with changes that have to be made to the app for each market in areas such as [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>One of the great benefits of developing for Android is that you have a lot of markets to select from, and you can distribute on all of them. The downside is that this can become cumbersome to manage, with changes that have to be made to the app for each market in areas such as strings and URLs, and differences in how certain aspects of the app should work, like advertising and billing.</p>
<h4>The first strategy: using Git branching</h4>
<p>We have used Git branches to help manage this in the past. With Git, you can easily and quickly create subbranches, so to separate by free and paid, for example, you can have a &#8220;free&#8221; branch and a &#8220;paid&#8221; branch, and then you can further subdivide these by market.</p>
<p>While Git is great at easily configuring a build for a different market, it can become difficult to keep track of all of the changes and to merge changes from one branch to another. Here are some of the issues that we&#8217;ve come across:</p>
<ul>
<li>Changing the package name means that all of your references to the R class need to be updated (I believe this can be worked around by calling aapt with &#8211;rename-manifest-package if you build with Ant or Maven, but unfortunately the Android Developer Tools (ADT) don&#8217;t support this workaround at the moment).</li>
<li>Anything could possibly be changed between different branches, and it can be difficult to quickly get a &#8220;big picture&#8221; on the actual differences in configuration between branches.</li>
<li>Propagating changes and dealing with merge conflicts can become a time-consuming chore.</li>
</ul>
<h4>The second strategy: using Android library projects</h4>
<p>Instead of using Git branches, this can also be done by using Android&#8217;s library projects. The way this works is that most of the application goes into a core library project, and then there are separate projects for each configuration. This can follow the Git branching model, with a base library project for &#8220;free&#8221; and for &#8220;pro&#8221;, and different application projects for each market.</p>
<p>With this model, it becomes very easy to make changes to the core and have these changes reflected in each application project, as well as easily see what each configuration contains. The trick to getting this to work well is to use the new <em>manifestmerger.enabled</em> property; by adding <em>manifestmerger.enabled=true </em>to each project in the project.properties, the ADT will automatically merge most attributes from a parent project down into a child project.</p>
<p>There are some drawbacks to this model:</p>
<ul>
<li>Not all attributes get copied, so there&#8217;s still some copy/pasting of attributes between manifests.</li>
<li>The build takes longer, and sometimes the build inexplicably fails. This can sometimes be fixed by closing and re-opening the project, or cleaning the projects and building again.</li>
<li>If you have more than one layer of projects, then automatic running &amp; debugging may no longer work.</li>
</ul>
<p>In addition, because the customization with library projects is less ad-hoc than when using Git branches, we had to make the following changes to our code:</p>
<ul>
<li>We used polymorphism and factory methods instead of if statements or directly changing the code between branches; this required quite a few changes to structure things to make this possible, but the code is better for it.</li>
<li>The R class constants are no longer final, so switches were replaced with if-else statements.</li>
</ul>
<p>Proguard seems to work fine with several layers of library projects. We had issues with the &#8220;new&#8221; style of using proguard-project.txt, so we reverted to our old Proguard setup for each project.</p>
<p>All in all, library projects have some drawbacks, but they can also be a clean approach to build and market customization, and they should continue to improve over time.</p>
<hr />
<p><small>Copyright &copy; 2012<br /> This feed is for personal, non-commercial use only. <br /> The use of this feed on other websites breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint:<br /> 57093891627bcf5753cb6dde17dba8f4)</small></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.digipom.com/using-android-library-projects-to-configure-an-app-for-different-markets/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>A Couple of Youtube Reviews</title>
		<link>https://www.digipom.com/a-couple-of-youtube-reviews/</link>
					<comments>https://www.digipom.com/a-couple-of-youtube-reviews/#comments</comments>
		
		<dc:creator><![CDATA[Kevin]]></dc:creator>
		<pubDate>Sun, 04 Nov 2012 17:51:57 +0000</pubDate>
				<category><![CDATA[Easy Voice Recorder]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[videos]]></category>
		<guid isPermaLink="false">http://www.digipom.com/?p=156</guid>

					<description><![CDATA[I found a couple YouTube reviews about Easy Voice Recorder &#8212; thanks to the reviewers for creating these videos! Copyright &#169; 2012 This feed is for personal, non-commercial use only. The use of this feed on other websites breaches copyright. If this content is not in your news reader, it makes the page you are [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>I found a couple YouTube reviews about Easy Voice Recorder &#8212; thanks to the reviewers for creating these videos!</p>
<div style="text-align:center;">
<iframe loading="lazy" width="480" height="360" src="http://www.youtube.com/embed/tuBkBB-SqCs" frameborder="0" allowfullscreen></iframe></p>
<p><iframe loading="lazy" width="480" height="360" src="http://www.youtube.com/embed/uH7AFpChzMg" frameborder="0" allowfullscreen></iframe>
</div>
<hr />
<p><small>Copyright &copy; 2012<br /> This feed is for personal, non-commercial use only. <br /> The use of this feed on other websites breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint:<br /> 57093891627bcf5753cb6dde17dba8f4)</small></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.digipom.com/a-couple-of-youtube-reviews/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Will and Ravi Use Easy Voice Recorder on the Way to Saturday</title>
		<link>https://www.digipom.com/will-and-ravi-use-easy-voice-recorder-on-the-way-to-saturday/</link>
					<comments>https://www.digipom.com/will-and-ravi-use-easy-voice-recorder-on-the-way-to-saturday/#respond</comments>
		
		<dc:creator><![CDATA[Kevin]]></dc:creator>
		<pubDate>Mon, 29 Oct 2012 23:15:28 +0000</pubDate>
				<category><![CDATA[Easy Voice Recorder]]></category>
		<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[Way to Saturday]]></category>
		<guid isPermaLink="false">http://www.digipom.com/?p=144</guid>

					<description><![CDATA[I thought this was cool. 🙂 Thanks to AT&#038;T for doing this skit! Copyright &#169; 2012 This feed is for personal, non-commercial use only. The use of this feed on other websites breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>I thought this was cool. <img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Thanks to AT&#038;T for doing this skit!</p>
<p><iframe loading="lazy" width="560" height="315" src="http://www.youtube.com/embed/uZrIRQWzE10" frameborder="0" allowfullscreen></iframe></p>
<hr />
<p><small>Copyright &copy; 2012<br /> This feed is for personal, non-commercial use only. <br /> The use of this feed on other websites breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint:<br /> 57093891627bcf5753cb6dde17dba8f4)</small></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.digipom.com/will-and-ravi-use-easy-voice-recorder-on-the-way-to-saturday/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Open Source Calculator Code Released</title>
		<link>https://www.digipom.com/open-source-calculator-code-released/</link>
					<comments>https://www.digipom.com/open-source-calculator-code-released/#respond</comments>
		
		<dc:creator><![CDATA[Kevin]]></dc:creator>
		<pubDate>Wed, 03 Oct 2012 19:46:44 +0000</pubDate>
				<category><![CDATA[Android Development]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[calculator]]></category>
		<category><![CDATA[Dijkstra's shunting yard algorithm]]></category>
		<category><![CDATA[lexer]]></category>
		<category><![CDATA[parser]]></category>
		<category><![CDATA[stack machine]]></category>
		<guid isPermaLink="false">http://www.digipom.com/?p=133</guid>

					<description><![CDATA[We have decided to open source our calculator project to the world. Here are some of the features of the code: Implements a lexer, parser, and Dijkstra&#8217;s shunting yard algorithm to convert an expression into postfix form. Implements a simple stack machine for parsing these expressions. When using float and double, the speed is quite fast. Implements [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>We have decided to open source our calculator project to the world. Here are some of the features of the code:</p>
<ul>
<li>Implements a lexer, parser, and <a href="http://en.wikipedia.org/wiki/Shunting-yard_algorithm">Dijkstra&#8217;s shunting yard algorithm</a> to convert an expression into postfix form.</li>
<li>Implements a simple stack machine for parsing these expressions. When using float and double, the speed is quite fast.</li>
<li>Implements a basic UI, as seen below (keep in mind that many of the features are not implemented):</li>
</ul>
<p><a href="http://www.digipom.com/wordpress/wp-content/uploads/2012/10/calculator.png"><img loading="lazy" decoding="async" class="size-medium wp-image-134 aligncenter" title="Basic calculator UI" src="http://www.digipom.com/wordpress/wp-content/uploads/2012/10/calculator-168x300.png" alt="Basic calculator UI" width="168" height="300" srcset="https://www.digipom.com/wordpress/wp-content/uploads/2012/10/calculator-168x300.png 168w, https://www.digipom.com/wordpress/wp-content/uploads/2012/10/calculator-576x1024.png 576w, https://www.digipom.com/wordpress/wp-content/uploads/2012/10/calculator.png 720w" sizes="(max-width: 168px) 100vw, 168px" /></a><br />
If you&#8217;re interested in learning more about lexing and parsing, or even if you&#8217;re just curious, you can access the <a href="https://github.com/Digipom/Calculator-for-Android">GitHub project here</a>. The code is licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0.txt">Apache 2.0 license</a>.</p>
<hr />
<p><small>Copyright &copy; 2012<br /> This feed is for personal, non-commercial use only. <br /> The use of this feed on other websites breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint:<br /> 57093891627bcf5753cb6dde17dba8f4)</small></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.digipom.com/open-source-calculator-code-released/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Easy Voice Recorder is App of the Day over at Pocket Lint!</title>
		<link>https://www.digipom.com/easy-voice-recorder-is-app-of-the-day-over-at-pocket-lint/</link>
					<comments>https://www.digipom.com/easy-voice-recorder-is-app-of-the-day-over-at-pocket-lint/#respond</comments>
		
		<dc:creator><![CDATA[Kevin]]></dc:creator>
		<pubDate>Mon, 27 Aug 2012 16:28:27 +0000</pubDate>
				<category><![CDATA[Easy Voice Recorder]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[App of the Day]]></category>
		<category><![CDATA[Pocket Lint]]></category>
		<guid isPermaLink="false">http://www.digipom.com/?p=117</guid>

					<description><![CDATA[Easy Voice Recorder is App of the Day over at Pocket Lint! Ian Morris wrote a great in-depth and detailed review, bringing to light the different features available, and also noting the troubleshooting section for working around incompatibilities on certain devices! Here&#8217;s a quick excerpt from the review: A baby&#8217;s first words, a memo to [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Easy Voice Recorder is App of the Day over at Pocket Lint! Ian Morris wrote a great in-depth and detailed review, bringing to light the different features available, and also noting the troubleshooting section for working around incompatibilities on certain devices!</p>
<p>Here&#8217;s a quick excerpt from the review:</p>
<blockquote><p>A baby&#8217;s first words, a memo to yourself or recording an important interview &#8211; all things for which you&#8217;ll need a voice recorder.</p>
<p>Just because the app is free doesn&#8217;t mean it doesn&#8217;t have some impressive settings. You can select from AMR, AAC or PCM recording modes&#8230; There are also options for troubleshooting. For example, with the default settings meant that when the phone went to sleep, the recording stopped. You can fix this here, so make sure you try these settings before heading out for that interview of a lifetime!</p></blockquote>
<p>You can read the entire review at the following link: <a href="http://www.pocket-lint.com/news/47057/easy-voice-recorder-free-app-review">APP OF THE DAY: Easy Voice Recorder Free (Android)</a>.</p>
<p>Thanks to Ian Morris and the team at Pocket Lint for a well thought-out review!</p>
<hr />
<p><small>Copyright &copy; 2012<br /> This feed is for personal, non-commercial use only. <br /> The use of this feed on other websites breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint:<br /> 57093891627bcf5753cb6dde17dba8f4)</small></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.digipom.com/easy-voice-recorder-is-app-of-the-day-over-at-pocket-lint/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Easy Voice Recorder Reviewed at Lifehacker</title>
		<link>https://www.digipom.com/easy-voice-recorder-reviewed-at-lifehacker/</link>
					<comments>https://www.digipom.com/easy-voice-recorder-reviewed-at-lifehacker/#respond</comments>
		
		<dc:creator><![CDATA[Kevin]]></dc:creator>
		<pubDate>Fri, 10 Aug 2012 14:52:22 +0000</pubDate>
				<category><![CDATA[Easy Voice Recorder]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[Lifehacker]]></category>
		<guid isPermaLink="false">http://www.digipom.com/?p=107</guid>

					<description><![CDATA[I&#8217;m happy to announce another great review of Easy Voice Recorder, by Alan Henry and the team at Lifehacker! I first learned about the review yesterday, when I had woken up and logged onto my computer to check for news and updates, as I usually do. Imagine my pleasant surprise when I heard the news from [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>I&#8217;m happy to announce another great review of Easy Voice Recorder, by Alan Henry and the team at Lifehacker! I first learned about the review yesterday, when I had woken up and logged onto my computer to check for news and updates, as I usually do. Imagine my pleasant surprise when I heard the news from a friend via IM. <img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Here is a quick teaser:</p>
<blockquote><p>Easy Voice Recorder is a holo-themed voice recording tool that couldn&#8217;t be easier to use, but hides some serious features just under the hood. If all you want to do is record a quick interview or conversation, [&#8230;] Easy Voice Recorder makes it simple.</p></blockquote>
<p>You can read the rest of the review here: <a href="http://lifehacker.com/5933214/easy-voice-recorder-for-android-makes-recording-lectures-or-interviews-dead-simple">Easy Voice Recorder for Android Makes Recording Lectures or Interviews Dead Simple</a>.</p>
<p>I want to express my thanks and gratitude to Alan Henry and the team at Lifehacker for writing up the review, and to everyone who kindly tweeted and helped to spread the news. Thanks, guys!</p>
<hr />
<p><small>Copyright &copy; 2012<br /> This feed is for personal, non-commercial use only. <br /> The use of this feed on other websites breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint:<br /> 57093891627bcf5753cb6dde17dba8f4)</small></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.digipom.com/easy-voice-recorder-reviewed-at-lifehacker/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Easy Voice Recorder Pro Reviewed over at the Android Lounge</title>
		<link>https://www.digipom.com/easy-voice-recorder-pro-reviewed-over-at-android-lounge/</link>
					<comments>https://www.digipom.com/easy-voice-recorder-pro-reviewed-over-at-android-lounge/#comments</comments>
		
		<dc:creator><![CDATA[Kevin]]></dc:creator>
		<pubDate>Tue, 17 Jul 2012 03:41:12 +0000</pubDate>
				<category><![CDATA[Easy Voice Recorder]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[Android Lounge]]></category>
		<guid isPermaLink="false">http://www.digipom.com/?p=102</guid>

					<description><![CDATA[The team over at the Android Lounge recently wrote a great review of Easy Voice Recorder Pro; here&#8217;s a brief excerpt of what they had to say: Original, in German: Meine Meinung: Der Easy Voice Recorder Pro ist angenehm zu bedienen, macht tadellose Aufnahmen, und liefert ein paar nützliche Funktionen. Für meine Anforderungen (digitales Diktiergerät für Unterwegs, Live-Aufnahme [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>The team over at the <a href="http://www.androidlounge.at">Android Lounge</a> recently wrote a great review of <a href="http://www.digipom.com/portfolio-items/easy-voice-recorder-pro/">Easy Voice Recorder Pro</a>; here&#8217;s a brief excerpt of what they had to say:</p>
<p>Original, in German:</p>
<blockquote><p><strong>Meine Meinung:</strong> Der Easy Voice Recorder Pro ist angenehm zu bedienen, macht tadellose Aufnahmen, und liefert ein paar nützliche Funktionen. Für meine Anforderungen (digitales Diktiergerät für Unterwegs, Live-Aufnahme für Podcasts) einwandfrei geeignet und die Investition wert.</p></blockquote>
<p>Translation to English, by Google Translate:</p>
<blockquote><p>My Opinion: The Easy Voice Recorder Pro is pleasant to use, makes perfect recordings, and provides some useful functions. For my needs (digital voice recorder on the go, live recording for podcasts) perfectly appropriate and worth the investment.</p></blockquote>
<p>You can read more at the following link (in German): <a href="http://www.androidlounge.at/lounge/?p=11941">Im Lounge-Test: Easy Voice Recorder Pro – das Smartphone als digitales Diktiergerät</a></p>
<p>Thanks again to Helmut Hackl and the team at the Android Lounge for taking the time to review Easy Voice Recorder Pro!</p>
<hr />
<p><small>Copyright &copy; 2012<br /> This feed is for personal, non-commercial use only. <br /> The use of this feed on other websites breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint:<br /> 57093891627bcf5753cb6dde17dba8f4)</small></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.digipom.com/easy-voice-recorder-pro-reviewed-over-at-android-lounge/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>Be Careful With BuildConfig.DEBUG</title>
		<link>https://www.digipom.com/be-careful-with-buildconfig-debug/</link>
					<comments>https://www.digipom.com/be-careful-with-buildconfig-debug/#comments</comments>
		
		<dc:creator><![CDATA[Kevin]]></dc:creator>
		<pubDate>Thu, 05 Jul 2012 20:53:55 +0000</pubDate>
				<category><![CDATA[Android Development]]></category>
		<category><![CDATA[ADT]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Proguard]]></category>
		<guid isPermaLink="false">http://www.digipom.com/?p=97</guid>

					<description><![CDATA[In recent versions of the Android Developer Tools (ADT) for Eclipse, there&#8217;s a class called BuildConfig which is automatically generated by the build. This class is updated automatically by Android&#8217;s build system (like the R class), and it contains a static final boolean called DEBUG, which is normally set to true. The purpose of BuildConfig.DEBUG This new flag [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>In recent versions of the Android Developer Tools (ADT) for Eclipse, there&#8217;s a class called <em>BuildConfig</em> which is automatically generated by the build. This class is updated automatically by Android&#8217;s build system (like the <em>R</em> class), and it contains a static final boolean called <em>DEBUG</em>, which is normally set to <em>true</em>.</p>
<h3>The purpose of BuildConfig.DEBUG</h3>
<p>This new flag is intended to be used as a check for debug-only functions. For example, you can use it to control logging, like below:</p>
<pre>if (BuildConfig.DEBUG) {
    Log.v(TAG, "onCreate()");
}</pre>
<p>You might also use it to control other features, such as whether to enable internal verifications, add test devices for your ads or only show real ads, etc&#8230;.</p>
<p>The idea behind this flag is that when you are debugging with Eclipse, the flag will be set to true, and when you export a signed release build, the flag will be set to false, thus turning off and on debug features automatically, without you having to remember to toggle a flag.</p>
<p>This would be nice if it actually worked reliably!</p>
<h3>The problem with BuildConfig.DEBUG</h3>
<p>The problem is that it can be quite <strong>dangerous</strong> to rely on BuildConfig.DEBUG and ADT to do the right thing, because there are bugs in the build system that cause exported signed release builds to be built with BuildConfig.DEBUG set to true!</p>
<p>Imagine building a release and thinking that your logs and other debug features are turned off, and later realizing that the flag was never set to false. <img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<h3>The solution</h3>
<p>Although there are workarounds and supposed fixes, I don&#8217;t want to have to worry about whether or not it actually worked, and whether all of the debug code actually did get stripped out or not.  Instead, I define my own constant, such as follows:</p>
<pre>public class AppConfig {
    public static final boolean DEBUG = false;
}</pre>
<p>I&#8217;ll use this flag like this:</p>
<pre>if (AppConfig.DEBUG) {
    Log.v(TAG, "onCreate()");
}</pre>
<p>In conjunction with ProGuard, this works to remove the debug code from the release build 100% of the time. I keep the flag commited to the source tree as false, and override it to true if I need to debug.</p>
<p>This might be a bit of extra work, but I have peace of mind knowing that it will work every single time.</p>
<h3>Further reading</h3>
<ul>
<li><a href="http://code.google.com/p/android/issues/detail?id=27940">BuildConfig.DEBUG is &#8220;true&#8221; for exported application package</a></li>
<li><a href="http://stackoverflow.com/questions/9855834/when-does-adt-set-buildconfig-debug-to-false">When does ADT set BuildConfig.DEBUG to false?</a></li>
</ul>
<hr />
<p><small>Copyright &copy; 2012<br /> This feed is for personal, non-commercial use only. <br /> The use of this feed on other websites breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint:<br /> 57093891627bcf5753cb6dde17dba8f4)</small></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.digipom.com/be-careful-with-buildconfig-debug/feed/</wfw:commentRss>
			<slash:comments>9</slash:comments>
		
		
			</item>
		<item>
		<title>Easy Voice Recorder Reviews and Gratitude</title>
		<link>https://www.digipom.com/easy-voice-recorder-reviews-and-gratitude/</link>
					<comments>https://www.digipom.com/easy-voice-recorder-reviews-and-gratitude/#comments</comments>
		
		<dc:creator><![CDATA[Kevin]]></dc:creator>
		<pubDate>Wed, 16 May 2012 03:26:18 +0000</pubDate>
				<category><![CDATA[Easy Voice Recorder]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[Brighthand]]></category>
		<guid isPermaLink="false">http://www.digipom.com/?p=90</guid>

					<description><![CDATA[The Brighthand team wrote an excellent review of Easy Voice Recorder Pro over at Brighthand Smartphone News &#38; Reviews. I am thankful to them for the great review, and I&#8217;m also thankful to all of our users who leave great feedback, help us out when there&#8217;s issues or bugs, and provide great suggestions and feedback. [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>The Brighthand team wrote <a href="http://www.brighthand.com/default.asp?newsID=18860&amp;news=Easy+Voice+Recorder+Pro+Review+Android">an excellent review of Easy Voice Recorder Pro</a> over at Brighthand Smartphone News &amp; Reviews. I am thankful to them for the great review, and I&#8217;m also thankful to all of our users who leave great feedback, help us out when there&#8217;s issues or bugs, and provide great suggestions and feedback.</p>
<p>We greatly appreciate the support, and let us know how we can continue to make your recording experience even better in the future!</p>
<p>Download links:</p>
<p><a href="https://play.google.com/store/apps/details?id=com.coffeebeanventures.easyvoicerecorder&amp;referrer=utm_source%3Dwebsite">Easy Voice Recorder</a></p>
<p><a href="https://play.google.com/store/apps/details?id=com.digipom.easyvoicerecorder.pro&amp;referrer=utm_source%3Dwebsite">Easy Voice Recorder Pro</a></p>
<hr />
<p><small>Copyright &copy; 2012<br /> This feed is for personal, non-commercial use only. <br /> The use of this feed on other websites breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint:<br /> 57093891627bcf5753cb6dde17dba8f4)</small></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.digipom.com/easy-voice-recorder-reviews-and-gratitude/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
			</item>
		<item>
		<title>How the Android License Verification Library is Lulling You into a False Sense of Security</title>
		<link>https://www.digipom.com/how-the-android-license-verification-library-is-lulling-you-into-a-false-sense-of-security/</link>
					<comments>https://www.digipom.com/how-the-android-license-verification-library-is-lulling-you-into-a-false-sense-of-security/#comments</comments>
		
		<dc:creator><![CDATA[Kevin]]></dc:creator>
		<pubDate>Fri, 06 Apr 2012 05:02:03 +0000</pubDate>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[Android LVL]]></category>
		<category><![CDATA[Android Market]]></category>
		<category><![CDATA[AntiLVL]]></category>
		<category><![CDATA[Google Play]]></category>
		<category><![CDATA[obfuscation]]></category>
		<category><![CDATA[Proguard]]></category>
		<category><![CDATA[security through obscurity]]></category>
		<guid isPermaLink="false">http://www.digipom.com/?p=61</guid>

					<description><![CDATA[Are you an Android developer? Have you ever wondered why your app keeps getting hacked, ending up on shady forums and websites? Some of you might remember the old copy protection measure that Google used to have. You can still find it on your publisher page, with the following warning in red: &#8220;The copy protection feature will [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Are you an Android developer? Have you ever wondered <a href="http://stackoverflow.com/questions/5600143/android-game-keeps-getting-hacked">why your app keeps getting hacked</a>, ending up on shady forums and websites?</p>
<p>Some of you might remember the old copy protection measure that Google used to have. You can still find it on your publisher page, with the following warning in red: &#8220;The copy protection feature will be deprecated soon&#8230;.&#8221; Enter <em>Android&#8217;s <strong>L</strong>icense <strong>V</strong>erification <strong>L</strong>ibrary (<strong>LVL</strong>)</em>: a new tool to save the day!</p>
<h3>Android&#8217;s License Verification Library (LVL): A false sense of security</h3>
<p>How does the license verification library work? It manages a connection between your app and the Android Market (now Google Play), and performs a license check with the server to see if the user has a valid license for your app (i.e. it was purchased legitimately through the market). In other words, it&#8217;s a form of <strong>D</strong>igital <strong>R</strong>ights <strong>M</strong>anagement (<strong>DRM</strong>).</p>
<p>Unfortunately, the license verification library is also a joke to crack and bypass.</p>
<p>It literally takes a pirate no more than a few seconds to run a tool that will decompile your application, detect your licensing code, patch it to bypass all of the checks, repackage everything into a new APK and resign it. This tool is called <em>AntiLVL.</em> By the way, it can also bypass much of Proguard&#8217;s obfuscation, and even techniques using reflection.</p>
<p>For obvious reasons, I won&#8217;t link to it here, but you can find it if you do a bit of searching. This is also just one tool that&#8217;s freely available to download; who knows what other tools are hidden from public release.</p>
<h3>What does Google recommend?</h3>
<p>Unfortunately, you have to do a lot of digging to find out what you should do, and just how vulnerable you are. Google doesn&#8217;t offer much in the way of help and advice directly from their website, except for &#8220;well, you should probably not use it as-is and obfuscate the code somewhat.&#8221; They also give advice like &#8220;In most cases, you should add the license check to your application&#8217;s main <code>Activity</code>, in the <code>onCreate()</code> method,&#8221; which directly contradicts the advice given by Google engineers in the talk, &#8220;<a href="http://www.google.com/events/io/2011/sessions/evading-pirates-and-stopping-vampires-using-license-verification-library-in-app-billing-and-app-engine.html">Evading Pirates and Stopping Vampires using License Verification Library, In-App Billing, and App Engine</a>,&#8221; where they recommend that you <em>don&#8217;t</em> add the checks to non-obfuscated methods such as <code>onCreate()</code>.<br />
<iframe loading="lazy" style="margin: 0 auto;" width="560" height="315" src="http://www.youtube.com/embed/TnSNCXR9fbY" frameborder="0" allowfullscreen></iframe><br />
I highly recommend you view the presentation or watch the video. I would not necessarily use them directly <em>as-is</em>, but you can take the ideas and go with variants.</p>
<h3>What are the weakest points?</h3>
<p>Here are some of the checks that are removed very quickly and easily by tools such as AntiLVL:</p>
<h4>Non-obfuscated code</h4>
<p>A trivial check will easily take care of methods with names such as <em>checkLicense().</em></p>
<h4>Unmodified code</h4>
<p>The default signatures of some methods are very easy to trap. For example, <em>ServerManagedPolicy.allowAccess() </em>has a call to <em>System.currentTimeMillis()</em> at the top of the method body. AntiLVL finds this code, and replaces it with a force return true.</p>
<p>Another bit of easily-hacked code is the enum Policy.LicenseResponse. This enum contains three constants, &#8220;LICENSED&#8221;, &#8220;NOT_LICENSED&#8221;, and &#8220;RETRY&#8221;. Even with Proguard obfuscation enabled, these constants get embedded into your code as strings, containing the same value as the enum! AntiLVL replaces the &#8220;NOT_LICENSED&#8221; string with &#8220;LICENSED&#8221;, which causes other checks to pass.</p>
<h4>Package checks</h4>
<p>AntiLVL can check if you&#8217;re trying to validate that your classes or signature have been modified and intercept those validation calls, even if you&#8217;re using reflection.</p>
<h4>And much more&#8230;</h4>
<p>There is a lot more that AntiLVL can detect and modify; you can download it and look at the XML files inside the jar to see what else it can detect. There&#8217;s also a sample project with all of the usual tricks, which are easily detected and cracked by AntiLVL.</p>
<h3>What can I do?</h3>
<p>The minimum you can do is download AntiLVL, run it in a virtual machine with no connection to the Internet if you don&#8217;t trust the code, and test it against your APK until it can no longer crack it automatically.</p>
<p>Here are some ideas:</p>
<ul>
<li>Wrap all logging calls in a static boolean, set to false when you build the release version of your app.</li>
<li>Encode all hard-coded strings using a two-way encoder/decoder function, such as a <a href="http://rumkin.com/tools/cipher/caesar.php">Caesarian Shift</a>. Change all string constants and hard-encode the encoded value into your Java source file. Decode before using.</li>
<li>If you only need to test equality, use a hash such as SHA1, and compare the hashed values.</li>
<ul>
<li>Don&#8217;t do: <em>public static final String SOME_STRING = SHA1.encode(&#8220;Unhashed Value&#8221;);</em></li>
<li>Do: <em>public static final String SOME_STRING = &#8220;5dad4014ec894587f83626ee31a8dd418d1371f1&#8221;;</em></li>
<li>It&#8217;s better if you use a combination of techniques, since the pirates can easily search for the known hashes to figure out which bit of code is which.</li>
</ul>
<li>Remove ILicensingService from your ProGuard config with this one change:<br />
&nbsp;<br />
Change:</p>
<p><em>boolean bindResult = mContext.bindService(</em><br />
<em>new Intent(ILicensingService.class.getName())</p>
<p></em>To:</p>
<p><em>boolean bindResult = mContext.bindService(</em><br />
<em>new Intent(&#8220;com.android.vending.licensing.ILicensingService&#8221;)</em></p>
<p>That string can also be encoded in the source and decoded using the techniques described above, to make it a bit less obvious.</li>
<li>Move your functions around, inline some stuff, change switch statements to if statements, move statements around, and reverse the roles of some methods.</li>
<li>Increase your Proguard obfuscation:<br />
&nbsp;<br />
-repackageclasses<br />
-allowaccessmodification</li>
</ul>
<p>Of course, none of this will help if the pirate finds where the license check code is being called in your app. He can cut out this weakest link, and not worry about the rest. All of these measures will only slow down the pirates, but they won&#8217;t stop them.</p>
<h3>Is it worth it?</h3>
<p>You have to acknowledge that your app will get pirated. Even the biggest companies cannot prevent their stuff from getting pirated. Here are a couple practical ways to at least mitigate the damage:</p>
<ul>
<li>Place some logic on the server. Whether it be leader boards or other features, tying some logic into the server cuts pirate users out of some of the loop.</li>
<li>Add additional features in the form of server downloads. Without a valid key, the user can&#8217;t download these additional features.</li>
</ul>
<p>Why is it that some people don&#8217;t think twice about spending $40 on a movie night, but are too cheap to pay $2 for an app? Do they hate developers that much? While these people should be ashamed of themselves, perhaps other people live in an area where paid downloads are not an option, or they might not actually have the means to buy a lot of apps. </p>
<p>These users can be used as a source of good will, to help spread awareness of your app. Obviously, as a developer you need to eat, but not everyone&#8217;s going to go to some shady website to download code they can&#8217;t necessarily trust. There is a lot to be said for the convenience of regular updates and downloads from a trusted site.</p>
<h3>What Google should have really done</h3>
<p>If all the logic is in the client, then cracking an app is not a question of <em>if</em>, but <em>when</em>. The question is, how difficult can we make it for the pirates?</p>
<p>I think the current implementation of &#8220;copy protection&#8221; on Android is a complete joke and lulling many developers into a false sense of security. Your app is cracked in seconds, uploaded onto forums and download sites in minutes, and may even be re-uploaded to the market under a different name. Even worse, the verification process penalizes legitimate users when the market screws up the license check, and this happens more often than you think.</p>
<p>One thing Google could have done to make things a lot harder for the pirates is use a bytecode tool to generate the license library on the fly, using random permutations and injecting it everywhere into the bytecode, instead of asking the developer to use a very easily hacked method of adding some classes to their project. These checks could be generated in a slightly different form for each new release, making it much harder to replay a crack against your next release.</p>
<p>With an open platform, we have to accept the fact that a crack will happen. You&#8217;d need to have an AI built into the OS smart enough to determine that a modified cracked copy side-loaded onto the device is derived from a market release, and even then, that wouldn&#8217;t help you on a rooted device.</p>
<p><strong>What are your thoughts on the Android License Verification Library and the current direction of the Android Market? If you haven&#8217;t yet seen it, I recommend looking at &#8220;<a href="http://www.google.com/events/io/2011/sessions/evading-pirates-and-stopping-vampires-using-license-verification-library-in-app-billing-and-app-engine.html">Evading Pirates and Stopping Vampires using License Verification Library, In-App Billing, and App Engine</a>!&#8221;</strong></p>
<hr />
<p><small>Copyright &copy; 2012<br /> This feed is for personal, non-commercial use only. <br /> The use of this feed on other websites breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint:<br /> 57093891627bcf5753cb6dde17dba8f4)</small></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.digipom.com/how-the-android-license-verification-library-is-lulling-you-into-a-false-sense-of-security/feed/</wfw:commentRss>
			<slash:comments>21</slash:comments>
		
		
			</item>
		<item>
		<title>Welcome to Digipom</title>
		<link>https://www.digipom.com/welcome-to-digipom/</link>
					<comments>https://www.digipom.com/welcome-to-digipom/#respond</comments>
		
		<dc:creator><![CDATA[Kevin]]></dc:creator>
		<pubDate>Wed, 04 Jan 2012 00:54:03 +0000</pubDate>
				<category><![CDATA[Miscellaneous]]></category>
		<guid isPermaLink="false">http://www.digipom.com/wordpress/?p=1</guid>

					<description><![CDATA[Welcome to Digipom! Please see our About to learn more about us, what we do, and why we started. Copyright &#169; 2012 This feed is for personal, non-commercial use only. The use of this feed on other websites breaches copyright. If this content is not in your news reader, it makes the page you are [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Welcome to Digipom! Please see our <a href="/about">About</a> to learn more about us, what we do, and why we started.</p>
<hr />
<p><small>Copyright &copy; 2012<br /> This feed is for personal, non-commercial use only. <br /> The use of this feed on other websites breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint:<br /> 57093891627bcf5753cb6dde17dba8f4)</small></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.digipom.com/welcome-to-digipom/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
