【问题标题】:using gradle to create two production apks from single source [duplicate]使用 gradle 从单一来源创建两个生产 apk [重复]
【发布时间】:2017-01-09 18:18:17
【问题描述】:

回答

好的。所以这里发生了很多事情。所以让我来整理答案。

首先创建所需的口味:

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

    }
}

其次,通过以下方式获取您可能需要的所有路径结构的列表:

  • 点击 IDE 右侧的 Gradle 图标
  • 在您的项目 > 任务 > android 下,单击 sourceSet:这将显示您可能需要的所有目录结构
  • 右键sourceSet,点击run,获取目录结构列表
  • 不要将 google-services.json 文件从 /app 删除到 /main。然后复制google-services.json 并在每个风味目录下放置一份。所以以我为例,我在 /training 下放置了一个
  • 重要提示 转到开发者控制台,并为每种风格创建凭据:生产和调试。并使用正确的信息更新每个 google-services.json 文件。

问题

我可以告诉您业务需求,但这有点离题。我需要从一个源代码创建两个“生产”APK。没有什么可以改变的。这是完全相同的应用程序,除了有两个,每个都有不同的启动器图标。我什至不知道如何开始做。有没有人做到这一点,不介意分享?我在 Mac 上使用带有 Gradle 的 Android Studio。

更新

根据反馈,我能够将我的 gradle 文件更新为此

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

现在 fullDebug 和 fullRelease 可以正常编译。但是当我将 Build Variant 更改为 trainingDebug 或 trainingRelease 时,代码不再编译:R 无法解析。

编辑:

我终于明白你们的要求了。这是跟踪:

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

【问题讨论】:

  • 我已经查看了标记为重复的问题。至少对我来说,它没有帮助。引导我问这个问题。
  • @thyagostall 我点击了链接并能够添加口味。但是当我切换变体时,我的应用程序没有编译。我将更新代码以显示。

标签: android android-studio gradle apk


【解决方案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

【讨论】:

  • 所以我遵循了链接(最初来自@thyagoStall)并且我已经实现了这些风格。我将 prod1 保留为空,并在 prod2 中添加后缀。问题是当我将构建更改为 prod2Release 时,我的代码没有编译。罪魁祸首似乎是R文件。我清理并重建,仍然没有。
  • 请发布完整的错误
  • 没有错误跟踪。这是安卓工作室。它说它无法解析 R。如果您使用 IDE,则会有红色波浪线表示无法编译的内容。
  • 虽然我将此标记为已接受的答案,但您应该阅读原始帖子以查看完整答案和潜在的错误修复。
【解决方案2】:

一个完整的例子:

在您的 build.gradle (Module: app) 文件中,创建两种不同的产品风格,如下所示:

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

现在转到File -> New -> Image Asset 并选择第一个风味的启动器图标,单击下一步,然后在显示 res 目录的位置单击下拉菜单并选择风味1,它应该如下所示:

资源目录:src/flavor1/res

单击 Finish 并重复相同的操作,但使用另一个启动器图标为 flavor2。

现在,当您构建应用时,屏幕左下角有一个标有“构建变体”的垂直菜单。单击它,您可以选择要部署的构建变体。不同的风格会导致不同的启动器图标。

【讨论】:

  • 在另一篇文章中查看我的评论。您的 Image Asset 说明很有帮助。
  • 如果可以,请编辑原始问题以包含构建日志
  • 谢谢。 +1 为您提供帮助。
猜你喜欢
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 2022-01-05
  • 1970-01-01
  • 2016-11-21
  • 1970-01-01
  • 2021-12-13
  • 1970-01-01
相关资源
最近更新 更多