去年给运营同事解释了最简单的多开原理,最简单的方式通过修改包名达到多开的目的。很多 APK 现在已经不能通过这个方式达到多开了,虽然 LOW ,但是对了解多开原理还是有点用的。
传送门:APK多开原理
所有的 Android 应用程序都有一个包名。包名是设备上的这个应用程序的唯一标识,也是在谷歌Play商店上的唯一标识。所以多开也就是基于这个原理来实现。在这之前需要了解下ApplicationId
和 PackageName
的区别。这里有一份官方文档: http://tools.android.com/tech-docs/new-build-system/applicationid-vs-packagename
Application 和 PackageName
在旧版本的 Android Gradle 和 Eclipse Ant 构建系统中,应用程序的包名是由 AndroidManifest 文件的根元素的 package 属性决定的:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.my.app"
android:versionCode="1"
android:versionName="1.0" >
但其实这里的 package 有两种含义:
应用程序包名
资源类的包名(以及解析任何相关的Activity的类名)
Android 开发者应该都知道 R.java, 每个资源文件都会在 R 类中生成唯一的16进制编号。上面例子中将会生成 com.example.my.app.R, 如果需要在代码中引入资源,就需要导入 com.example.my.app.R。
在新版本的 Android Gradle 构建系统可以通过 flavors 构建不同版本的的应用程序;比如我们可以同时打包 “free” 版本和 “pro” 版本,并且这两个版本在不同的应用商店上有不同的包名,所以他们可以被同时安装在同一个机器上面。
因此新版本构建工具多了一个 ApplicationId
。新增的 ApplicationId
表示应用程序的包名,而 package