2017-01-09 3 views
1

ANSWERс помощью Gradle создать два производственных APK-из одного источника

Ok. Так много здесь произошло. Поэтому позвольте мне собрать ответ.

Первые создают желаемые ароматы:

productFlavors{ 
    training{ 
     applicationIdSuffix ".training" 
     versionNameSuffix "-training" 
    } 
    full{ 

    } 
} 

Во-вторых, получить список всех путей структур, которые могут понадобиться по:

  • Нажмите на иконку Gradle на правой части IDE
  • в вашем проекте> Задачи> android, нажмите sourceSet: это покажет вам все структуры каталогов, которые могут вам понадобиться
  • щелкните правой кнопкой мыши sourceSet и выберите run, чтобы получить список структур каталогов
  • Не удаляйте файл google-services.json из/app в/main. Затем сделайте копии google-services.json и поместите их под каждый каталог аромата. Поэтому для меня, например, я поставил один под/обучение
  • ВАЖНО Перейти к консоли разработчика и создать учетные данные для каждого аромата: производство и отладка. И обновите каждый файл google-services.json с правильной информацией.

ВОПРОС

Я мог бы сказать вам потребности бизнеса, но это немного неуместны. У меня есть требование создать два «производственных» APK из одного исходного кода. Больше ничего не изменится. Это то же самое приложение, за исключением двух его, каждый с другим значком запуска. Я даже не знаю, как начать это делать. Кто-нибудь это сделал и не против совместного использования? Я использую Android Studio с Gradle на Mac.

UPDATE

На основе обратной связи я был в состоянии обновить свой Gradle файл в этом

productFlavors{ 
    training{ 
     applicationIdSuffix ".training" 
     versionNameSuffix "-training" 
    } 
    full{ 
     applicationIdSuffix "" 
     versionNameSuffix "" 
    } 
} 

Сейчас fullDebug и fullRelease компилироваться. Но когда я изменяю Build Variant на trainingDebug или trainingRelease, код больше не компилируется: R не может быть разрешен.

EDIT:

я, наконец, увидеть то, что вы, ребята просили. Вот след:

Executing tasks: [:app:generateTrainingDebugSources, :app:prepareTrainingDebugUnitTestDependencies, :app:mockableAndroidJar, :app:generateTrainingDebugAndroidTestSources] 

Configuration on demand is an incubating feature. 
WARNING: The `android.dexOptions.incremental` property is deprecated and it has no effect on the build process. 
Incremental java compilation is an incubating feature. 
:app:preBuild UP-TO-DATE 
:app:preTrainingDebugBuild UP-TO-DATE 
:app:checkTrainingDebugManifest 
:app:preFullDebugBuild UP-TO-DATE 
:app:preFullReleaseBuild UP-TO-DATE 
:app:preTrainingReleaseBuild UP-TO-DATE 
:app:prepareComAndroidSupportAnimatedVectorDrawable2420Library UP-TO-DATE 
:app:prepareComAndroidSupportAppcompatV72420Library UP-TO-DATE 
:app:prepareComAndroidSupportCardviewV72420Library UP-TO-DATE 
:app:prepareComAndroidSupportDesign2420Library UP-TO-DATE 
:app:prepareComAndroidSupportPaletteV72420Library UP-TO-DATE 
:app:prepareComAndroidSupportRecyclerviewV72420Library UP-TO-DATE 
:app:prepareComAndroidSupportSupportCompat2420Library UP-TO-DATE 
:app:prepareComAndroidSupportSupportCoreUi2420Library UP-TO-DATE 
:app:prepareComAndroidSupportSupportCoreUtils2420Library UP-TO-DATE 
:app:prepareComAndroidSupportSupportFragment2420Library UP-TO-DATE 
:app:prepareComAndroidSupportSupportMediaCompat2420Library UP-TO-DATE 
:app:prepareComAndroidSupportSupportV42420Library UP-TO-DATE 
:app:prepareComAndroidSupportSupportVectorDrawable2420Library UP-TO-DATE 
:app:prepareComAndroidVolleyVolley100Library UP-TO-DATE 
:app:prepareComCrashlyticsSdkAndroidAnswers136Library UP-TO-DATE 
:app:prepareComCrashlyticsSdkAndroidBeta114Library UP-TO-DATE 
:app:prepareComCrashlyticsSdkAndroidCrashlytics255Library UP-TO-DATE 
:app:prepareComCrashlyticsSdkAndroidCrashlyticsCore238Library UP-TO-DATE 
:app:prepareComDavemorrisseyLabsSubsamplingScaleImageView350Library UP-TO-DATE 
:app:prepareComEgosventuresCar360LibraryCaptureCar360libraryCapture1012Library UP-TO-DATE 
:app:prepareComGetbaseFloatingactionbutton1101Library UP-TO-DATE 
:app:prepareComGoogleAndroidGmsPlayServicesAppinvite940Library UP-TO-DATE 
:app:prepareComGoogleAndroidGmsPlayServicesAuth940Library UP-TO-DATE 
:app:prepareComGoogleAndroidGmsPlayServicesAuthBase940Library UP-TO-DATE 
:app:prepareComGoogleAndroidGmsPlayServicesBase940Library UP-TO-DATE 
:app:prepareComGoogleAndroidGmsPlayServicesBasement940Library UP-TO-DATE 
:app:prepareComGoogleAndroidGmsPlayServicesGcm940Library UP-TO-DATE 
:app:prepareComGoogleAndroidGmsPlayServicesIid940Library UP-TO-DATE 
:app:prepareComGoogleAndroidGmsPlayServicesLocation940Library UP-TO-DATE 
:app:prepareComGoogleAndroidGmsPlayServicesTasks940Library UP-TO-DATE 
:app:prepareComGoogleFirebaseFirebaseAnalytics940Library UP-TO-DATE 
:app:prepareComGoogleFirebaseFirebaseAnalyticsImpl940Library UP-TO-DATE 
:app:prepareComGoogleFirebaseFirebaseCommon940Library UP-TO-DATE 
:app:prepareComGoogleFirebaseFirebaseCore940Library UP-TO-DATE 
:app:prepareComGoogleFirebaseFirebaseIid940Library UP-TO-DATE 
:app:prepareComGoogleFirebaseFirebaseInvites940Library UP-TO-DATE 
:app:prepareComGoogleFirebaseFirebaseMessaging940Library UP-TO-DATE 
:app:prepareComJakewhartonTimberTimber410Library UP-TO-DATE 
:app:prepareComMelnykovFloatingactionbutton130Library UP-TO-DATE 
:app:prepareComWritingmindsFFmpegAndroid032Library UP-TO-DATE 
:app:prepareIoFabricSdkAndroidFabric1310Library UP-TO-DATE 
:app:prepareJpWasabeefRicheditorAndroid120Library UP-TO-DATE 
:app:prepareTrainingDebugDependencies 
:app:compileTrainingDebugAidl UP-TO-DATE 
:app:compileTrainingDebugRenderscript UP-TO-DATE 
:app:generateTrainingDebugBuildConfig UP-TO-DATE 
:app:mergeTrainingDebugShaders UP-TO-DATE 
:app:compileTrainingDebugShaders UP-TO-DATE 
:app:generateTrainingDebugAssets UP-TO-DATE 
:app:mergeTrainingDebugAssets UP-TO-DATE 
:app:processTrainingDebugManifest UP-TO-DATE 
:app:fabricGenerateResourcesTrainingDebug 
:app:generateTrainingDebugResValues UP-TO-DATE 
:app:processTrainingDebugGoogleServices 
Parsing json file: /Users/myname/StudioProjects/appname/app/google-services.json 
:app:processTrainingDebugGoogleServices FAILED 

