Android 生成警告的 Instabug

Instabug for Android build warning

我们有一个包含 4 个模块的 gradle 项目:1 个库模块和 3 个 android 应用程序。为了构建我们的应用程序,我们使用 circleCI。我们还根据 this 指南禁用了 circleCI 构建的预索引。

一切都很好,直到我将 Instabug 添加到我们的项目之一。从那以后,我们一直在达到 circleCI 4GB 的限制。最重要的是,将 Instabug 作为依赖项的项目将启动 preDex gradle 任务,无论如何。要开始新构建,我们使用以下命令:./gradlew assembleDebug -PpreDexEnable=false

使用 Instabug 的项目在构建时会收到一些警告,如下所示:

Ignoring InnerClasses attribute for an anonymous inner class (com.instabug.library.b) that doesn't come with an associated EnclosingMethod attribute. This class was probably produced by a compiler that did not target the modern .class file format. The recommended solution is to recompile the class from source, using an up-to-date compiler and without specifying any "-target" type options. The consequence of ignoring this warning is that reflective operations on this class will incorrectly indicate that it is not an inner class.

我认为由于为 "Instabug project" 启动的 preDex 任务,我们将达到 4 GB 的限制。

有人知道发生了什么事吗?

编辑:gradle 个文件

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
            }
    ]
}

自助服务终端模块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

这个问题我没有真正的答案。但是 preDex 任务是由于 minSdkVersion 21 而创建的。此外,我们不能将 RAM 限制在 4GB,因此我们不得不将其增加到 6GB。