2016-11-01 12 views
5

Projemi oluştururken alıyorum hatadır:yinelenen giriş: com/google/android/g/iç İşte/zzahl.class

Error:Execution failed for task ':transformClassesWithJarMergingForDebug'. 
com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: com/google/android/gms/internal/zzahl.class 

ne olduğunu anlamaya görünüyor olamaz hataya neden oluyor, bu durumun ya da Java Aktivitemde berbat olduğumdan şüpheleniyorum.

Gradle:

buildscript { 
    repositories { 
     jcenter() 
    } 

    dependencies { 
     classpath 'com.android.tools.build:gradle:2.2.2' 
     classpath 'com.github.ben-manes:gradle-versions-plugin:0.13.0' // version plugin support 
     classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' 
     classpath 'com.google.gms:google-services:3.0.0' 
    } 
} 

plugins { 
    id "org.sonarqube" version "2.1" // https://plugins.gradle.org/plugin/org.sonarqube 
} 

apply plugin: 'com.android.application' 
apply plugin: 'com.github.ben-manes.versions' // ./gradlew dependencyUpdates -Drevision=release 
apply plugin: 'sonar-runner' 
apply plugin: 'android-apt' 
apply plugin: 'com.google.gms.google-services' 

repositories { 
    jcenter() 
} 

def versionMajor = 1 
def versionMinor = 0 
def versionPatch = 0 
def versionBuild = 0 
def versionMajorMinorPatchBuild = "${versionMajor}.${versionMinor}.${versionPatch}.${versionBuild}" 
def versionString = "${versionMajor}.${versionMinor}.${versionPatch}" 
def versionStringFull = "${versionMajor}.${versionMinor}.${versionPatch}.${versionBuild}" 

android { 
    compileSdkVersion 25 
    buildToolsVersion "24.0.3" 

    dexOptions { 
     javaMaxHeapSize "4g" 
    } 

    defaultConfig { 
     applicationId "skipasses.android.abc.123.skipasses" 
     minSdkVersion 16 
     targetSdkVersion 25 
     versionCode 1 
     versionName "1.0" 
     multiDexEnabled true 
     vectorDrawables.useSupportLibrary = true 
     testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 
    } 

    // set dummy signing values if not defined in ~/.gradle/gradle.properties 
    if (!project.hasProperty('SkiPassKeyStoreFile')) { 
     println "Using dummy signing values" 
     project.ext.setProperty('SkiPassKeyStoreFile', 'dummy.keystore') 
     project.ext.setProperty('SkiPassKeyStorePassword', 'dummy!') 
     project.ext.setProperty('SkiPassKeyAlias', 'dummy') 
     project.ext.setProperty('SkiPassKeyPassword', 'dummy!') 
    } 

    // defined on the build server in the /usr/share/tomcat/.gradle/gradle.properties 
    signingConfigs { 
     release { 
      storeFile file(SkiPassKeyStoreFile) 
      storePassword SkiPassKeyStorePassword 
      keyAlias SkiPassKeyAlias 
      keyPassword SkiPassKeyPassword 
     } 
     lwa { 
      storeFile file('keystore.jks') 
      keyAlias 'androiddebugkey' 
      keyPassword 'android' 
      storePassword 'android' 
     } 
    } 

    packagingOptions { 
     exclude 'META-INF/DEPENDENCIES.txt' 
     exclude 'META-INF/LICENSE.txt' 
     exclude 'META-INF/NOTICE.txt' 
     exclude 'META-INF/NOTICE' 
     exclude 'META-INF/LICENSE' 
     exclude 'META-INF/DEPENDENCIES' 
     exclude 'META-INF/notice.txt' 
     exclude 'META-INF/license.txt' 
     exclude 'META-INF/dependencies.txt' 
     exclude 'META-INF/LGPL2.1' 
    } 

    buildTypes { 
     release { 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
      buildConfigField "String", "VERSION_NAME_FULL", "\"${versionString}\"" 
      signingConfig signingConfigs.release 
     } 
     debug { 
      versionNameSuffix '-DEV' 
      buildConfigField "String", "VERSION_NAME_FULL", "\"${versionStringFull}${versionNameSuffix}\"" 
     } 
     beta { 
      versionNameSuffix '-BETA' 
      //noinspection GroovyAssignabilityCheck 
      signingConfig android.signingConfigs.debug 
      zipAlignEnabled true 
      buildConfigField "String", "VERSION_NAME_FULL", "\"${versionStringFull}${versionNameSuffix}\"" 
     } 
    } 

    lintOptions { 
     abortOnError false 
    } 
} 

