Android 具有不同依赖项和相同 class 文件的风格

Android flavors with different dependencies and same class file

我的 Android 应用程序有两种不同的风格,litepro。在应用程序中,我有一个名为 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 版本不会包含不必要的库。