问题标签 [android-flavors]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
49 浏览

java - 如何在风味级别上一次定义多个属性

所以我有一个三选项菜单,它可以(在风味层面上)显示其中一个选项(不管是哪一个)、两个选项、三个选项或不显示。设置属性的最佳方法是什么,我可以在其中定义每种风味的可见选项?我已经boolean为每个选项设置了标志,但稍后可能需要更多选项,我最终会拥有很多标志。这让我觉得这里可能有更好的方法。就像是

但是,如果我以任何习惯这样做Class,我应该如何获得options每种口味?

编辑:

感谢@deHaar,他发现有一种方法可以以编程方式检查正在运行的风味,并通过这种方式立即设置适当的属性。

这是目前最干净的解决方案。如果其他人知道更好,更干净的方法,我很想看看它!

0 投票
1 回答
437 浏览

android - 发布带有风味的 android 库

是否可以发布具有风味的 android 库?我通常用来发布库的 jitpack 的初始测试失败了。谁能指出我这样的设置的工作示例?

让口味在一个项目中本地工作 - 但发布似乎是一个问题。

0 投票
1 回答
791 浏览

android - 手动创建的风味资源未正确构建

我有一个奇怪的问题。我已经找到了解决问题的方法,但是我很好奇为什么当我手动尝试创建风味的资产文件夹时它不起作用。

所以我想在一个已经包含一些风格的现有 Android 项目中添加一个新的 Flavor。我进入了应用程序级别的 build.gradle文件并添加了新的风格。在这个例子中,我添加Flavor_Two

然后我手动进入我的文件资源管理器并创建了资产文件夹和文件: "/app/src/Flavor_Two/res/values/strings.xml"
"/app/src/Flavor_Two/res/mimap-hdpi/icon.png"

构建风味时,它不使用 Flavor_Two 资产,而是使用默认值,即com.fancyapp.APP_NAME不是com.fancyapp.two. 该应用程序崩溃是因为它还在通过 PackageName 查找本地数据库,而PackageName应该是com.fancyapp.two,而是找到com.fancyapp.APP_NAME.

我想知道我是否删除了手动创建的文件夹Flavor_Two,而是通过 Android Studio 的菜单"File > New > Android Resource Directory"并选择 myFlavor_Two作为Source SetValues作为Resource Type创建"/app/src/Flavor_Two/res/values"文件夹和父文件夹的文件夹。它与我之前手动创建的文件夹名称相同。然后我复制了strings.xml文件。我只需要通过 Android Studio 的菜单创建初始文件夹;我可以复制我之前使用过的“mimap-hdpi”文件夹,并且味道会正确构建。

我的问题是:
为什么 Android Studio 和 Gradle 看不到我手动创建的文件夹,如果我以后想手动执行所有操作,我还需要通过菜单制作文件夹做什么。

谢谢,如果有人有任何见解。


Android Studio 版本:3.1.3
Gradle Build 版本:3.1.3
Buildtools 版本:27.0.3
编译 SDK 版本:23
操作系统:Windows 10

0 投票
2 回答
10392 浏览

android - 风味 - 未找到与包名称匹配的客户端

Gradle的如下:

这是我的三个项目: 在此处输入图像描述

但是得到我下面的错误:

0 投票
2 回答
280 浏览

android - 仅适用于风味的方法和类

说我有免费/付费的味道。

我想调用checkSubscription()付费功能的方法。该方法中引用的类仅可用于付费风味,因为我已将它们放在不同的模块中,该模块仅针对付费风味进行编译。

以上可能吗?,因为当我运行免费风味应用程序时,这不应该给classNotFoundException. 请指导我。

编辑

是的,我知道我可以在 Java 中以编程方式检查我的风格,比如

或通过定义一个buildConfigField.

我解释得更好

  • 我的课程Example.java在模块PaidLibrary中,而PaidLibrary仅针对付费风味进行编译。
  • 现在我有一个类ActivityExample.java,我已经在其中导入了Example.class
  • 我在使用这个之前检查了当前的风格Example.java,但是这个会创建classNotFoundException因为ActivityExample.java包含导入和使用Example.java
  • 所以这是我的问题,即如何为可用于付费口味的课程编码?
0 投票
1 回答
80 浏览

android - 开发应用程序免费和付费版本的正确方法

我有一个具有免费功能和付费功能的应用程序。

