2016-12-29 2 views
0

У меня есть 3 файла .aar, которые включены в модуль и модуль aar, включенные в приложение.Как включить различные .aar в зависимости от варианта сборки android

В настоящее время у меня есть 3 варианта сборки и для конкретного варианта сборки. Я хочу включить конкретный aar.

Позволяет Пусть: У меня 3 AARS именования хуга, PQR, DEF

хуга должны быть включено в 123 сборке варианты PQR должны быть включено в 456 сборке варианты четкости, чтобы быть включенной в 789 варианте сборки

модуль AAR build.gradle

File xyzFile= file("xyz.aar") 
File pqrFile = file("pqr.aar") 
File defFile = file("def.aar") 


configurations.maybeCreate("xyz") 
    artifacts.add("xyz", xyzFile) 
configurations.maybeCreate("pqr") 
artifacts.add("pqr", pqrFile) 
configurations.maybeCreate("def") 
    artifacts.add("def", defFile) 

приложение Проект build.gradle

apply plugin: 'com.android.application' 

configurations { 
    xyzDebugCompile 
    xyzReleaseCompile 
    xyzReleaseUnsignedCompile 

    pqrDebugCompile 
    pqrReleaseCompile 
    pqrReleaseUnsignedCompile 

    defDebugCompile 
    defReleaseCompile 
    defReleaseUnsignedCompile 

} 

