2015-07-20 10 views
7

Wir haben ein Großprojekt, das 4 Module enthält: 1 Bibliotheksmodul und 3 Android-Apps. Um unsere Apps zu erstellen, verwenden wir circleCI. Wir haben auch die Voreinstellung für die circleCI Builds nach this Guide deaktiviert.Instabug für Android Build Warnung

Alles war großartig, bis ich Instabug zu einem unserer Projekte hinzugefügt habe. Seither haben wir das circleCI 4GB Limit erreicht. Obendrein wird das Projekt, das Instabug als Abhängigkeit hat, die preDex Graplel-Aufgabe starten, egal was. Um einen neuen Build zu starten, verwenden wir den folgenden Befehl: ./gradlew assembleDebug -PpreDexEnable=false.

Das Projekt, das Instabug bekommt einige Warnungen während Build-Zeit wie folgt verwendet:

Ignorieren InnerClasses Attribut für eine anonyme innere Klasse (com.instabug.library.b), die nicht mit einer kommt zugehöriges EnclosingMethod-Attribut. Diese Klasse wurde wahrscheinlich von einem Compiler erzeugt, der nicht auf das moderne .class-Dateiformat abzielte. Die empfohlene Lösung besteht darin, die Klasse aus der Quelle neu zu kompilieren, indem ein aktueller Compiler verwendet wird und keine Optionen vom Typ "-target" angegeben werden. Die Konsequenz der Ignorierung dieser Warnung ist, dass reflektierende Operationen auf dieser Klasse falsch darauf hinweisen, dass es nicht eine innere Klasse ist.

Ich gehe davon aus, dass wir die 4-GB-Grenze aufgrund der PreDex-Aufgabe erreichen, die für das "Instabug-Projekt" gestartet wird.

Hat jemand eine Idee, was los ist?

Edit: gradle Dateien

root build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules. 
buildscript { 
    repositories { 
     jcenter() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:1.2.3' 
     classpath 'de.hannesstruss:godot:0.2' 
     classpath 'com.github.ben-manes:gradle-versions-plugin:0.11.3' 

     // NOTE: Do not place your application dependencies here; they belong 
     // in the individual module build.gradle files 
    } 
} 

apply plugin: 'de.hannesstruss.godot' 
apply plugin: 'com.github.ben-manes.versions' 
apply from: 'dependencies.gradle' 

def ciServer = 'CI' 
def executingOnCI = "true".equals(System.getenv(ciServer)) 

ext { 
    // preDexEnable property will come from the command line when circleCI is building the project. 
    if (project.hasProperty('preDexEnable')) { 
     project.ext.preDexLibs = project.properties['preDexEnable'].equals('true') 
    } else { 
     project.ext.preDexLibs = true // pre dexing should be true by default 
    } 

    buildTime = new Date().format("yyyy-MM-dd'T'HH:mm'Z'", TimeZone.getTimeZone("UTC")) 

    developmentFlavor = { 
     applicationId "${project.ext.appId}.${name}" 
     versionName "${project.ext.verName}-${name}" 
     minSdkVersion 15 
     buildConfigField "String", "API_TYPE", "\"${name}\"" 
     resValue "string", "tray__authority", "${applicationId}.tray" 
    } 

    defaultLibraryFlavorConfig = { 
     targetSdkVersion 22 
     versionCode project.ext.verCode 
     versionName project.ext.verName 

     multiDexEnabled true 

     buildConfigField "String", "GIT_SHA", "\"${project.ext.gitSha}\"" 
     buildConfigField "String", "BUILD_TIME", "\"${buildTime}\"" 
    } 

    defaultFlavorConfig = defaultLibraryFlavorConfig << { 
     applicationId project.ext.appId 
     resValue "string", "tray__authority", "${applicationId}.tray" 
    } 

    defaultAndroidConfig = { 
     compileSdkVersion 22 
     buildToolsVersion "22.0.1" 

     compileOptions { 
      sourceCompatibility JavaVersion.VERSION_1_7 
      targetCompatibility JavaVersion.VERSION_1_7 
     } 

     dexOptions { 
      javaMaxHeapSize executingOnCI ? "2048m" : "4g" 
      jumboMode true 
     } 

     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' 
      exclude 'META-INF/services/javax.annotation.processing.Processor' 
     } 

     lintOptions { 
      checkReleaseBuilds false 
      // Or, if you prefer, you can continue to check for errors in release builds, 
      // but continue the build even when errors are found: 
      abortOnError false 
     } 
    } 
} 

