当前位置: 首页 > 知识库问答 >
问题:

使用Gradle中的构建类型在一个设备上运行使用ContentProvider的相同应用程序

程谦
2023-03-14

我已经设置了Gradle添加包名称后缀到我的调试应用程序,这样我可以有我正在使用的发布版本和调试版本在一个电话。我引用的是:http://tools.android.com/tech-docs/new-build-system/user-guide#toc-build-types

我的build.gradle文件如下所示:

...
android
{
    ...
    buildTypes
    {
        debug
        {
            packageNameSuffix ".debug"
            versionNameSuffix " debug"
        }
    }
}
Failure [INSTALL_FAILED_CONFLICTING_PROVIDER]

我看到了一个解决这个问题的可能性。如果我理解正确的话,您应该能够指定不同的文件在构建时使用。然后,我应该能够将不同的权限放在不同的资源文件中(并且从清单中将权限设置为字符串资源),并告诉Gradle使用不同的资源进行调试构建。有可能吗?如果是的话,那么任何关于如何实现这一点的提示都将是很棒的!

或者可以直接使用Gradle修改清单?任何关于如何在一个设备上使用ContentProvider运行相同应用程序的其他解决方案都是受欢迎的。

共有1个答案

谈萧迟
2023-03-14

现有的答案没有一个令我满意的,尽管自由离我很近。我就是这么做的。首先,目前我正在与以下人员合作:

  • Android Studio测试版0.8.2
  • 分级插件0.12.+
  • 等级1.12

我的目标是使用相同的ContentProvider在同一设备上运行Debug版本和Release版本。

buildTypes {
    debug {
        applicationIdSuffix ".debug"
    }
}
<provider
    android:name="com.example.app.YourProvider"
    android:authorities="${applicationId}.provider"
    android:enabled="true"
    android:exported="false" >
</provider>

在您的代码集中,可以在实现中任何需要的地方使用的authority属性:

public static final String AUTHORITY = BuildConfig.APPLICATION_ID + ".provider";

提示:在buildconfig.package_name之前

我将再次从当前设置开始:

    null
    null

作为资源的另一种选择,您可以创建单独的buildType或flavour目录,并覆盖其中的XML或值。然而,我不打算在下面的示例中使用它。

在build.gradle文件中添加以下内容:

defaultConfig {
    resValue "string", "your_authorities", applicationId + '.provider'
    resValue "string", "account_type", "your.syncadapter.type"
    buildConfigField "String", "ACCOUNT_TYPE", '"your.syncadapter.type"'
}

buildTypes {
    debug {
        applicationIdSuffix ".debug"
        resValue "string", "your_authorities", defaultConfig.applicationId + '.debug.provider'
        resValue "string", "account_type", "your.syncadapter.type.debug"
        buildConfigField "String", "ACCOUNT_TYPE", '"your.syncadapter.type.debug"'
    }
}

您将在BuildConfig.java类中看到结果

public static final String ACCOUNT_TYPE = "your.syncadapter.type.debug";
<?xml version="1.0" encoding="utf-8"?>
<resources>

    <!-- Automatically generated file. DO NOT MODIFY -->
    <!-- Values from default config. -->
    <item name="account_type" type="string">your.syncadapter.type.debug</item>
    <item name="authorities" type="string">com.example.app.provider</item>

</resources>
<?xml version="1.0" encoding="utf-8"?>
<account-authenticator xmlns:android="http://schemas.android.com/apk/res/android"
                       android:accountType="@string/account_type"
                       android:icon="@drawable/ic_launcher"
                       android:smallIcon="@drawable/ic_launcher"
                       android:label="@string/app_name"
/>
<?xml version="1.0" encoding="utf-8"?>
<sync-adapter xmlns:android="http://schemas.android.com/apk/res/android"
              android:contentAuthority="@string/authorities"
              android:accountType="@string/account_type"
              android:userVisible="true"
              android:supportsUploading="false"
              android:allowParallelSyncs="false"
              android:isAlwaysSyncable="true"
        />

提示:自动完成(Ctrl+Space)对这些生成的资源不起作用,所以您必须手动键入它们

 类似资料:
  • 问题内容: 我正在尝试使用Gradle构建相对简单的JavaFX应用程序。但是,我不知道该怎么做。 我是Gradle的新手,对于简单的(非javafx)项目,我已经成功使用了插件,并构建和打包了库和命令行应用程序。 但是,关于JavaFX,我完全陷入困境。我已经阅读了这篇文章,该文章建议使用该插件,但是我只能找到该插件的源代码,但是没有关于如何实际使用它的文档(在文章中,他们只是从远程URL应用它

  • 我试图使用Gradle构建一个相对简单的JavaFX应用程序。但是,我完全不知道该怎么做。 我对Gradle比较陌生,对于简单的(非JavaFX)项目,我已经成功地使用了插件和来构建和打包库和命令行应用程序。 然而,当涉及到JavaFX时,我完全被卡住了。我读过这篇文章,其中建议使用插件,但是我只能找到这个插件的源代码,而没有关于如何实际获取它和使用它的文档(在文章中,他们只是从远程URL应用它,

  • 包org.andengine.ui.activity; 导入org.andEngine.BuildConfig; 导入org.andEngine.Audio.Music.MusicManager; 导入org.andEngine.Engine.Engine.Engine.Engine.Engine.Engine.Engine.Engine.Engine.Engine.Engine.Engine.E

  • 我是Eclipse java、Gradle和JavaFX新手。最近我正在尝试用gradle Project编写一个javafx应用程序。以下是我想提供的各种细节。 Javafx SDK版本和位置 Scene Builder版本和位置 ui.fxml: Build.Gradle 我怀疑这里有一些问题,因为当我运行gradle项目时,我不能运行它。我只能建造它。 当我运行这个时,我得到了相当多的错误。

  • 问题内容: 我正在尝试从build.gradle文件中运行Groovy类。我遵循使用指南中的指示,但是出现错误。 构建文件为: 常规类很简单: 但是,当我尝试运行gradlew编译fooTask时,出现以下错误: 无法解析类groovyClass 知道为什么吗? 谢谢 问题答案: 如果要从构建中引用它,则需要添加该类(而不是在简单的Exec任务中)。给定此目录结构: 在哪里: 并且是: 然后,运行

  • 我正在使用Windows8。我正在尝试在设备上运行应用程序。找不到我的设备,设备USB调试已启用。此外,我已经安装了相同的驱动程序使用管理我也安装了谷歌USB驱动程序包。但仍然找不到该设备。 拜托,有人能帮忙吗