我目前有一个项目需要包含两种不同形式的代码库,旧版本和应用程序的更新版本。我正在使用Flavors,但遇到了安装两个应用程序图标的问题。原因是遗留代码库和更新的代码库都有自己的manifest.xml,清单内部是用于标识Main启动类及其相关应用程序图标的声明。
<!-- 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将不会安装两个图标。但是,我无法运行主代码库,因为我没有在我的Manifest中声明一个入口点。相反,如果我从Flavor中删除intent-filter并将其保存在我的主代码库中,Flavor代码将无法运行。两个RegistrationActivity类是不同的,只是名称相同。 Legacy代码并没有真正共享更新的代码库。除了分成不同的项目之外的任何建议吗?
有些人要求我在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
}
答案 0 :(得分:1)
这一行:
<category android:name="android.intent.category.LAUNCHER"/>
说你有一个发起活动。将它们设置为默认活动设置(这只是“另一个活动”,创建第三个类,即启动器类。此类将根据您可能具有的任何规范自动重定向到另外两个活动之一,例如API级别或品牌。您有关于启动,设置它们的任何规范,用户将不知道有处理活动。
当您有两个启动器活动时,它们显示为两个应用程序。这可能是因为系统无法自动确定要重定向的内容。所以有两个取决于要发布什么。
我该如何解决这个问题?如果我从更新的代码库中删除了intent-filter,它是主代码库,
请勿将其删除。更改。 E.g:
<intent-filter>
<action android:name="com.yourpackage.name.CLASSNAME" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
答案 1 :(得分:1)
您需要单独的<activity android:name="legacy.activity.RegistrationActivity"
和<activity android:name="updated.activity.RegistrationActivity"
两个清单,每个清单一个。
例如:
src/main/AndroidManifest.xml
(除了以下所有内容:* .activity.RegistrationActivity)
src/legacy/AndroidManifest.xml
(与legacy.activity.RegistrationActivity一起使用)
src/updated/AndroidManifest.xml
(使用updated.activity.RegistrationActivity)