标签: manifest-merging

可以在FileProvider中使用多个权限吗?

背景

我维护一个库,其核心功能包括以编程方式捕获的屏幕截图与外部电子邮件应用程序共享.

我用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

34
推荐指数
1
解决办法
1万
查看次数

如何使用新的清单合并(Android Studio和Gradle)?

背景

在过去,当Eclipse和ADT是Android开发的官方工具时,您可以在应用程序项目的" project.properties "中使用" manifestmerger.enabled = true " ,然后让它自动合并所有库的清单(我在这里发布了它).

这有时候很有效.它有很多奇怪的问题,我总是倾向于避免使用它,并手动将所需内容放入主清单文件中.

问题

在2014年的某个地方,谷歌宣布新的Android-Studio(我认为0.1)和Gradle将允许您精确选择如何合并库的组件.

但是,新指令(链接在这里)非常复杂,我真的(真的)试图了解如何使用它们,也没有找到如何使用它们的示例.

这不是我什么都不懂,但我不确定我是否理解得很好.

我发现了什么

从好的方面来说,我发现合并是完全自动完成的,所以如果你在库的清单上有一个BroadcastReceiver(当然还有一个类),它将被添加到使用它的app的项目中.

这个问题

我不能简单地问一切都要解释.我认为问这些问题就足够了:

  1. 如何选择要自动合并的哪些应用程序组件(权限,活动......)?

  2. 如何指定覆盖应用程序组件(库的)属性(在应用程序的项目上)?例如活动的主题?

  3. 有没有办法完全禁用清单文件的自动合并?

  4. 存储库中的依赖项清单会发生什么?他们合并了吗?

  5. 是否有关于这个新功能(对我而言是新的)功能的教程/样本/视频?

  6. 使用自动合并时有什么我应该注意的事项吗?

我希望这些问题具有足够的代表性,足够的信息,但对于那些知道的人来说却不难回答.

android android-manifest android-studio manifest-merging

23
推荐指数
1
解决办法
2万
查看次数

在库清单中使用$ {applicationId}

我正在开发一个使用内部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值?

android gradle manifest-merging

20
推荐指数
2
解决办法
1万
查看次数

清单合并:有可能看到由此产生的混合清单吗?

我有一个带有巨大清单的库模块.此外,我有一个应用程序模块,其中包含一个非常类似于我的库清单但包名称更改的巨大清单.现在我希望看到由此产生的Manifest Merger流程的混合清单.

我怎么能看到它?

android android-manifest android-studio android-gradle-plugin manifest-merging

17
推荐指数
3
解决办法
4806
查看次数

Android Studio在我的清单上添加了android.permission.USE_CREDENTIALS

当我编译我的应用程序以进行发布时,一个名为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

7
推荐指数
1
解决办法
9717
查看次数

applicationId显示占位符,表示多个构建版本无法正常工作

我正在修改当前的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

7
推荐指数
1
解决办法
6810
查看次数

仅限Gradle的解决方案,用于根据Build Variant修改App名称

我正在尝试修改我的gradle文件以允许基于Flavor和的我的应用程序的不同名称Build Type.到目前为止,我已成功通过Android Gradle插件文档Flavor使用Manifest Merging技术进行基于命名的简洁

当前

这些是我的主屏幕上的应用程序的名称,包括我的debugrelease构建.

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

5
推荐指数
2
解决办法
2344
查看次数

Instant Apps功能模块中的资源合并

在Instant App功能模块中,我正在导入aar(使用来自maven存储库的"api"语句),其中包含清单中的活动声明和此声明中使用的"样式"资源.由于在基本要素项目中找不到样式资源,因此生成的清单合并失败.似乎功能模块中导入的资源不包含在基本功能模块中.

由于插件仍处于alpha模式,我不确定我是否做错了,如果它是一个bug或预期的行为.

有什么建议吗?

android manifest-merging android-instant-apps

5
推荐指数
1
解决办法
385
查看次数

Android Studio-Instant App-清单合并错误

我的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)

比起我无法使用“默认活动”启动我的应用程序,我只能使用“项目构建配置”中选择的“无活动”来启动它。如何解决这个合并问题?

android manifest-merging android-instant-apps

5
推荐指数
1
解决办法
646
查看次数

任务 :app:processDebugmanifest 执行失败

错误:任务“:app:processDebugManifest”执行失败。

com.android.manifmerger.ManifestMerger2$MergeFailureException: org.xml.sax.SAXParseException; 行号:1;列数:1;文件提前结束。

android android-manifest manifest-merging

4
推荐指数
1
解决办法
7386
查看次数

找不到manifest-merger.jar

找不到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)

android manifest android-manifest manifest-merging

1
推荐指数
1
解决办法
3619
查看次数