【问题标题】:method and classes available only for a flavour仅适用于风味的方法和类
【发布时间】:2018-09-13 06:12:12
【问题描述】:

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

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

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

编辑

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

if (BuildConfig.BUILD_VARIANT.equals("Your flavor name")){
   //do something
}

或者通过定义一个buildConfigField

我解释得更好

  • 我的班级Example.java 在模块PaidLibrary 中,PaidLibrary 仅针对付费风格 编译。
  • 现在我有一个类ActivityExample.java,我在其中导入了Example.class
  • 我在使用Example.java 之前检查了当前的风格,但这会创建classNotFoundException,因为ActivityExample.java 包含Example.java 的导入和使用。
  • 所以这是我的问题,即如何为可用于付费风味的课程编码?

【问题讨论】:

  • 我不确定,如果您想查找已安装的版本是付费的还是免费的?如果是,您可以在 build.gradle 中创建一个 buildConfigField 作为您的风味定义中的参数,然后检索它们并在运行时检查它...
  • 这只是一个例子,我没有付费或免费的味道,我也可以知道当前的味道,但这与我的问题无关。
  • 我想可能在运行时你会发现你的风格并决定你是否必须调用 checksubscription 方法......也可以根据你的需要使用 Java 反射......在那里你可以创建一个模块而不是将其添加为依赖项..但获取Java类的相对路径并使用方法名称可以调用它..您需要一个示例来继续吗?
  • 另一种解决方案是在您的两种口味包目录中创建相同的类ActivityExample.javafree 风格中的类不得包含 Example.class
  • @ישואוהבאותך 是的,这可能是一个很好的解决方案。

标签: android android-flavors android-flavordimension


【解决方案1】:

尝试使用反射:

ClassLoader classLoader = YOUR_CLASS.class.getClassLoader();
Class specificClass = classLoader.loadClass("YOUR_CLASS_RELATIVE_PATH");
Object result;  //This is object as your method can return any datatype

Method method = specificClass.getMethod(methodName, ARGS_TO_YOUR_METHOD_IF_ANY.class); // if your arg is a custom class 
result = method.invoke(specificClass.newInstance(), ARGS_TO_YOUR_METHOD_IF_ANY)

【讨论】:

  • 我不能用这个。当应用程序以付费方式运行时,这不仅仅是类,而是实时实例。所以我需要与这些类实例进行交互。
  • 好的,继续尝试这个..如果这有帮助,请尝试投票这个答案,如果它真的有效,请不要忘记接受这个答案..
【解决方案2】:

不,这是不可能的,您必须提供Example.java 或使用Example.java 的活动以获取您的应用的付费和免费风格。当您生成具有免费风格的构建时,它将无法解析Example.java,从而导致编译时错误。您可以添加一个 mock/dummy/placeholder Example.java 来解决构建冲突。

【讨论】:

  • 人们已经提供了解决方案,而你说不可能。 :D
  • 大声笑,这些只是替代解决方法,不能解决您的确切问题
  • 有没有关系,解决方案不应该是替代品。无论如何,我们的目的应该得到解决。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-29
  • 2019-07-14
  • 1970-01-01
  • 2019-01-27
  • 2017-11-08
  • 2017-04-16
  • 1970-01-01
相关资源
最近更新 更多