gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 06:26:10 25 4
gpt4 key购买 nike

我有两个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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com