2015-11-20 9 views
6

Opublikowałem aplikację z 2 Build Flavours: "normalną" wersją zawierającą reklamy i wersję bez reklam.Wiele aromatów budujących zi bez reklam (nowa zasada Google dla programistów)

W Google Play Developer Console musisz oznaczyć aplikację, jeśli używa reklam. Jest to normalne, ale wersja bez reklam używa tych samych zależności co wersja pro (w szczególności usługi Google Play). Dostaję ostrzeżenie, gdy ustawię tę wersję jako wolną od reklam, ponieważ znaleziono biblioteki reklam.

Czy można zmieniać zależności w zależności od smaku komplementarnego?

build.gradle:

android { 
    (...) 
    productFlavors { 
     lite { 
      signingConfig signingConfigs.Release 
      versionCode 14 
      versionName '1.1.5' 
      buildConfigField "boolean", "IS_PRO", "false" 
     } 
     pro { 
      applicationId 'com.example.exampleadfree' 
      signingConfig signingConfigs.Release 
      targetSdkVersion 21 
      versionCode 14 
      versionName '1.1.5' 
      buildConfigField "boolean", "IS_PRO", "true" 
     } 
    } 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'com.android.support:support-v4:21.0.3' 
    compile 'com.android.support:appcompat-v7:21.0.3' 
    compile 'com.android.support:cardview-v7:21.0.2' 
    compile 'com.google.android.gms:play-services:6.1.+' 
    compile project(':libraries:SharedItems') 
    compile 'com.android.support:recyclerview-v7:21.0.2' 
} 
+0

Wierzę, że można użyć funkcji smakuNazwaKompilacji dla zależności zależnej od konkretnego smaku. W twoim przypadku możesz dodać "liteCompile" "' – cwbowron

+0

Czy na pewno Google sprawdza, jakie biblioteki są w twojej aplikacji? Czy deklarujesz AdActivity w AndroidManifest w płatnej wersji? –

Odpowiedz

7

można zmienić

compile 'com.google.android.gms:play-services:6.1.+' 

do

liteCompile 'com.google.android.gms:play-services:6.1.+' 

i że będą obejmować lib usługi odgrywają tylko z wersją Lite.

Ale nie skończyłeś, ponieważ teraz kod w twojej aplikacji, który tworzy AdView i powiązane klasy z biblioteki usług odtwarzania, nie skompiluje się podczas tworzenia wersji pro.

Moje rozwiązanie w podobnej sytuacji (z biblioteką rozliczeniową) polegało na przeniesieniu całego kodu, który odnosi się do wykluczonej biblioteki i powiązanych klas, do pliku źródłowego, który jest również zbudowany tylko ze smakiem lite, a następnie dostarcza manekina implementacja dla wersji pro, która nie odnosi się do biblioteki.

Na przykład można utworzyć dwa katalogi src smakowe specyficzne o tej samej nazwie klasy Java w każdy:

src/lite/java/com/example/myapp/util/AdUtil.java 
src/pro/java/com/example/myapp/util/AdUtil.java 

W wersji lite z AdUtil, można wykonywać połączenia do usług Google Play i uzyskać adview powrót:

View getAdView(...) 
{ 
    View adView = new AdView(...); 
    adView.setAdSize(...); 
    adView.setAdUnitId(...); 
    ... 
    return adView; 
} 

a w wersji pro tej klasy, można po prostu umieścić atrapę realizacji, które nie odnoszą się do lib usług Play:

View getAdView(...) 
{ 
    return null; 
} 

Następnie w głównym kodzie aplikacji, po wywołaniu AdUtil.getAdView(), otrzymasz widok w wersji Lite, którą możesz umieścić na ekranie. W wersji pro dostaniesz wartość zerową, więc pominiesz dodanie widoku (ale prawdopodobnie już sprawdzasz, czy jesteś pro lub lite, zanim spróbujesz stworzyć widok z góry).

1

Jeżeli projekt deklaruje Flavors produktu, takie rozszerza główną konfigurację.

Od here. A więc Smaki produktu skutecznie dodają nowe konfiguracje dla każdego smaku, który deklarujesz. W gradle można dodawać zależności specyficzne dla konfiguracji. Na przykład,

dependencies { 
    <configname> <dependency> 
} 

Jeśli chcesz wymienić wszystkie konfiguracje, że projekt dodał:

configurations.findAll().each{println "$it.name"} 

W przypadku jeśli projekt zobaczysz konfiguracyjne, które są nazwane tak samo jak swojego produktu smaki. Tak @cwbowron skomentował, aby dodać zależność kompilacji dla smaku lite:

dependencies { 
    liteCompile <dependency> 
} 
0

Z czatu pomocy Google Play zostałem poproszony o stwierdzenie "Nie" w konsoli Google Play, pomimo wykrycia. Dlatego nie powinno być problemu z włączeniem bibliotek Google.

Z drugiej strony odpowiedź Douga jest elegancka.

Pozdrowienia,