-1

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

我想调用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
  • 所以这是我的问题,即如何为可用于付费口味的课程编码?
4

2 回答 2

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)
于 2018-09-13T06:32:31.080 回答
1

不,这是不可能的,您必须提供Example.javaExample.java用于您的应用程序的付费和免费风格的活动。当您生成具有免费风格的构建时,它将无法解析Example.java,从而导致编译时错误。您可以Example.java为您的免费风格添加一个模拟/虚拟/占位符来解决构建冲突。

于 2018-09-13T06:43:13.463 回答