FAILURE: Build failed with an exception. 

* What went wrong: 
Execution failed for task ':app:processTrainingDebugGoogleServices'. 
> No matching client found for package name 'com.company.appname.training' 

* Try: 
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. 

BUILD FAILED 

Total time: 9.567 secs 
+0

Взгляните в стиле сборки: https://developer.android.com/studio/build/build-variants.html –

+0

Я уже рассмотрел вопрос, обозначенный как дубликат. Для меня, по крайней мере, это не помогло; заставив меня задать этот вопрос. –

+0

@thyagostall Я пошел по ссылке и смог добавить ароматы. Но когда я переключаю вариант, мое приложение не компилируется. Я обновлю код, чтобы показать. –

ответ

1

Добавить продукт ароматизаторов в вашей build.gradle как так:

android { 
    ... 
    productFlavors { 
     prod1 {} 
     prod2 {} 
    } 
} 

Затем поместите измененный значок для prod2 аромата в этом месте:

<project-dir>/app/src/prod2/res

Любые ресурсы, которые вы ставите под prod2, будут переопределять ресурсы от main.Разумеется, вы также можете использовать prod1, если хотите.

Вы можете прочитать здесь: https://developer.android.com/studio/build/build-variants.html

+0

Итак, я пошел по ссылке (первоначально из @thyagoStall), и я реализовал ее. Я сохраняю prod1 пустым и добавляю суффиксы в prod2. Проблема в том, что когда я изменяю сборку на prod2Release, мой код не компилируется. И виновник, похоже, является файлом R. Я убираю и ремонтирую, все равно ничего. –

+0

Отправьте полную справку, пожалуйста, –

+0

Нет ошибки. Это Android Studio. В нем говорится, что он не может разрешить R. Если вы используете IDE, есть красные squiggly строки для вещей, которые не компилируются. –

1

Полный пример:

В вашем build.gradle (Module: приложение) файла, создать два аромата разница продукта, как так:

android { 
    .... 
    productFlavors { 
     flavor1 { 
     } 
     flavor2 { 
     } 
    } 
} 

Теперь перейдите к File -> New -> Image Asset и выберите свой значок запуска для первого аромата, нажмите Далее, и там, где он говорит, каталог res, нажмите раскрывающееся меню и выберите flavor1, он должен выглядеть как t его:

Res Каталог: ЦСИ/flavor1/Рез

Нажми Finish и повторите то же самое, но для flavor2 с другим значком запуска.

Теперь, когда вы создаете свое приложение, в нижнем левом углу экрана находится вертикальное меню с надписью «Build Variants». Щелкните это, и вы можете выбрать вариант сборки, который вы хотели бы развернуть. Различные вкусы приведут к разным значкам запуска.

+0

Смотрите мой комментарий в другом сообщении. Ваша команда «Image Asset» была полезна. –

+0

если вы можете, отредактируйте исходный вопрос, чтобы включить журналы сборки – Bill

+0

Спасибо. +1 за вашу помощь. –

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