ext { 
    // versions for libraries that multiple dependencies 
    supportLibVersion = '25.0.0' 
    dagger = '2.7' 
    butterknife = '8.4.0' 
    pocketknife = '3.2.1' 
} 

dependencies { 
    // Support Libraries 
    compile "com.android.support:appcompat-v7:${supportLibVersion}" 
    compile "com.android.support:design:${supportLibVersion}" 

    // Dependency Injection dependencies 
    compile "com.google.dagger:dagger:${dagger}" 
    apt "com.google.dagger:dagger-compiler:${dagger}" 

    // View Binding 
    compile "com.jakewharton:butterknife:${butterknife}" 
    apt "com.jakewharton:butterknife-compiler:${butterknife}" 

    compile "com.vikingsen:pocketknife-core:${pocketknife}" 
    apt "com.vikingsen:pocketknife-compiler:${pocketknife}" 

    // Unit Testing 
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { 
     exclude group: 'com.android.support', module: 'support-annotations' 
    }) 

    // Firebase 
    compile 'com.google.firebase:firebase-auth:9.8.0' 
    compile 'com.firebaseui:firebase-ui-database:0.6.1' 
    compile 'com.firebaseui:firebase-ui-auth:0.6.1' 
    compile 'com.google.firebase:firebase-core:9.8.0' 
    compile 'com.android.support:support-v4:25.0.0' 
    compile 'com.android.support:recyclerview-v7:25.0.0' 
    testCompile 'junit:junit:4.12' 
    provided 'javax.annotation:jsr250-api:1.0' 
} 

sonarqube { //./gradlew sonarqube aDebug 
    properties { 
     if (!project.hasProperty("abc123SonarHostUrl")) { 
      println '!!!! ABC123 Sonar properties must be set in your gradle.properties !!!!' 
      return 
     } 

     // Project Information 
     property "sonar.projectKey", "SkiPasses" 
     property "sonar.projectName", "SkiPasses" 
     property "sonar.projectVersion", versionMajorMinorPatchBuild 

     // Sonar Information 
     property "sonar.host.url", abcSonarHostUrl 
     property "sonar.jdbc.url", abcSonarJdbcUrl 
     property "sonar.jdbc.driverClassName", abcSonarJdbcDriver 
     property "sonar.jdbc.username", abcSonarUsername 
     property "sonar.jdbc.password", abcSonarPassword 

     properties["sonar.sources"] = "src/main" //android.sourceSets.main.java.srcDirs 
     properties["sonar.tests"] = android.sourceSets.androidTest.java.srcDirs 

     if (file("build/intermediates/classes/debug").exists()) { 
      properties["sonar.binaries"] = [file("build/intermediates/classes/debug")] 
     } 
     if (file("build/intermediates/classes/beta").exists()) { 
      properties["sonar.binaries"] = [file("build/intermediates/classes/beta")] 
     } 
    } 
} 

Ve Etkinlik: Ben temiz bir yapı yapıyor denedim

package abc123.android.abc.123.skipasses.ui.activity; 

import android.content.Intent; 
import android.os.Bundle; 
import android.support.design.widget.NavigationView; 
import android.support.v4.view.GravityCompat; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v7.app.ActionBarDrawerToggle; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.MenuItem; 

import com.google.firebase.auth.FirebaseAuth; 

import abc123.android.abc.123.skipasses.R; 

