2015-07-20 17 views
7

Chúng tôi có một dự án gradle có chứa 4 mô-đun: 1 mô-đun thư viện và 3 ứng dụng android. Để xây dựng ứng dụng của chúng tôi, chúng tôi sử dụng circleCI. Chúng tôi cũng đã vô hiệu hóa ưu tiên cho vòng trònCI xây dựng theo hướng dẫn this.Instabug cho Android xây dựng cảnh báo

Mọi thứ đều tuyệt vời cho đến khi tôi thêm Instabug vào một trong các dự án của chúng tôi. Chúng tôi đã đạt đến giới hạn circleCI 4GB kể từ đó. Trên hết, dự án có Instabug là một sự phụ thuộc sẽ bắt đầu nhiệm vụ gradent preDex, bất kể điều gì. Để bắt đầu xây dựng mới, chúng tôi sử dụng lệnh sau: ./gradlew assembleDebug -PpreDexEnable=false.

Dự án có sử dụng Instabug được một số cảnh báo trong thời gian xây dựng như thế này: thuộc tính

InnerClasses Bỏ qua cho một lớp bên trong vô danh (com.instabug.library.b) mà không đi kèm với một thuộc tính EnclosingMethod liên quan. Lớp này có thể được tạo bởi trình biên dịch không nhắm mục tiêu định dạng tệp .class hiện đại. Giải pháp được đề xuất là biên dịch lại lớp từ nguồn, sử dụng trình biên dịch cập nhật và không chỉ định bất kỳ tùy chọn loại "-target" nào. Hậu quả của việc bỏ qua cảnh báo này là các hoạt động phản chiếu trên lớp này sẽ không chính xác cho biết rằng đó là không phải là một lớp bên trong.

Tôi giả định rằng chúng tôi đạt đến giới hạn 4 GB do tác vụ preDex được bắt đầu cho "Dự án Instabug".

Có ai có ý tưởng gì về những gì đang xảy ra không?

Edit: file gradle

gốc 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 
      } 
    ] 
} 

mô-đun kiosk 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

Đây là Hassan từ Instabug. Cảnh báo đó gây phiền nhiễu, nhưng nó không gây ra bất kỳ vấn đề nào. Một câu hỏi liên quan đến SO [ở đây] (http://stackoverflow.com/questions/3308010/what-is-the-ignoring-innerclasses-attribute-warning-output-during-compilation/3308059). Chúng tôi sẽ loại bỏ cảnh báo đó trong bản phát hành trong tương lai. Về nhiệm vụ preDex, điều này có xảy ra cục bộ không? hoặc chỉ trên CircleCI? –

+0

Nó xảy ra ở cả hai nơi, cục bộ và circleCI. –

+1

Tôi không thể sao chép địa phương này, bạn có thể thêm build.gradle gốc của mình vào câu hỏi không? –

Trả lời

4

Tôi không có câu trả lời thực sự cho câu hỏi này. Nhưng nhiệm vụ preDex đã được tạo do minSdkVersion 21. Ngoài ra, chúng tôi không thể giới hạn bản thân với 4GB RAM vì vậy chúng tôi đã phải tăng tốc lên đến 6 GB.

Các vấn đề liên quan