subprojects { 
    repositories { 
     maven { url "http://dl.bintray.com/populov/maven" } 
     jcenter() 
    } 

    project.ext.gitSha = 'git rev-parse --short HEAD'.execute([], project.projectDir).text.trim() 

    project.plugins.whenPluginAdded { plugin -> 
     if ("com.android.build.gradle.AppPlugin".equals(plugin.class.name)) { 
      project.android.dexOptions.preDexLibraries = rootProject.ext.preDexLibs 
     } else if ("com.android.build.gradle.LibraryPlugin".equals(plugin.class.name)) { 
      project.android.dexOptions.preDexLibraries = rootProject.ext.preDexLibs 
     } 
    } 
} 

dependencies.gradle

ext { 
    kiosk = [ 
      dependencies: { 
       compile project(':common') 

       compile libraries.multidex 
       compile libraries.viewPagerIndicator 
       compile libraries.recyclerview 
       compile libraries.volley 
       compile libraries.instabug 
       compile libraries.mixpanel 
       compile libraries.loadToast 
       compile(libraries.crashlytics) { 
        transitive = true; 
       } 

       compile libraries.dagger 
       apt libraries.daggerCompiler 
       provided libraries.javaxAnnotations 
      } 
    ] 
} 

Kiosk Modul build.gradle

buildscript { 
    repositories { 
     maven { url 'https://maven.fabric.io/repo' } 
     jcenter() 
    } 

    dependencies { 
     classpath 'com.neenbedankt.gradle.plugins:android-apt:1.6' 
     classpath 'io.fabric.tools:gradle:1.+' 
    } 
} 

repositories { 
    maven { url 'https://maven.fabric.io/public' } 
    maven { url 'http://archiva.instabug.com/repository/release' } 
    maven { url "https://jitpack.io" } 
} 

apply plugin: 'com.android.application' 
apply plugin: 'com.neenbedankt.android-apt' 
apply plugin: 'io.fabric' 

// Manifest version information! 
def versionMajor = 1 
def versionMinor = 0 
def versionPatch = 0 
def versionBuild = 0 // bump for dogfood builds, public betas, etc. 

ext.verCode = versionMajor * 10000 + versionMinor * 1000 + versionPatch * 100 + versionBuild 
ext.verName = "${versionMajor}.${versionMinor}.${versionPatch}" 

ext.appId = 'care.smart.android.kiosk' 

android defaultAndroidConfig << { 

    defaultConfig defaultFlavorConfig << { 
     minSdkVersion 21 
     buildConfigField "String", "APP_NAME", "\"Android-Kiosk\"" 
    } 

    productFlavors { 
     realProduction { 
      buildConfigField "String", "API_TYPE", '"prod"' 
     } 

//  dev developmentFlavor 

    } 


} 

dependencies kiosk.dependencies 
+0

Dies ist Hassan von Instabug. Diese Warnung ist ärgerlich, sollte aber keine Probleme verursachen. Eine verwandte Frage zu SO [hier] (http://stackoverflow.com/questions/3308010/what-is-the-ignoring-innerclasses-attribute-warning-output-during-compilation/3308059). Wir werden diese Warnung in einer zukünftigen Version jedoch loswerden. Was passiert mit der preDex-Aufgabe auch lokal? oder nur auf CircleCI? –

+0

Es passiert an beiden Orten, lokal und circleCI. –

+1

Ich kann dies nicht lokal replizieren, können Sie Ihre root build.gradle zur Frage hinzufügen? –

Antwort

4

Ich habe keine echte Antwort auf diese Frage. Aber die preDex Aufgabe wurde aufgrund minSdkVersion 21 erstellt. Außerdem konnten wir uns nicht auf 4 GB RAM beschränken, also mussten wir es auf 6 GB bringen.