Java 在Android studio中使用Flavors并-错误,选择了错误的AndroidManifest/未合并

Java 在Android studio中使用Flavors并-错误,选择了错误的AndroidManifest/未合并,java,android,android-studio,Java,Android,Android Studio,我正在尝试设置Flavors,这样我就可以在同一个项目中构建共享相同代码的不同应用程序。。。但我不确定我做的是否完全正确 我在文件夹W:\android studio projects\sharedid中创建了一个名为com.sharedid.app的项目\ 为此,我有 (一) 在W:\android studio projects\sharedid\app\src\main中创建了AndroidManifest.xml,如下所示: <?xml version="1.0" encoding

我正在尝试设置Flavors,这样我就可以在同一个项目中构建共享相同代码的不同应用程序。。。但我不确定我做的是否完全正确

我在文件夹W:\android studio projects\sharedid中创建了一个名为com.sharedid.app的项目\

为此,我有

(一) 在W:\android studio projects\sharedid\app\src\main中创建了AndroidManifest.xml,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.sharedid.app"
  android:versionCode="1"
  android:versionName="1.0"
>
<activity android:name="com.shared.app.SharedMain" android:label="@string/MicMainName" >
  <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>
</activity>  
</manifest>
我的问题是

当我在“构建变量”中选择“module=app”和“build variant=com.myflavor.appDebug”并单击“Run>Debug…”时,我会看到一个对话框,其中显示:“错误:未找到默认活动”

根据我对Flavors的研究,我不需要定义源集路径,因为我使用默认的格式文件来定义Flavors。。。如果我说的没错,那么为什么它没有看到所选味道的Androidmanifest文件呢

参考链接我的理解基于:

其他故障排除

在我试图找到这个问题的根源时,我开始怀疑清单合并不起作用。产生这种怀疑的原因是,如果我忽略了关于“无活动”的错误,并尝试在手机上推出编译后的应用程序,我会收到一条警告,说明版本号小于手机上安装的版本号-明确表示使用了错误的清单文件

因此,我还尝试删除src/main/AndroidManifest.xml,这会导致错误:

发现任务的配置有问题 “:app:checkmyflavourDebugManifest”。文件 W:\android studio projects\sharedid\src\main\android manifest.xml' 为属性“清单”指定的不存在

这让我相信Android Studio完全忽略了我实际上指定它使用另一个清单文件。。。同时,尽管看起来我是一个正确的变体建筑

我非常感谢对这一点的任何评论/分析,即使只是为了证实我对原因的看法

我当前设置的屏幕截图

(在这个屏幕截图中,我体验过删除主/共享androidmanifest文件,但在其他方面它已经完成)

最新更新

我的结论是口味不起作用/我的gradle设置一定是错误的。例如,如果选择建筑变体,myflavourDebug Android studio不使用gradle中定义的清单文件。单凭这一点就足以得出问题的症结所在

也许我的gradle文件有什么地方错了,我不知道,但我已经非常小心地纠正了我的错误。如果有人在赏金激活时发布asnwer,我会尝试快速分配它


我认为问题在于:

applicationId "com.myflavour.app"
在build.gradle中将应用程序定义为
com.myflavor.app
。 在你的AndroidManifest中,你指定

<activity android:name="com.shared.app.SharedMain"
    android:label="@string/MicMainName" >


作为你的主要活动。如果我没有错的话,你的主要活动应该以你的applicationId命名。因此,基本上,您应该尝试更改您的清单,将您的活动声明为
com.myflavor.app
,并相应地安排您的打包,或者您可以使用相同的applicationId作为您的flavor

要使用Flavors,不需要为每个Flavors创建清单文件。只需将所有类放在src/mani/AndroidManifest.xml文件中。 如果您仍然希望使用这两个文件,请通过不覆盖“意图过滤器”块来删除冲突:


快速引用:

在构建过程中,清单合并过程存储一条记录 中每个合并事务的 模块中的manifest-merge--report.txt文件 生成/输出/日志文件夹。将为每个日志文件生成不同的日志文件 模块的构建变体


无法合并具有不同包名的清单。
我认为这就是问题所在。

只需从MyFlavor清单中删除
package=“com.myFlavor.app”

我认为AndroidManifest需要声明任何包含活动的类。每个Flavor都有自己的AndroidManifest。下面是谷歌自己关于清单文件应该如何合并的文档链接:-也许我理解错误,认为你的清单文件应该有活动类,但我在清单文件中没有看到它。你的活动类名是什么?您应该将它添加到应用程序标记中的清单文件中。我现在已经包含了我的风格的清单文件。。。那就是你想看的那个吗?或者你的意思是共享清单应该包含一个虚拟的acivity类?我还尝试在共享的androidmanifest文件中插入活动代码-没有区别。我还尝试了构建梯度中清单文件的“硬编码”路径。好的,我把所有我能做的都放到主清单中。但是清单文件中的“包”呢?(我的问题是,我认为合并似乎不起作用,因为我可以看到它们没有正确地合并。但是,我仍将尝试按照您的建议进行合并,并向您报告)我假设“提供者”条目仍然属于Flavor清单。但是我如何处理像这样的信息呢?android:theme=“@style/…”我曾希望我可以简单地覆盖/合并每种风格中的android清单?尝试了很多不同的方法,虽然某些组合可能会起作用,但我接获如下运行时错误:“无法启动活动组件信息{com.myflavor.app/com.shared.app.SharedMain}”:java.lang.NullPointerException”。我想有些事情出了差错。在过去,我在我的应用程序之间复制粘贴的代码,所以我知道它们单独工作。我将继续尝试从“manifest merge--report.txt”可以看到它完全忽略了味道的AndroidManifest.xml(在gradle中定义)-这支持我自己的发现,Android Studio忽略了它。请在模块构建/输出中显示manifest-merge--report.txt文件中的错误日志
applicationId "com.myflavour.app"
<activity android:name="com.shared.app.SharedMain"
    android:label="@string/MicMainName" >
<intent-filter>
  <action android:name="android.intent.action.MAIN" />
  <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>