Android Flavors, ContentProviders, SyncAdapters и AccountManager

Дефинирах няколко вкуса и buildTypes за моето приложение за Android

productFlavors {
    X {
        applicationId = "com.x.xxxx"
    }
    Y {
        applicationId = "com.y.yyyy"
    }
}

buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard_rules.txt'                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
    }

    debug {
        applicationIdSuffix ".debug"
    }
}

Това върши работата по създаването на различни комбинации от аромати/buildType.

Сега, за да се уверя, че ContentProviders работи и не получавам грешка Failure [INSTALL_FAILED_CONFLICTING_PROVIDER], промених препратките android:authorities="${applicationId}" и AUTHORITY в кода на BuildConfig.APPLICATION_ID.

Това кара ContentProvider да работи добре, т.е. не извежда грешка, когато инсталирам два различни типа на един и същ телефон. Това ми позволява да ги инсталирам.

Следващата стъпка е къде е грешката. Използвам SyncAdapter и AccountManager, за да контролирам няколко неща. Модифицирах ACCOUNT_TYPE, за да използвам APPLICATION_ID. Поради проблема с това, че gradle не може да използва ${applicationId} в неманифестни xml ресурсни файлове, създадох различна структура на директория за всеки вариант и копирах syncadapter.xml и authenticator.xml със съответните низове authority и account type.

Също така изпробвах техниката, описана в този блог - http://blog.jensdriller.com/android-gradle-workaround-for-missing-placeholder-support-in-resource-files/

И най-гласуваните отговори на Използване на типове компилация в Gradle за стартиране на едно и също приложение, което използва ContentProvider на едно устройство, но нещата изглежда не работят.

Някой успял ли е да накара това да работи наскоро?


person Pratik Mandrekar    schedule 22.04.2015    source източник