SORU
27 Mayıs 2013, PAZARTESİ


Kullanarak Gradle türleri bir cihazda ContentProvider kullanan aynı uygulamayı çalıştırmak için inşa

Gradle hata ayıklama benim app paket adı soneki eklemek için kurdum ve bir telefonda hata ayıklama sürümünü kullanıyorum bu sürüm var diye. Bu görüşlerine başvurdum: http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Types

Benim inşa.gradle dosyası bu gibi görünüyor:

...
android
{
    ...
    buildTypes
    {
        debug
        {
            packageNameSuffix ".debug"
            versionNameSuffix " debug"
        }
    }
}

Her şey benim app bir ContentProvider kullanmaya başlayana kadar gayet iyi çalışıyor. Anlıyorum:

Failure [INSTALL_FAILED_CONFLICTING_PROVIDER]

Bu iki uygulama (sürüm ve hata ayıklama) aynı ContentProvider otorite kayıt için olmuyor anladığım kadarıyla.

Bir ihtimal bunu çözmek için görüyorum. Eğer doğru anladıysam, oluştururken kullanmak için farklı bir dosya belirtmek gerekir. Sonra farklı kaynak dosyaları (ve dize kaynak olarak Tezahür set authority) farklı yetkili makamlara ve hata ayıklama derlemesi için farklı kaynak kullanmak için Gradle söylemek gerekir. Bu mümkün mü? Evet sonra bunu elde etmek için nasıl herhangi bir ipucu harika olurdu!

Ya da belki de olası doğrudan Bildirim kullanarak Gradle değiştirmek için mi? Aynı uygulamayı tek bir cihazda ContentProvider ile çalıştırmak için nasıl başka bir çözüm her zaman açığız.

CEVAP
20 Temmuz 2014, Pazar


Varolan cevaplar beni, ancak Özgürlük memnun hiçbiri yakındı. Bu onu nasıl yapıyorum? Öncelikle şu an çalışıyorum:

  • Studio Beta 0.8.2 Android
  • Gradle eklentisi da 0,12.
  • Gradle 1.12

BenimhedefDebug sürüm birlikte aynı cihaz üzerinde Release sürümü ile çalıştırmak için aynı ContentProvider kullanarak.


inşa.gradleuygulamanızın hata Ayıklama için ayarlanan sonek inşa:

buildTypes {
    debug {
        applicationIdSuffix ".debug"
    }
}

AndroidManifest.xmldosya ContentProvider: android:authorities özelliğini ayarlayın

<provider
    android:name="com.example.app.YourProvider"
    android:authorities="${applicationId}.provider"
    android:enabled="true"
    android:exported="false" >
</provider>

Senin içindekodihtiyaç duyulan her yerde kullanılabilir AUTHORITY emlak uygulamanızda ayarlayın:

public static final String AUTHORITY = BuildConfig.APPLICATION_ID   ".provider";

İpucu:Daha önce BuildConfig.PACKAGE_NAME

İşte bu! Bir cazibe gibi çalışır. Eğer SyncAdapter kullanıyorsanız okumaya devam edin!


SyncAdapter (14.11.2014) güncelleyin

Bir kez daha benim şu anki Kur ile başlayacağım:

  • Studio Beta 0.9.2 Android
  • Gradle eklentisi 0.14.1
  • Gradle 2.1

Eğer özelleştirmek istiyorsanız temelde, farklı için bazı değerleri build yapabilirsin oluşturur.gradle dosyası:

  • kullanınbuildConfigFieldBuildConfig.java sınıfından erişmek için
  • kullanınresValuekaynaklardan erişmek için örneğin@dize your_value/

Kaynaklar için alternatif olarak, buildType veya lezzet ayrı bir dizin oluşturmak ve onları içinde XMLs veya değerleri geçersiz kılabilirsiniz. Ancak, örnek olarak aşağıda kullanacağım.

Örnek


inşa.gradledosya aşağıdakileri ekleyin:

defaultConfig {
    resValue "string", "your_authorities", applicationId   '.provider'
    resValue "string", "account_type", "your.syncadapter.type"
    buildConfigField "String", "ACCOUNT_TYPE", '"your.syncadapter.type"'
}

buildTypes {
    debug {
        applicationIdSuffix ".debug"
        resValue "string", "your_authorities", defaultConfig.applicationId   '.debug.provider'
        resValue "string", "account_type", "your.syncadapter.type.debug"
        buildConfigField "String", "ACCOUNT_TYPE", '"your.syncadapter.type.debug"'
    }
}

Sonuçlar göreceksinizBuildConfig.javasınıf

public static final String ACCOUNT_TYPE = "your.syncadapter.type.debug";

vebuild/generated/res/generated/debug/values/generated.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <!-- Automatically generated file. DO NOT MODIFY -->
    <!-- Values from default config. -->
    <item name="account_type" type="string">your.syncadapter.type.debug</item>
    <item name="authorities" type="string">com.example.app.provider</item>

</resources>

Senin içindeauthenticator.xmlkaynak yapı belirtilen kullanın.dosya gradle

<?xml version="1.0" encoding="utf-8"?>
<account-authenticator xmlns:android="http://schemas.android.com/apk/res/android"
                       android:accountType="@string/account_type"
                       android:icon="@drawable/ic_launcher"
                       android:smallIcon="@drawable/ic_launcher"
                       android:label="@string/app_name"
/>

Senin içindesyncadapter.xmlaynı kaynak tekrar kullanın@string/yetkililerçok

<?xml version="1.0" encoding="utf-8"?>
<sync-adapter xmlns:android="http://schemas.android.com/apk/res/android"
              android:contentAuthority="@string/authorities"
              android:accountType="@string/account_type"
              android:userVisible="true"
              android:supportsUploading="false"
              android:allowParallelSyncs="false"
              android:isAlwaysSyncable="true"
        />

İpucu:otomatik tamamlama(Ctrl Space) elle yazmak zorunda yani bu oluşturulan kaynak için çalışmıyor

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • EEVblog2

    EEVblog2

    2 HAZİRAN 2014
  • jedimasterkyle

    jedimasterky

    11 ŞUBAT 2006
  • justintimberlakeVEVO

    justintimber

    2 EYLÜL 2009