如何安装应用程序两次,而不会在Android干扰?

我有一个Android应用程序(我们称为X),我想创build第二个应用程序X2,但基于其他应用程序。 所以我更改清单应用程序名称属性为X2也更改了包名称…但仍然当我安装X2,应用程序X被删除!

我应该更改哪些属性,以便可以在一台设备上独立安装这两个应用程序。 我正在研究eclispe。

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.company.app1" android:versionCode="1" android:versionName="1.0" > <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name1" android:theme="@style/AppTheme" > 

改变之后。

 <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.company.app2" android:versionCode="1" android:versionName="1.0" > <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name2" android:theme="@style/AppTheme" > 

Related of "如何安装应用程序两次,而不会在Android干扰?"

也可以在gradle脚本build.gradle模块中更改包名称

 defaultConfig { applicationId "com.me.mesurvey" //put your package name here// minSdkVersion 14 targetSdkVersion 19 } 

那么它在更新的平台上的其他设备上工作! 无论如何,正确的回应将是你只需要改变应用程序的名称和包。

编辑1:现在,如果您使用Android Studio使用applicationIdSuffix有一个应用程序的每个味道。

 debug { applicationIdSuffix ".debug" } 

在这里阅读更多developer.android.com

我需要这样的工具,因为客户希望能够在同一时间使用testing版和发布版本的应用程序。 我正在改变apk的主要命名空间来实现这个使用apktool。

我遵循这些步骤:

  • 反编译apk使用apktool java -jar apktool.jar d -o out -f my-app.apk
  • 将out目录中的所有文件中的com.mainnamespacereplace为com.mainnamespacebeta
  • com / mainnamespacereplace为out目录中所有文件中的com / mainnamespacebeta
  • 将目录/ smali / com / mainnamespace重命名为/ smali / com / mainnamespacebeta
  • 再次编译apk java -jar apktool.jar b -o ./debug.apk -f ./out
  • 使用jarsigner用新密钥签署apk。 jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore key.keystore ./debug.apk“password”-storepass“password”-keypass“password”

这里是手册如何签署apk获得key.keystore – http://developer.android.com/tools/publishing/app-signing.html

我也为linux创build了简单的脚本 – https://gist.github.com/vavrecan/8596303