2017-01-09 40 views
1

ANSWER的gradle使用來創建從單個源

確定兩個生產的apk。所以這裏發生了很多。所以讓我來回答一下。

首先創建所需的口味:

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

    } 
} 

其次,得到所有你可能需要的路徑結構的列表:在搖籃圖標

  • 點擊IDE
  • 您的項目>任務> android,點擊sourceSet:這將顯示您可能需要的所有目錄結構
  • 右鍵單擊sourceSet並單擊運行以獲取列表的目錄結構
  • 請勿將google-services.json文件從/ app移除到/ main。然後製作google-services.json的副本,並在每個flavor目錄下放置一個副本。所以對我來說,例如,我把一個在/培訓
  • 重要轉到開發者控制檯,併爲每種口味的憑據:生產和調試。並用正確的信息更新每個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 
+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,那些沒有編譯的東西會有紅色的波浪線。 –

1

完整的例子:

在你的build.gradle(模塊:應用程序)文件,創建兩個差異產品的口味,像這樣:

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

現在轉到File -> New -> Image Asset並選擇第一種味道的啓動器圖標,單擊下一步,並在其中顯示res目錄點擊下拉菜單並選擇flavor1,它應該看起來像t他:

res目錄:SRC/flavor1/RES

點擊完成並重復同樣的事情,但對於其他啓動器圖標flavor2。

現在,當您構建應用程序時,在屏幕的左下角有一個標記爲「構建變體」的垂直菜單。點擊它,你可以選擇你想要部署的構建版本。不同的味道會導致不同的發射器圖標。

+0

在其他帖子中看到我的評論。你的'Image Asset'指令很有幫助。 –

+0

如果可以,請編輯原始問題以包含構建日誌 – Bill

+0

謝謝。 +1爲您提供幫助。 –