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。
我们有一个包含 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。