如何避免打开同一个应用程序的两种风格的应用程序?
Posted
技术标签:
【中文标题】如何避免打开同一个应用程序的两种风格的应用程序?【英文标题】:How to avoid two flavours of an app opening the same app? 【发布时间】:2019-05-12 03:27:24 【问题描述】:我为我的应用程序配置了不同的风格。当我在同一台设备上安装这两种风格时,就会出现一个大问题。
当我打开 App1(Flavour 1)然后最小化它(单击 Home 按钮)并尝试打开 App2(Flavour 2)时,它会打开 App1(Flavour1)。为了打开 App2,我必须从最近删除 App1,然后打开 App2。反之亦然。
我也尝试过使用不同的风味维度。这是我当前的配置。
android
compileSdkVersion 28
buildToolsVersion '28.0.3'
flavorDimensions("default")
defaultConfig
applicationId "com.xx.aa"
minSdkVersion 21
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
multiDexEnabled true
buildTypes
release
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
lintOptions
disable 'RestrictedApi'
productFlavors
aa
applicationId "com.xx.aa"
versionCode 12
versionName "1.0.1"
manifestPlaceholders = [
appName: 'aa',
appId : 'com.xx.aa'
]
buildConfigField "boolean", "XXXX", "false"
bb
applicationId "com.xx.bb"
versionCode 2
versionName "1.2.3"
manifestPlaceholders = [
appName: 'bb',
appId : 'com.xx.bb'
]
buildConfigField "boolean", "XXXX", "true"
我的清单
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.xx.aa">
<!-- few permissions-->
<uses-feature
android:name="android.hardware.camera"
android:required="true" />
<application
android:name=".global.aaApplication"
android:allowBackup="false"
android:fullBackupContent="false"
android:icon="@drawable/ic_launcher_default"
android:label="$appName"
android:roundIcon="@drawable/ic_launcher_default"
android:supportsRtl="true"
android:theme="@style/AppCompactTheme">
<activity
android:name=".activity.SplashActivity"
android:screenOrientation="portrait"/>
.
.
.
</application>
</manifest>
【问题讨论】:
就我而言,我在defaultConfig applicationId "com.xx"
和flavorDimensions "aa"
之前使用productFlavors ...
你的.global.aaApplication
有什么逻辑
你也可以发一下吗
如果您的com.xx.aa
应用程序有(aaApplication)某些特定逻辑?
【参考方案1】:
从defaultConfig
中删除applicationId "com.xx.aa"
。使用productFlavors
时不必在此处指定。
【讨论】:
试过还是一样的行为没有变化。【参考方案2】:我不知道你的确切目标是什么,下面的任务会在你的应用启动前停止。
task stopApp(type: Exec)
android.applicationVariants.all variant ->
android.productFlavors.all flavor ->
if (variant.flavorName == flavor.name)
def applicationId = [variant.mergedFlavor.applicationId, flavor.applicationIdSuffix].findAll().join()
def command = ['adb', 'shell', 'am', 'force-stop', applicationId]
commandLine command
将此任务添加到您的Run Configuration
> Before launch
。
或者干脆(如果可以的话)添加uninstallAll
任务。
【讨论】:
我在运行时遇到了这个问题。即使在使用两种风格的应用程序播放商店后,我也面临这个问题。使用上述任务不会帮助我解决问题【参考方案3】:在您的清单中,您将“com.xx.aa”指定为您的包。这可能会导致两者或您的应用程序(aa 和 bb)之间出现问题。同时将其从您的 defaultConfig 中删除。
我有一个具有多种风格的应用程序,它们都具有相同的清单包,但为了将它们全部安装在同一设备中,我更改了 applicationIdSuffix 参数,并且所有应用程序都可以同时使用。
【讨论】:
我无法从清单中删除包名。如果这样做,我将无法在清单文件中指定活动名称。有没有其他方法可以做到。 是的,你是对的。从您的 aa 和 bb 风味配置中删除您的 applicationId,然后删除用户 applicationIdSuffix(= ".aa" for aa 和 = ".bb" for bb)。 我推荐你阅读:developer.android.com/studio/build/manifest-build-variables和developer.android.com/studio/build/application-id以上是关于如何避免打开同一个应用程序的两种风格的应用程序?的主要内容,如果未能解决你的问题,请参考以下文章