android { 
    compileSdkVersion 24 
    buildToolsVersion "24.0.0" 
    = 

    lintOptions { 
     abortOnError false 
    } 

    defaultConfig { 
     applicationId "cm.ez.eia" 
     minSdkVersion 21 
     targetSdkVersion 24 
     versionCode 1 
     versionName '0.9.2' 
     multiDexEnabled true 
    } 
    buildTypes { 
     debug { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
      applicationVariants.all { variant -> 
       variant.outputs.each { output -> 
        project.ext { appName = 'FA-Comm' } 
        def newName = output.outputFile.name 
        newName = newName.replace("app-", "$project.ext.appName-") 
        output.outputFile = new File(output.outputFile.parent, newName) 
       } 
      } 

     } 
     release { 
      debuggable false 
      jniDebuggable false 
      applicationVariants.all { variant -> 
       variant.outputs.each { output -> 
        project.ext { appName = 'FA-Comm' } 
        def newName = output.outputFile.name 
        newName = newName.replace("app-", "$project.ext.appName-") 
        output.outputFile = new File(output.outputFile.parent, newName) 
       } 
      } 

      minifyEnabled true 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 

     releaseUnsigned { 
      debuggable false 
      jniDebuggable false 
      applicationVariants.all { variant -> 
       variant.outputs.each { output -> 
        project.ext { appName = 'FA-Comm' } 
        def newName = output.outputFile.name 
        newName = newName.replace("app-", "$project.ext.appName-") 
        output.outputFile = new File(output.outputFile.parent, newName) 
       } 
      } 
      minifyEnabled true 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
    dexOptions { 
     javaMaxHeapSize "1g" //specify the heap size for the dex process 
     preDexLibraries = false //delete the already predexed libraries 
    } 


    productFlavors { 
     xyz { 
      applicationId 'com.fieldaware.communicator' 
      minSdkVersion 21 
      targetSdkVersion 24 
     } 


     def { 
      applicationId 'com.fieldaware.communicator' 
      minSdkVersion 21 
      targetSdkVersion 24 
     } 
     pqr { 
      applicationId 'com.fieldaware.communicator' 
      minSdkVersion 21 
      targetSdkVersion 24 
     } 
    } 
} 

dependencies { 
    compile fileTree(include: ['*.jar'], dir: 'libs') 
    compile project(':android-common-master') 
    compile 'com.android.support:appcompat-v7:24.2.1' 

    compile 'com.squareup.okhttp:okhttp:2.5.0' 
    compile 'com.squareup.okhttp:okhttp-urlconnection:2.5.0' 
    compile 'com.android.support:multidex:1.0.0' 
    compile 'com.google.android.gms:play-services-ads:9.4.0' 
    compile 'com.google.android.gms:play-services-auth:9.4.0' 
    compile 'com.google.android.gms:play-services-gcm:9.4.0' 



    //Aar Configs 
    xyzDebugCompile project(path:':sdk',configuration: 'xyz') 
    xyzReleaseCompile project(path:':sdk',configuration: 'xyz') 
    xyzReleaseUnsignedCompile project(path:':sdk',configuration: 'xyz') 


    pqrDebugCompile project(path: ':sdk', configuration: 'pqr') 
    pqrReleaseCompile project(path: ':sdk', configuration: 'pqr') 
    pqrReleaseUnsignedCompile project(path: ':sdk', configuration: 'pqr') 

    defDebugCompile project(path: ':sdk', configuration: 'def') 
    defReleaseCompile project(path: ':sdk', configuration: 'def') 
    defReleaseUnsignedCompile project(path: ':sdk', configuration: 'def') 
} 

Я хочу, чтобы включить конкретный .aar файл в зависимости от конкретного варианта сборки.

Этот код извлекает неправильные файлы аара. Просьба предложить любое решение

ответ

1

Поскольку я отвечаю на свой вопрос, потому что кто-то сталкивается с тем же, тогда есть подходящее решение.

Прежде всего: Вы не можете включать в себя 3 AARS в проекте библиотеки и выбрать их соответственно как сейчас я использую Android Studio 2.2.3

Мой подход включает 3 AARS было.

Я создал 3 библиотеки модулей в моей основной прикладной именовании:

settings.gradle

include ':xyzaar', ':pqraar', ':defaar',... 

xyzaar каталог будет включать в себя xyz.aar файл

xyzaar-> build.gradle

configurations.maybeCreate("default") 
artifacts.add("default", file('xyz.aar')) 

То же, что и для других 2 автомобили

app-> build.gradle

xyzDebugCompile project(path: ':xyzaar') 
xyzReleaseCompile project(path: ':xyzaar') 
xyzReleaseUnsignedCompile project(path: ':xyzaar') 

pqrDebugCompile project(path: ':pqraar') 
pqrReleaseCompile project(path: ':pqraar') 
pqrReleaseUnsignedCompile project(path: ':pqraar') 

defDebugCompile project(path: ':defaar') 
defReleaseCompile project(path: ':defaar') 
defReleaseUnsignedCompile project(path: ':defaar') 

Спасибо PS: Этот подход работает для меня очень хорошо, и приложение не содержит нежелательных AAR файлов

0

в приложении build.gradle добавить следующие:

apply plugin: 'com.android.application' 

repositories { 
    ... 
    flatDir { 
     dirs 'libs' 
    } 
} 
... 

высадить вас * .aar файлы в этот каталог ЛИЭС и добавьте следующие строки в ваше приложение build.gradle:

xyzDebugCompile(name: 'xyz', ext: 'aar') 
xyzReleaseCompile(name: 'xyz', ext: 'aar') 
xyzReleaseUnsignedCompile(name: 'xyz', ext: 'aar') 

pqrDebugCompile(name: 'pqr', ext: 'aar') 
pqrReleaseCompile(name: 'pqr', ext: 'aar') 
pqrReleaseUnsignedCompile(name: 'pqr', ext: 'aar') 

defDebugCompile(name: 'def', ext: 'aar') 
defReleaseCompile(name: 'def', ext: 'aar') 
defReleaseUnsignedCompile(name: 'def', ext: 'aar') 
+0

Но я думаю, 3 AAR всегда будет включен в исходном коде приложения. с этим решением? –

+1

Нет. будет включен только один аар. Причина в том, что «xyz», «pqr» и «def» - ​​это ваши вкусы сборки и «debug», «release» и «releaseUnsigned» - ваши варианты сборки. Если вы запустите «./gradlew assemble», вы получите 9 apk; по одному для каждого варианта сборки/вкуса. И каждый apk будет содержать только один из aar (подходящий для варианта сборки/аромата). Чтобы лучше объяснить это: если вы запустите «./gradlew assembleXyzDebugCompile», он сгенерирует apk для этого (из девяти) вариантов сборки/вкуса и что apk будет компилироваться только с одним xyz.aar –

+0

Спасибо @Jason .. Я создал 3 отдельных модуля с 3 различными арами и соответственно включил их в аромат –