public class DashboardActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_dashboard); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
     drawer.addDrawerListener(toggle); 
     toggle.syncState(); 
     NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
     navigationView.setNavigationItemSelectedListener(this); 
     //Todo: figure out why the BuildConfig is not being fetched 
//  TextView textView = (TextView) findViewById(R.id.version_text); 
//  textView.setText(getString(R.string.version_number, BuildConfig.VERSION_NAME)); 
    } 

    @Override 
    public void onBackPressed() { 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     if (drawer.isDrawerOpen(GravityCompat.START)) { 
      drawer.closeDrawer(GravityCompat.START); 
     } else { 
      super.onBackPressed(); 
     } 
    } 

    @Override 
    public boolean onNavigationItemSelected(MenuItem item) { 
     int id = item.getItemId(); 
     //TODO Create fragments for each menu item 
     if (id == R.id.nav_my_reservations) { 
     } else if (id == R.id.nav_make_reservation) { 
     } else if (id == R.id.nav_settings) { 
     } else if (id == R.id.nav_log_out) { 
      FirebaseAuth.getInstance().signOut(); 
      Intent loginIntent = new Intent(DashboardActivity.this, LoginActivity.class); 
      startActivity(loginIntent); 
     } 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     drawer.closeDrawer(GravityCompat.START); 
     return true; 
    } 
} 

İşte kod. Yinelenen kütüphaneleri bulamıyorum. Sürüm numaralarında sıraya girmeyen oyun servislerinin ve firebase'in nerede olduğunu göremiyorum. Sadece bu hatanın nasıl olduğunu görmüyorum. Herhangi bir rehberlik takdir edilecektir.

+0

Başvuru eklentisini ekleyin: 'com.google.gms.google-services', dosyanın en altında. –

cevap

3

documentation for Firebase UI, sürüm 0.6.2'nin Firebase/Google Play Hizmetleri kitaplıkları sürüm 9.8.0 sürümüyle kullanıldığını belirtir.

Değişimi:

compile 'com.firebaseui:firebase-ui-database:0.6.1' 
compile 'com.firebaseui:firebase-ui-auth:0.6.1' 

: Ayrıca

compile 'com.firebaseui:firebase-ui-database:0.6.2' 
compile 'com.firebaseui:firebase-ui-auth:0.6.2' 

, apply plugin: 'com.google.gms.google-services' build.gradle dosyasının placed at the bottom olmalıdır.

multiDexEnabled true var, ancak bağımlılıklarınızda compile 'com.android.support:multidex:1.0.1' bulunmuyor. Multidex'e ihtiyacınız varsa, ancak kütüphane ve configuration in your manifest olmadan, etkin olmayacaktır.

+0

Aslında benim Manifest dosya benim build.gradle dosyasında başvurulan kütüphane bağımlılığı ve doğru yapılandırılmış sahip olmasına rağmen ben aynı sorunla karşı karşıya. Bina, 9.8.0 yerine v9.0.2 ile tamam, bu yüzden Firebase'e yeni bir bağımlılık eklendiğini tahmin ediyorum. –

6

Aynı sorun vardı ve bağımlılığımdan birinin, PlayServices'ın farklı bir sürümünü kullanarak firebase bağımlılık satırında verilenlerden daha fazla olduğunu anladım.

Eğer build.gradle dosyasının altındaki apply plugin: 'com.google.gms.google-services' yerleştirmelidir, daha önce Mentionned olarak

compile 'com.google.android.gms:play-services-analytics:9.6.1' 
compile 'com.google.firebase:firebase-messaging:9.8.0' 

,

Ayrıca
compile 'com.google.android.gms:play-services-analytics:9.6.1' 
compile 'com.google.firebase:firebase-messaging:9.6.1' 

değiştirildi vardı.

+0

Bu cevap günümü kurtardı – XIII

+0

Harika cevap. Android Studio bir şekilde oyun servisleri için olsa da firebase için "en son sürüm değil" uyarısında bulunmaz, bu nedenle firebase olanlar için eski sürümleri kullanırken oyun hizmetlerinin en son sürümlerine sahip olmak kolaydır. – Hong

İlgili konular