2015-06-26 3 views
1

Я перенесла приложение из eclipse в андроид-студию, и теперь я пытаюсь запустить ароматы продукта. Я слежу за блогом по http://blog.robustastudio.com/mobile-development/android/building-multiple-editions-of-android-app-gradle/Продукт аромат [Миграция от затмения до студии android]

Ниже приводится моя структура построения при импорте из затмения. EclipsetoStudioBuildStructure

Я могу видеть варианты в окне вариантов сборки.

Ниже приводится build.gradle

применять плагин: «com.android.application»

dependencies { 
    compile fileTree(dir: 'libs', include: '*.jar') 
    compile project(':volley') 
    compile 'com.google.android.gms:play-services-gcm:7.5.0' 
    compile 'com.android.support:cardview-v7:21.0.+' 
    compile 'com.android.support:recyclerview-v7:21.0.+' 
    compile 'com.android.support:appcompat-v7:21.0.+' 
} 

android { 
    compileSdkVersion 22 
    buildToolsVersion "22.0.0" 

    sourceSets { 
     main { 
      manifest.srcFile 'AndroidManifest.xml' 
      java.srcDirs = ['src'] 
      resources.srcDirs = ['src'] 
      aidl.srcDirs = ['src'] 
      renderscript.srcDirs = ['src'] 
      res.srcDirs = ['res'] 
      assets.srcDirs = ['assets'] 
     } 

     // Move the tests to tests/java, tests/res, etc... 
     instrumentTest.setRoot('tests') 

     // Move the build types to build-types/<type> 
     // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ... 
     // This moves them out of them default location under src/<type>/... which would 
     // conflict with src/ being used by the main source set. 
     // Adding new build types or product flavors should be accompanied 
     // by a similar customization. 
     debug.setRoot('build-types/debug') 
     release.setRoot('build-types/release') 
    } 

    defaultConfig { 
     multiDexEnabled true 
    } 

    buildTypes { 

     release { 
      minifyEnabled true; 
      proguardFiles getDefaultProguardFile('proguard-project.txt'); 
     } 
    } 

    productFlavors { 

     demo { 
      applicationId "com.demo.app" 
     } 

    } 

    lintOptions { 
     checkReleaseBuilds false; 
     abortOnError false; 
    } 
} 

Я хочу, чтобы файл Constants.java быть доступны для различных вкусов, как это имеет различные значения для соответствующие ароматизаторы.

Ниже приводится структура сборки, как показано в общей студии проекты,

app/ 
|--libs/ 
|--src/ 
    |--vanilla/ 
    | |--java/ 
    |  |--com/example/ 
    |  |--Flavor.java 
    |--strawberry/ 
    | |--java/ 
    |  |--com/example/ 
    |  |--Flavor.java 
    |--main/ 
     |--java/ 
     | |--... 
     |--res/ 
     | |--... 
     |--AndroidManifest.xml 

Но структура, когда мигрировали из затмения, кажется, совершенно разные. Я попытался создать каталог в src [demo/com.demo.app], чтобы проверить вариант аромата. Но это не работает. Может ли кто-нибудь помочь мне в этом? Как я могу включить поддержку вкуса продукта для проектов, перенесенных из eclipse

ответ

1

При импорте проекта из Eclipse Android Studio сохраняет ту же структуру папок, что и ваш источник не слишком много перемещается.

Это означает, что вы не сможете использовать исходные местоположения по умолчанию. Вот почему ваш build.gradle имеет sourceSets окончания:

sourceSets { 
     main { 
      manifest.srcFile 'AndroidManifest.xml' 
      java.srcDirs = ['src'] 
      resources.srcDirs = ['src'] 
      aidl.srcDirs = ['src'] 
      renderscript.srcDirs = ['src'] 
      res.srcDirs = ['res'] 
      assets.srcDirs = ['assets'] 
     } 
} 

Этот блок устанавливает место для всех кода по умолчанию (конфигурация main).

Если вы не хотите менять структуру проекта, вы можете добавить еще один блок в пределах sourceSets для вашего вкуса. Следующий пример позволит вам поместить весь код для вашего demo аромата под demo/src:

sourceSets { 
     main {} 
     demo { 
      manifest.srcFile 'demo/AndroidManifest.xml' 
      java.srcDirs = ['demo/src'] 
      resources.srcDirs = ['demo/src'] 
      aidl.srcDirs = ['demo/src'] 
      renderscript.srcDirs = ['demo/src'] 
      res.srcDirs = ['demo/res'] 
      assets.srcDirs = ['demo/assets'] 
     } 
} 

Другой альтернативой является удаление sourceSets закрытия полностью и обновить структуру проекта, чтобы соответствовать стандартной структуре для Gradle поддержанного проекта ,

+0

Звучит идеально. Я попробую решение и приму ответ. Приветствия :) –

+0

После включения наборов источников, как вы упомянули, я сталкиваюсь с повторяющимися классами в соответствующих вкусах при компиляции. 'error duplicate class: com.demo.app.Constants' –

+1

Похоже, что у вас есть класс 'Constants' в обоих основных и демо-наборах. Весь код в основном исходном наборе включен для всех вариантов, тогда как код в других наборах источников (например, демонстрационная версия) включается только в их соответствующие варианты. Таким образом, если у вас есть константа в обоих, вы получите две противоречивые копии одного и того же класса. Похоже, вам может понадобиться исходный источник 'release' с константами релиза и источником' demo', установленным с демо-константами. –

Смежные вопросы