我的Android Studio即时应用项目遇到问题。
如果我在/ app目录中选择Manifest.xml
,然后选择Merger Manifest,则出现这样的错误:
Merging Errors: Error: Attribute provider#android.arch.lifecycle.ProcessLifecycleOwnerInitializer@authorities value=(com.theminte.TheMinte.lifecycle-trojan) from AndroidManifest.xml:10:15-75 is also present at AndroidManifest.xml:25:13-68 value=(com.theminte.TheMinte.app.lifecycle-trojan). Suggestion: add 'tools:replace="android:authorities"' to <provider> element at AndroidManifest.xml:10:5-201 to override. app main manifest (this file), line 9
除了我无法使用“默认活动”启动我的应用程序外,我只能使用“项目构建配置”中选择“没有活动”来启动它。如何解决合并问题?
答案 0 :(得分:3)
我能够通过更改基本模块<manifest package = ${package}
中的manifest.xml
使其与项目的applicationId
相匹配来解决此问题。
看来,androidx.lifecycle:lifecycle-process:2.0.0
是androidx.lifecycle:lifecycle-extensions:2.0.0
的依赖项,它正在使用manifest.xml中定义的包将提供程序注入到基本模块的清单中。根据{{1}}中的提供者代码,看起来它应该是lifecycle-extensions/manifest.xml
中定义的applicationId
。提供者xml是:
build.gradle
我的基本模块中的合并清单显示了上面的提供程序,其中插入了一个与基本模块的<provider
android:name="androidx.lifecycle.ProcessLifecycleOwnerInitializer"
android:authorities="${applicationId}.lifecycle-process"
android:exported="false"
android:multiprocess="true" />
中的android:authorities
匹配的<manifest package:{package}
值,而不是{ {1}}。
在应用程序模块中,我看到提供程序被注入了应用程序manifest.xml
中列出的applicationId。由于现在有两个提供者具有相同的packageId
答案 1 :(得分:-2)
您为什么决定将功能和即时应用程序模块中的清单合并?在所有示例中,即时应用程序模块都具有唯一的Gradle构建脚本,因此没有任何源/资源/清单不会与其他功能模块合并。
必须在功能模块的清单中设置默认活动(例如,在基本功能清单中)