假设一个活动,在免费版本中可以执行操作A,操作B,并且有一个免责声明,为了解锁操作C,用户必须购买完整版。这个活动也有广告。

相同的活动,在付费版本中,具有相同的操作 A、相同的操作 B,当然还有解锁的操作 C。此活动没有广告。

现在,我读到管理应用程序的免费和付费版本的正确方法是创建 2 种风格,以便具有类似于以下的结构: 风味结构

我主要将应用程序的“共享”部分放在哪里,然后将唯一免费的部分放在“免费”风格中,将唯一付费部分放在“付费”风格中。但是之前描述的活动呢?如何在两种风格之间共享此活动(及其功能),并根据安装的应用程序版本显示或不显示操作 C 和广告?我不认为(也不明白这一点)我需要将此活动放在免费和付费版本中,因为我不想在添加该活动的代码时编写 2 次代码,但是,而是共享两个版本中都存在的代码。

当然,我会将唯一付费功能放在付费版本中。

0 投票
1 回答
79 浏览

android - 来自另一个 applicationId 风格的 Gradle 变量

我需要构建一个使用风味创建的应用程序并创建一个指向另一种风味的applicationId的动态变量(因为内部库的代码使用其他应用程序的 applicationId),但我不知道该怎么做。

这是示例代码:

当我使用 Build Variant 进行编译时:ClientANatureYDebug ,最终的applicationIdcom.sample.mycompany.AYdev

我想要一个带有 buildConfigField 的动态变量(或在 Java 中检索新变量的其他东西),它是com.sample.mycompany.AXdev

我想得到最终的 applicationId 并将当前自然编译维度的 applicationIdSuffix 替换为 .X 并在新变量中获取结果但我不知道如何。你能帮助我吗 ?

0 投票
1 回答
206 浏览

java - 来自库/基础的 Android 覆盖文件

我制作了一个项目,其中我将我的源代码作为基础,并使每个客户端的其他模块依赖于我们称之为库的基础源代码。

这些模块依赖于我们的基本代码。他们所做的只是BaseMainActivityMainActivity模块开始。休息由BaseMainActivity

所以这里是一个结构描述如下

  • Client1 ---> 拥有自己的 res 文件夹、主文件夹和 gradle/manifest 文件
  • Client2 ---> 拥有自己的 res 文件夹、主文件夹和 gradle/manifest 文件
  • Client3 ---> 拥有自己的 res 文件夹、主文件夹和 gradle/manifest 文件
  • BaseProject ---> 拥有自己的 res 文件夹、主文件夹和 gradle/manifest 文件

现在,我们的一位客户更改了一些要求。现在对于那个特定的客户端,我必须覆盖那个特定的 java 文件中的一些功能。我知道我已经在为每个客户用作生产和演示的口味概念。但这不符合我的标准。

请告诉我如何实现这一点。??如果我不清楚,请向我提问。

0 投票
2 回答
80 浏览

android - 如何修复“SQLite 无列异常”?

我正在开发一个在 SQLite 中保存登录用户信息的 android 应用程序。但我面临着奇怪的问题。在我的 DBHelper 类中创建表函数创建得很好,插入函数不会引发任何异常,但是当我尝试从我的 SQL Lite DB 检索数据时它会引发异常

没有这样的列:officer(Sqlite 代码 1):,编译时:Select * from User where userId=officer,(操作系统错误 - 2:没有这样的文件或目录)

我尝试多次更改数据库名称和版本,但没有任何效果。我试图从我的 android 设备中查看数据库文件,以确保我的表创建是否正常,但是当我在手机的 Android/data 文件夹中搜索时,所有应用程序包名称都显示在那里,但我的应用程序的包名称不存在。

我希望使用用户表和提到的列创建 SQLite DB。还需要在 Android Device 中查看 .db 文件。

0 投票
0 回答
29 浏览

maven - 如何在 Maven 中向 android 库添加不同的风格?

我创建了一个库,它与 maven 一起分发。现在我想添加新库作为依赖项,其大小超过 8 mb。

我想将该依赖项设为可选,这就是为什么我认为创建不同的库风格是正确的方式(可能是错误的,我会接受其他解决方案)但是,我搜索并发现我不能这样做与图书馆..

也许发生了一些变化,或者是否有不同的方式来实现对 library 的可选依赖,这应该由集成我的库的用户管理。我想保持相同的依赖名,以便只维护一个版本的 library

提前致谢 :)