作者@恺风Wei。
打开应用商店
Android提供URI(market://),在代码中打开Android Market应用商店。
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://search?q=pname:MY_PACKAGE_NAME"));
startActivity(intent);
其中MY_PACKAGE_NAME替换为包名。例如用户希望升级为付费版本,或者进行交叉推荐。URI的格式为:market://search?q=<querystring>。例如market://search?q=pub:\"Fname Lname\" 表示显示某个开发者的应用。
Android Market已经升级为Google Play,没有确认上面的是否有效。对于浏览器,可以是使用:
http://play.google.com/store/apps/details?id=<package_name> http://play.google.com/store/search?q=pub:<publisher_name>
Google Play的相关guide可以阅读sdk/docs/distribute/googleplay/index.html。
Android许可服务
下载付费是应用货币化的一种方式,虽然比例会越来越少,也需要确保不能通过copy在其他设备上运行付费版本应用。Android提供License Verification Library(LVL)来确保。具体可以阅读sdk的sdk/docs/google/play/licensing/index.html,使用Policy类来进行。
工作原理大致如下:在Manifest中需要com.android.vending.CHECK_LICENSE的权限,这样就可以获取设备中用户的Google账号,IMIS等其他信息,然后送到Google的云端服务器进行校验,返回给用户是否允许使用,例如非购买用户不能使用付费版。
这个机制也是黑客要修订的主要地方,如果我们在代码中通过switch语句来处理LVL的返回,很容易被发现,黑客只要简单地降至返回true就可以了。因此Android团队建议处理LVL的返回值要做得更隐藏一些。这不那么容易,但Android也提供了工具。
ProGuard
百度百科:ProGuard是一个压缩、优化和混淆Java字节码文件的免费的工具,它可以删除无用的类、字段、方法和属性。可以删除没用的注释,最大限度地优化字节码文件。它还可以使用简短的无意义的名称来重命名已经存在的类、字段、方法和属性。常常用于Android开发用于混淆最终的项目,增加项目被反编译的难度。
ProGuard不仅仅是保护知识产权,它优化了代码,除去了debug信息,删除无用代码(例如如果xxx为false就没有debug信息,在发布版中我们设置为false后,这些debug代码就删除了),修改名字,对出一些计算,例如×2改为左移位操作。让apk更小和更高效。
从Android2.3开始,SDK将ProGurad集成到sdk/tools/proguard中了。
要使用progurad,首先在project-properties中允许使用。去掉有关的注释,即
所引用的文件有两个(中间有冒号),我们可以打开看看,Android已经预先配置好,当然如果我们要只使用自己的配置,只使用proguard.config=proguard-project.txt。可以在sdk/docs/tools/help/proguard.html中获得进一步的配置信息,并在http://proguard.sourceforge.net/中http://proguard.sourceforge.net/index.html#manual/usage.html查阅如何进行配置。
由于ProGuard会删除会修改一些代码,如果出现有问题,我们可以在proguard-project.txt中通过-keep 表示对某些内容保留原样,即不修改。
建议使用Eclipse来打apk包,因为会在进行ProGuard的时候进行检查,使用起来安全。如果成功,除了apk外,我们还看到一个mapping.txt文件,位于project根目录下面新生成的proguard/,用来反混淆查看stack trace。反混淆使用命令retrace(参数包括mapping.txt和stacktrace文件),该命令在tool/proguard/bin/目录下。