【问题标题】:Android Gradle product flavor fails in child libraryAndroid Gradle 产品风格在子库中失败
【发布时间】:2014-09-02 11:18:45
【问题描述】:

这个问题应该可以解决我需要更新子库内容提供者的另一个问题:Using build types in Gradle libraries to run same app that uses ContentProvider on one device

我在根应用程序中有一个产品风味,它成功地更改了包名称,因此我可以部署不同版本的应用程序。当我尝试在子库中添加相同的产品风格时,构建失败,因为根应用程序无法加载从子库引用的 java 类,因为现在包名称已更改?我认为产品风格不会影响 java 类包结构?

ATCApp.gradle 根应用程序

...
dependencies {
...
compile project(':libraries:FYC')
...
}

...
android
{
    ...
    productFlavors
    {
        prod {
           packageName "com.company.android"
        }

        qa {
           packageName "com.company.android.qa"
        }
    }
}

FYC.gradle 子库

...
android
{
    ...
    productFlavors
    {
        prod {
           resValue "string", "authority", "com.company.android.fyc.models.listing.listingprovider"
        }

        qa {
           resValue "string", "authority", "com.company.android.qa.fyc.models.listing.listingprovider"
        }
    }
}

在子 FYC 库中添加上述产品风味会导致根应用程序抛出错误:

/src/main/java/com/company/android/HomeBroadcastReceiver.java:7: com.company.android.fyc.controllers 包不存在 导入 com.company.android.fyc.controllers.FYCHomePagerActivity;

感谢您的帮助!

【问题讨论】:

    标签: android gradle android-library android-productflavors


    【解决方案1】:

    我很确定您不能对风味(又名链式风味)进行依赖,因为 Gradle 无法表达这种事情。您的根项目可以有different dependencies based on the flavor,但这些依赖项本身不能是显式风格。子项目的输出应该是可预测的和一致的。

    【讨论】:

    • 哇,太糟糕了,因为这样我就无法根据产品风格调整内容提供者,而且每当我需要新的 QA 版本时,我都必须手动更改内容提供者。
    • 我相信您可以将特定于风味的逻辑提取到您的父项目中,并将其传递到您的库项目中。
    • 回到解决我原来的问题:stackoverflow.com/questions/24644274/…。我在库项目中有一个 contentprovider,但是当我运行 QA 版本的应用程序时,我必须更改提供程序的包名。
    猜你喜欢
    • 2013-10-01
    • 1970-01-01
    • 2023-03-17
    • 2014-11-10
    • 1970-01-01
    • 1970-01-01
    • 2016-07-11
    • 2016-04-08
    • 1970-01-01
    相关资源
    最近更新 更多