Java 在Android studio中使用Flavors并-错误,选择了错误的AndroidManifest/未合并
我正在尝试设置Flavors,这样我就可以在同一个项目中构建共享相同代码的不同应用程序。。。但我不确定我做的是否完全正确 我在文件夹W:\android studio projects\sharedid中创建了一个名为com.sharedid.app的项目\ 为此,我有 (一) 在W:\android studio projects\sharedid\app\src\main中创建了AndroidManifest.xml,如下所示: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
<?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文件呢
参考链接我的理解基于:
我认为问题在于:
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>