Using build types in Gradle libraries to run same app that uses ContentProvider on one device

杀马特。学长 韩版系。学妹 提交于 2019-12-11 11:36:48

问题


I'm having the issue where my Android Content Provider is not being recognized in a separate build variant from an Android library. I've followed most of the ideas in: Using build types in Gradle to run same app that uses ContentProvider on one device

I also followed: http://www.kevinrschultz.com/blog/2014/03/23/using-android-content-providers-with-multiple-package-names/

When I try running the app, the parent application tries to import a java class from the FYC library listed in src/main/AndroidManifest.xml and doesn't recognize the class because of the .qa package name?

My library FYC.gradle file looks like this:

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

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

I commented out the content provider in main: src/main/AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.company.android.fyc"
    android:versionCode="1"
    android:versionName="1.0" >

<!--<provider-->
            <!--android:name=".models.listing.ListingProvider"-->
            <!--android:authorities="com.company.android.fyc.models.listing.listingprovider"-->
            <!--android:exported="false" />-->

</manifest>

src/prod/AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.company.android.fyc"
    android:versionCode="1"
    android:versionName="1">

    <application>

        <provider
            android:name=".models.listing.ListingProvider"
            android:authorities="com.company.android.fyc.models.listing.listingprovider"
            android:exported="false" />

    </application>
</manifest>

src/qa/AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.company.android.fyc"
    android:versionCode="1"
    android:versionName="1">

    <application>

        <provider
        android:name=".models.listing.ListingProvider"
        android:authorities="com.company.android.qa.fyc.models.listing.listingprovider"
        android:exported="false" />

    </application>
</manifest>

I tried another option and tried using a variable for the package name, but Gradle gave me an error that it didn't recognize $?

In AndroidManifest.xml, you can use ${packageName} like this:

    <!--<provider-->
        <!--android:name=".models.listing.ListingProvider"-->
        <!--android:authorities="${packageName}.fyc.models.listing.listingprovider"-->
        <!--android:exported="false" />-->

Does anyone have another recent work around for this issue? Thanks!

来源:https://stackoverflow.com/questions/24644274/using-build-types-in-gradle-libraries-to-run-same-app-that-uses-contentprovider

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!