标签(空格分隔): Android
APK渠道打包##
- 通过友盟
参考StormZhang文章
比较常见的友盟移动统计sdk中使用的方案,UMeng要根据各应用市场渠道号来进行一些统计和分析,比如各渠道的下载数、活跃度、自动更新等等。这种方案是 通过build.gradle脚本中的productFlavor 来实现的。首先在AndroidManifest.xml文件的 application 标签里指定一个 meta-data ,然后Umeng SDK会读取这个标签中value传到Umeng的后台,这样就可以让开发者监测到自己的应用程序渠道分布情况了。
【注意的是,虽然这里用到了友盟的标签,但是不用像引入友盟推送是将友盟SDK集成到项目依赖?】
自动化打包+版本号管理
定制生成的apk文件名、Android Studio设置默认的签名文件
-
美团的打包方案(现阶段最快)-打包界的曙光
用友盟传统的批量打包方式,最大的缺点就是打包时间长。在前期渠道很少时这种方法还可以接受,但只要渠道稍微增多该方法就不再适用了,原因是每打一个包都要执行一遍Gradle构建过程,效率太低。
原理:
到这里,思路就有了。
1、在META-INF中放置一个类似 channel_xxx 的空文件来标识市场。
2、在Java代码中解析这个文件名获取市场xxx即可。
具体步骤:文章
那Gradle构建是不是没用了呢?
当然不是,Google老大为他做了这么多,怎么能说不用就不用呢?
他的用处在于实现订制,比如打包出x86和arm的包,或者打出手机包和适应平板的hd包,然后借助上面的美团的打包方案工具生成多个市场,即完成了多种适配包多个市场的任务。
加密加固APK
-
什么是加壳?
加壳是在二进制的程序中植入一段代码,在运行的时候优先取得程序的控制权,做一些额外的工作。大多数病毒就是基于此原理。
-
Android Dex文件加壳原理
PC平台现在已存在大量的标准的加壳和解壳工具,但是Android作为新兴平台还未出现APK加壳工具。Android Dex文件大量使用引用给加壳带来了一定的难度,但是从理论上讲,Android APK加壳也是可行的。
主要步骤:
我们拿到需要加密的Apk和自己的壳程序Apk,然后用加密算法对源Apk进行加密在将壳Apk进行合并得到新的Dex文件,最后替换壳程序中的dex文件即可,得到新的Apk,那么这个新的Apk我们也叫作脱壳程序Apk.他已经不是一个完整意义上的Apk程序了,他的主要工作是:负责解密源Apk.然后加载Apk,让其正常运行起来。
在这个过程中,牵扯到三个角色:
1、加壳程序:加密源程序为解壳数据、组装解壳程序和解壳数据
2、解壳程序:解密解壳数据,并运行时通过DexClassLoader动态加载
3、源程序:需要加壳处理的被保护代码
- 根据解壳数据在解壳程序DEX文件中的不同分布,本文将提出两种Android Dex加壳的实现方案。
参考文章
1、解壳数据位于解壳程序文件尾部
2、解壳数据位于解壳程序文件头