我维护一个库,其核心功能包括以编程方式捕获的屏幕截图与外部电子邮件应用程序共享.
我用a FileProvider
来完成这个,这意味着我的库的清单包含一个<provider>
标签:
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.bugshaker.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths" />
</provider>
Run Code Online (Sandbox Code Playgroud)
filepaths.xml
定义如下:
<paths>
<files-path path="bug-reports/" name="bug-reports" />
</paths>
Run Code Online (Sandbox Code Playgroud)
我的库的消费者有一个应用程序,它本身使用a FileProvider
来共享文件.我的期望是,如果使用应用程序使用以下清单<provider>
标记,则应该可以允许两个提供程序共享文件:
<provider
android:authorities="${applicationId}.fileprovider;${applicationId}.bugshaker.fileprovider"
android:exported="false"
android:grantUriPermissions="true"
android:name="android.support.v4.content.FileProvider"
tools:replace="android:authorities">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths"
tools:replace="android:resource" />
</provider>
Run Code Online (Sandbox Code Playgroud)
这个清单条目:
Provider
权限${applicationId}.fileprovider
(用于应用程序文件共享)和${applicationId}.bugshaker.fileprovider
(用于库文件共享);filepaths.xml
,其中包含应用程序生成的文件和库生成的文件的单独目录定义:<paths>
<external-path
name="redacted"
path="" />
<files-path
name="bug-reports"
path="bug-reports/" />
</paths>
Run Code Online (Sandbox Code Playgroud)
构建应用程序后,我们已确认生成的清单已使用这些更新的值替换了正确的节点.
但是,当使用此配置的应用程序组装(成功)并运行时,我们会看到启动时崩溃:
E: FATAL EXCEPTION: main
Process: com.stkent.bugshakertest, PID: 11636
java.lang.RuntimeException: Unable to …
Run Code Online (Sandbox Code Playgroud) android android-manifest android-contentprovider manifest-merging
在过去,当Eclipse和ADT是Android开发的官方工具时,您可以在应用程序项目的" project.properties "中使用" manifestmerger.enabled = true " ,然后让它自动合并所有库的清单(我在这里发布了它).
这有时候很有效.它有很多奇怪的问题,我总是倾向于避免使用它,并手动将所需内容放入主清单文件中.
在2014年的某个地方,谷歌宣布新的Android-Studio(我认为0.1)和Gradle将允许您精确选择如何合并库的组件.
但是,新指令(链接在这里)非常复杂,我真的(真的)试图了解如何使用它们,也没有找到如何使用它们的示例.
这不是我什么都不懂,但我不确定我是否理解得很好.
从好的方面来说,我发现合并是完全自动完成的,所以如果你在库的清单上有一个BroadcastReceiver(当然还有一个类),它将被添加到使用它的app的项目中.
我不能简单地问一切都要解释.我认为问这些问题就足够了:
如何选择要自动合并的哪些应用程序组件(权限,活动......)?
如何指定覆盖应用程序组件(库的)属性(在应用程序的项目上)?例如活动的主题?
有没有办法完全禁用清单文件的自动合并?
存储库中的依赖项清单会发生什么?他们合并了吗?
是否有关于这个新功能(对我而言是新的)功能的教程/样本/视频?
使用自动合并时有什么我应该注意的事项吗?
我希望这些问题具有足够的代表性,足够的信息,但对于那些知道的人来说却不难回答.
我正在开发一个使用内部ContentProvider的SDK,我想在一些项目中使用这个SDK,并在库清单中声明它,所以我试过这个:
<provider
android:name=".core.MyContentProvider"
android:authorities="${applicationId}"
android:exported="false"/>
Run Code Online (Sandbox Code Playgroud)
会发生什么是$ {applicationId}被库的packageName替换而不是顶部的apk相关的applicationId ...
有没有办法确保启动 applicationId将被放置在android:authority值?
我有一个带有巨大清单的库模块.此外,我有一个应用程序模块,其中包含一个非常类似于我的库清单但包名称更改的巨大清单.现在我希望看到由此产生的Manifest Merger流程的混合清单.
我怎么能看到它?
android android-manifest android-studio android-gradle-plugin manifest-merging
当我编译我的应用程序以进行发布时,一个名为USE_CREDENTIALS的新权限正被添加到我的清单中.
<uses-permission android:name="android.permission.USE_CREDENTIALS"/>
Run Code Online (Sandbox Code Playgroud)
为什么?这个权限是什么?我在Android开发者指南上找不到任何关于它的官方信息!
谢谢
android android-manifest android-studio android-gradle-plugin manifest-merging
我正在修改当前的android项目,因此它可以安装在同一设备上,用于多种口味和构建配置.
的build.gradle:
{
// ...
defaultConfig {
applicationId "com.myapp"
manifestPlaceholders = [
manifestApplicationId: "${applicationId}",
onesignal_app_id: "xxxx",
onesignal_google_project_number: "xxxx"
]
// ...
}
productFlavors {
production {
applicationId "com.myapp"
// ...
}
dev {
applicationId "com.myapp.dev"
// ...
}
// ...
}
buildTypes {
release {
// ...
}
debug {
applicationIdSuffix ".debug"
// ...
}
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
AndroidManifest.xml:
<manifest ... >
<uses-permission android:name="${applicationId}.permission.C2D_MESSAGE" />
<permission
android:name="${applicationId}.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<!-- ... -->
<receiver
android:name="com.onesignal.GcmBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action …
Run Code Online (Sandbox Code Playgroud) android buildconfig gradle android-manifest manifest-merging
我正在尝试修改我的gradle文件以允许基于Flavor
和的我的应用程序的不同名称Build Type
.到目前为止,我已成功通过Android Gradle插件文档Flavor
使用Manifest Merging
技术进行基于命名的简洁
这些是我的主屏幕上的应用程序的名称,包括我的debug
和release
构建.
Flavor Debug App Name Release App Name
-------- -------------- ----------------
entity_1 App Name App Name
entity_2 App Name App Name
... ... ...
entity_2 App Name App Name
hub Hub Hub
Run Code Online (Sandbox Code Playgroud)
它很接近,但......
Flavor Debug App Name Release App Name
-------- -------------- ----------------
entity_1 App Name - Entity_1_name App Name
entity_2 App Name - Entity_2_name App Name
... ... ...
entity_n …
Run Code Online (Sandbox Code Playgroud) android android-productflavors manifest-merging android-build-type
在Instant App功能模块中,我正在导入aar(使用来自maven存储库的"api"语句),其中包含清单中的活动声明和此声明中使用的"样式"资源.由于在基本要素项目中找不到样式资源,因此生成的清单合并失败.似乎功能模块中导入的资源不包含在基本功能模块中.
由于插件仍处于alpha模式,我不确定我是否做错了,如果它是一个bug或预期的行为.
有什么建议吗?
我的Android Studio即时应用项目遇到问题。如果我Manifest.xml
在/ app目录中选择,然后选择合并清单,那么我会遇到这样的错误:
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
Run Code Online (Sandbox Code Playgroud)
比起我无法使用“默认活动”启动我的应用程序,我只能使用“项目构建配置”中选择的“无活动”来启动它。如何解决这个合并问题?
错误:任务“:app:processDebugManifest”执行失败。
com.android.manifmerger.ManifestMerger2$MergeFailureException: org.xml.sax.SAXParseException; 行号:1;列数:1;文件提前结束。
找不到manifest-merger.jar(com.android.tools.build:manifest-merger:26.1.0).在以下位置搜索:https: //jcenter.bintray.com/com/android/tools/build/manifest-merger/26.1.0/manifest-merger-26.1.0.jar
已经尝试过解决方案:在gradle 4.4升级后找不到manifest-merger.jar(com.android.tools.build:manifest-merger:26.1.2)错误但没有成功.
任何人都可以帮助我
我的支持库具有相同数量的版本
implementation 'com.android.support:appcompat-v7:27.0.2'
implementation 'com.android.support:cardview-v7:27.0.2'
implementation 'com.android.support:design:27.0.2'
implementation 'com.android.support:recyclerview-v7:27.0.2'
Run Code Online (Sandbox Code Playgroud)