Android风格具有不同的依赖关系和相同的类文件

时间:2015-10-27 12:35:24

标签: android gradle android-gradle android-productflavors android-proguard

我有两种不同风格的Android应用,精简版专业版。在应用程序中,我有一个名为 customFragment.java 的类,它包含在main中(在flavor之间没有区别)并且还包括以下代码:

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'
}

我描述的类对于这两种风格都是相同的(因此在主文件夹中),因为它非常大并且我不想在两种风格中复制代码。 pro 风格成功构建,但 lite 风格显示错误,因为我也不导入 lite 风格的依赖项。

我看到的一个解决方案是将lockpattern库添加到两种风格中,然后使用proGuard从 lite 风格中删除它。虽然我相信这可行,但它可能不是最顺畅的选择。当然,我也可以简单地忽略 lite 风格中未使用的库的开销。

你会如何解决这个问题?我已经搜索了stackoverflow很长一段时间但没有找到任何答案,所以几年来我第一次决定注册并提出问题。

1 个答案:

答案 0 :(得分:1)

Lite版本没有编译,因为java无法找到LockPatternActivity。为此,您可以使用以下解决方案。

你需要有一个风格专业

的课程
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()相同的类。

public final class LockPatternHelper {
    private LockPatternHelper() {}

    public static void showLockPattern() {}
}

在此之后,您可以从 customFragment.java

中调用 LockPatternHelper.showLockPattern()

每种口味都会使用它的助手,精简版版本不会包含不必要的库。