Android 具有不同依赖项和相同 class 文件的风格
Android flavors with different dependencies and same class file
我的 Android 应用程序有两种不同的风格,lite 和 pro。在应用程序中,我有一个名为 customFragment.java 的 class 包含在 main 中(不同口味之间没有区别)并且还包括以下代码:
import haibison.android.lockpattern.LockPatternActivity;
private void showLockPattern() {
if (BuildConfig.IS_VERSION_PRO) {
Intent intent = new Intent(LockPatternActivity.ACTION_VERIFY_CAPTCHA, null, this, LockPatternActivity.class);
startActivityForResult(intent, PATTERN_ID);
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PATTERN_ID && resultCode == Activity.RESULT_OK) {
Log.i("App", "OK!");
}
}
并且在 app.gradle 中,我包含了仅用于专业风格的 LockPattern 库:
dependencies {
proCompile 'com.github.haibison:android-lockpattern:6.0.0'
}
class 我在两种版本中描述的相同(所以在主文件夹中),因为它很大,我不想在两种版本中重复代码。 pro 风格构建成功,但 lite 风格显示错误,因为我没有导入 lite[= 的依赖项32=] 味道也是如此。
我看到的一个解决方案是将 lockpattern 库添加到两种版本中,然后使用 proGuard 将其从 lite 版本中删除。虽然我相信这可能有效,但它可能不是最顺利的选择。当然,我也可以简单地忽略 lite 风格中未使用的库的开销。
你会如何解决这个问题?我在 Whosebug 上搜索了很长时间,但没有找到任何答案,所以几年来我第一次决定注册并提出问题。
Lite 版本未编译,因为 java 找不到 LockPatternActivity。为此,您可以使用以下解决方案。
你需要 class 味道 pro
public final class LockPatternHelper {
private LockPatternHelper() {}
public static void showLockPattern() {
Intent intent = new Intent(LockPatternActivity.ACTION_VERIFY_CAPTCHA, null, this, LockPatternActivity.class);
startActivityForResult(intent, PATTERN_ID);
}
}
在 flavor lite 中它应该与空方法 showLockPattern().
相同 class
public final class LockPatternHelper {
private LockPatternHelper() {}
public static void showLockPattern() {}
}
在此之后,您可以从 customFragment.java
调用 LockPatternHelper.showLockPattern()
每个 flavor 都会使用它的助手,lite 版本不会包含不必要的库。
我的 Android 应用程序有两种不同的风格,lite 和 pro。在应用程序中,我有一个名为 customFragment.java 的 class 包含在 main 中(不同口味之间没有区别)并且还包括以下代码:
import haibison.android.lockpattern.LockPatternActivity;
private void showLockPattern() {
if (BuildConfig.IS_VERSION_PRO) {
Intent intent = new Intent(LockPatternActivity.ACTION_VERIFY_CAPTCHA, null, this, LockPatternActivity.class);
startActivityForResult(intent, PATTERN_ID);
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PATTERN_ID && resultCode == Activity.RESULT_OK) {
Log.i("App", "OK!");
}
}
并且在 app.gradle 中,我包含了仅用于专业风格的 LockPattern 库:
dependencies {
proCompile 'com.github.haibison:android-lockpattern:6.0.0'
}
class 我在两种版本中描述的相同(所以在主文件夹中),因为它很大,我不想在两种版本中重复代码。 pro 风格构建成功,但 lite 风格显示错误,因为我没有导入 lite[= 的依赖项32=] 味道也是如此。
我看到的一个解决方案是将 lockpattern 库添加到两种版本中,然后使用 proGuard 将其从 lite 版本中删除。虽然我相信这可能有效,但它可能不是最顺利的选择。当然,我也可以简单地忽略 lite 风格中未使用的库的开销。
你会如何解决这个问题?我在 Whosebug 上搜索了很长时间,但没有找到任何答案,所以几年来我第一次决定注册并提出问题。
Lite 版本未编译,因为 java 找不到 LockPatternActivity。为此,您可以使用以下解决方案。
你需要 class 味道 pro
public final class LockPatternHelper {
private LockPatternHelper() {}
public static void showLockPattern() {
Intent intent = new Intent(LockPatternActivity.ACTION_VERIFY_CAPTCHA, null, this, LockPatternActivity.class);
startActivityForResult(intent, PATTERN_ID);
}
}
在 flavor lite 中它应该与空方法 showLockPattern().
相同 classpublic final class LockPatternHelper {
private LockPatternHelper() {}
public static void showLockPattern() {}
}
在此之后,您可以从 customFragment.java
调用 LockPatternHelper.showLockPattern()每个 flavor 都会使用它的助手,lite 版本不会包含不必要的库。