使用 Flavors 和多个清单文件时安装了多个应用程序图标
Multiple app icons being installed when using Flavors and multiple manifest files
我目前有一个项目需要包含两种不同形式的代码库,即应用程序的遗留版本和更新版本。为此,我正在使用 Flavors,但 运行 遇到了安装两个应用程序图标的问题。原因是因为遗留代码库和更新后的代码库都有自己的 manifest.xml,并且在清单中是用于标识主启动 class 及其相关应用程序图标的声明。
<!-- legacy code manifest -->
<activity
android:name="legacy.activity.RegistrationActivity"
android:configChanges="orientation|screenSize"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@style/CustomAppTheme"
android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<!-- updated code manifest -->
<activity
android:name="updated.activity.RegistrationActivity"
android:configChanges="orientation|screenSize"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@style/CustomAppTheme"
android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
我该如何解决这个问题?如果我从更新的代码库(即主代码库)中删除 intent-filter,Flavor 将不会安装两个图标。但是,我无法 运行 主代码库,因为我没有在我的清单中声明入口点。相反,如果我从 Flavor 中删除 intent-filter 并将其保留在我的主代码库中,Flavor 代码将不会 运行。两个RegistrationActivityclass不同,只是同名。遗留代码并没有真正共享很多更新的代码库。除了分成不同的项目之外还有什么建议吗?
有些人要求我在 gradle 中使用 Flavors 进行设置,这是它的快照。
productFlavors {
standard {
applicationId 'updated.android.example'
manifestPlaceholders = [package_name: "updated.android.example", primary_lang: "en"]
signingConfig signingConfigs.keystore
}
legacyTest {
applicationId 'legacy.android.example.debug'
manifestPlaceholders = [package_name: "legacy.android.example.debug",
target : "Test", primary_lang: "en"]
signingConfig signingConfigs.keystore
}
legacyProd {
applicationId 'legacy.android.example.prod'
manifestPlaceholders = [package_name: "legacy.android.example.prod",
target : "Prod", primary_lang: "en"]
signingConfig signingConfigs.keystore
}
这一行:
<category android:name="android.intent.category.LAUNCHER"/>
说你有发射 activity。将它们设置为默认 activity 设置(这只是 "another activity",创建第三个 class 即启动器 - class。此 class 将自动重定向到根据您可能拥有的任何规格(例如 API 级别或品牌)的其他两个活动之一。您拥有关于启动的任何规格,设置它们并且用户将不知道有一个处理 activity.
当您有两个启动器活动时,它们显示为两个应用程序。这可能是因为系统无法确定自动重定向到什么。所以有两个取决于要启动什么。
How can I get around this? If I remove the intent-filter from the updated code base, which is the Main codebase,
不要删除它。更改。例如:
<intent-filter>
<action android:name="com.yourpackage.name.CLASSNAME" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
您需要分开 <activity android:name="legacy.activity.RegistrationActivity"
和 <activity android:name="updated.activity.RegistrationActivity"
两个清单,每种口味一个。
例如:
src/main/AndroidManifest.xml
(除了:*.activity.RegistrationActivity)
src/legacy/AndroidManifest.xml
(有遗产。activity.RegistrationActivity)
src/updated/AndroidManifest.xml
(已更新。activity.RegistrationActivity)
我目前有一个项目需要包含两种不同形式的代码库,即应用程序的遗留版本和更新版本。为此,我正在使用 Flavors,但 运行 遇到了安装两个应用程序图标的问题。原因是因为遗留代码库和更新后的代码库都有自己的 manifest.xml,并且在清单中是用于标识主启动 class 及其相关应用程序图标的声明。
<!-- legacy code manifest -->
<activity
android:name="legacy.activity.RegistrationActivity"
android:configChanges="orientation|screenSize"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@style/CustomAppTheme"
android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<!-- updated code manifest -->
<activity
android:name="updated.activity.RegistrationActivity"
android:configChanges="orientation|screenSize"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@style/CustomAppTheme"
android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
我该如何解决这个问题?如果我从更新的代码库(即主代码库)中删除 intent-filter,Flavor 将不会安装两个图标。但是,我无法 运行 主代码库,因为我没有在我的清单中声明入口点。相反,如果我从 Flavor 中删除 intent-filter 并将其保留在我的主代码库中,Flavor 代码将不会 运行。两个RegistrationActivityclass不同,只是同名。遗留代码并没有真正共享很多更新的代码库。除了分成不同的项目之外还有什么建议吗?
有些人要求我在 gradle 中使用 Flavors 进行设置,这是它的快照。
productFlavors {
standard {
applicationId 'updated.android.example'
manifestPlaceholders = [package_name: "updated.android.example", primary_lang: "en"]
signingConfig signingConfigs.keystore
}
legacyTest {
applicationId 'legacy.android.example.debug'
manifestPlaceholders = [package_name: "legacy.android.example.debug",
target : "Test", primary_lang: "en"]
signingConfig signingConfigs.keystore
}
legacyProd {
applicationId 'legacy.android.example.prod'
manifestPlaceholders = [package_name: "legacy.android.example.prod",
target : "Prod", primary_lang: "en"]
signingConfig signingConfigs.keystore
}
这一行:
<category android:name="android.intent.category.LAUNCHER"/>
说你有发射 activity。将它们设置为默认 activity 设置(这只是 "another activity",创建第三个 class 即启动器 - class。此 class 将自动重定向到根据您可能拥有的任何规格(例如 API 级别或品牌)的其他两个活动之一。您拥有关于启动的任何规格,设置它们并且用户将不知道有一个处理 activity.
当您有两个启动器活动时,它们显示为两个应用程序。这可能是因为系统无法确定自动重定向到什么。所以有两个取决于要启动什么。
How can I get around this? If I remove the intent-filter from the updated code base, which is the Main codebase,
不要删除它。更改。例如:
<intent-filter>
<action android:name="com.yourpackage.name.CLASSNAME" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
您需要分开 <activity android:name="legacy.activity.RegistrationActivity"
和 <activity android:name="updated.activity.RegistrationActivity"
两个清单,每种口味一个。
例如:
src/main/AndroidManifest.xml
(除了:*.activity.RegistrationActivity)
src/legacy/AndroidManifest.xml
(有遗产。activity.RegistrationActivity)
src/updated/AndroidManifest.xml
(已更新。activity.RegistrationActivity)