android - 仅针对一种产品 flavor 添加Android AppWidget

标签 android gradle android-appwidget android-productflavors

我有两个gradle product flavors:用于生产和用于舞台服务器。

productFlavors {
        stage {
            // stage specific stuff
        }
        production {
            // production only
        }
    }

另外我有一个AppWidget必须现在只能上台。我想我应该将AppWidgetProvider隐藏在 list 中:
<receiver
    android:name=".appwidget.AppWidgetProvider"
    android:label="@string/app_name">
    <intent-filter>
        <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
    </intent-filter>
    <meta-data
       android:name="android.appwidget.provider"
       android:resource="@xml/appwidget_info" />
</receiver>

但是,仅凭产品味道我该怎么做?还是这里有另一种方法?

最佳答案

因此,我们将在示例产品中提供以下示例软件包,以便在gradle产品风格内进行生产和升级。

productFlavors {
        production {
            packageName "x(path).x(path).gradleexample"
        }

        staging {
            packageName "x(path).x(path).gradleexample.staging"
        }
    }

这是您的文件夹结构的一个示例,其中某些可能适用于您的项目,也可能不适用于您的项目,但应该让您了解所需的内容。
├── main
│   ├── AndroidManifest.xml
│   ├── ic_launcher-web.png
│   ├── java
│   │   └── x(path)
│   │       └── x(path)
│   │           └── gradlebuildexample
│   │               └── MainActivity.java
│   └── res
│       ├── drawable-hdpi
│       │   └── ic_launcher.png
│       ├── drawable-mdpi
│       │   └── ic_launcher.png
│       ├── drawable-xhdpi
│       │   └── ic_launcher.png
│       ├── drawable-xxhdpi
│       │   └── ic_launcher.png
│       ├── layout
│       │   └── activity_main.xml
│       ├── menu
│       │   └── main.xml
│       ├── values
│       │   ├── dimens.xml
│       │   ├── strings.xml
│       │   └── styles.xml
│       ├── values-v11
│       │   └── styles.xml
│       └── values-v14
│           └── styles.xml
├── production
│   └── java
│       └── x(path)
│           └── x(path)
│               └── gradlebuildexample
│                   └── Constants.java
└── staging
    ├── java
    │   └── x(path)
    │       └── x(path)
    │           └── gradlebuildexample
    │               └── Constants.java
    └── res
        ├── drawable-hdpi
        │   └── ic_launcher.png
        ├── drawable-mdpi
        │   └── ic_launcher.png
        ├── drawable-xhdpi
        │   └── ic_launcher.png
        ├── drawable-xxhdpi
        │   └── ic_launcher.png
        └── values
            └── string.xml

现在要清楚,在生产和登台中的字符串结果集xml中,值-> string.xml中必须包含适合 list 的以下值,这将在下面进行描述。

所以如下所示
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="receiver">false</string>
</resources>

根据我目前对您的 list 的了解,它看起来像这样
<receiver
    android:name=".appwidget.AppWidgetProvider"
    android:label="@string/app_name"
    android:enabled="@string/receiver">
    <intent-filter>
        <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
    </intent-filter>
    <meta-data
       android:name="android.appwidget.provider"
       android:resource="@xml/appwidget_info" />
</receiver>

这样就可以了,但是如果您从我的第三条评论中看到,一种更好,更简单的解决方案是为每个构建阶段使用不同的 list ,因为您可能需要的变更不止一个。因此,下面我还将提供解决方法,您可以推断出我提供的内容。

在gradle中使用source set可以为每个 list 指定不同的构建路径,如下所示
sourceSets {

        main {
            manifest.srcFile 'src/main/AndroidManifest.xml'
            res.srcDirs = ['src/main/res']
        }

        debug {
            manifest.srcFile 'src/main/debug/AndroidManifest.xml'
            res.srcDirs = ['src/main/debug/res']
        }

        release {
            manifest.srcFile 'src/main/release/AndroidManifest.xml'
            res.srcDirs = ['src/main/release/res']
        }
}

关于android - 仅针对一种产品 flavor 添加Android AppWidget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30891969/

相关文章:

java - 使用 ThinkFree PDF Viewer 显示原始 PDF 数据的 Base64 编码字符串

Android:在填充 ListView 元素后执行一些操作

regex - gradle war重命名文件常规exp不起作用

android - 那里有 AppWidgetHost 教程吗?

Android 主屏幕小部件神秘地无法接收触摸事件

android - Appium:为什么我在提供了所有相关值后仍会在日志中看到 desiredcapabilties 错误?

java - Android:每次我想登录时是否打开文件资源

gradle - 如何在Gradle中串联多个文件?

android - "The most simple Android project has the following build.gradle"

android - 如何在 appwidgetprovider 中找到 View ID?