Gradle for Beginners (Build Types, Product Flavors, Build Variants, Source Sets)

This video covers the core concepts of Android Gradle. That includes different build types (debug, release, etc.), product flavors and their use, build variants and how to make use of different source sets.
Get the multi-module course here:
elopage.com/s/philipplackner/...
💻 Let me personally review your code and provide individual feedback, so it won't backfire and cost you a fortune in future:
elopage.com/s/philipplackner/...
Subscribe to my FREE newsletter for regular Android, Kotlin & Architecture advice!
pl-coding.com/newsletter
Join this channel to get access to perks:
/ @philipplackner
Join my Discord server:
/ discord
Regular programming advice on my Instagram page: / _philipplackner_
Checkout my GitHub: github.com/philipplackner
You like my free content? Here you can buy me a coffee:
www.buymeacoffee.com/philippl...
00:00 - What is Gradle?
03:18 - Gradle Groovy vs. Gradle Kotlin DSL
05:07 - The Gradle wrapper
08:38 - Build types
12:42 - Product flavors
19:22 - Source sets

Пікірлер: 124

  • @HiImMatthewN
    @HiImMatthewN2 жыл бұрын

    You sir is a gift from heaven for us Intermediate developers.

  • @disgruntled_llama
    @disgruntled_llamaАй бұрын

    Why is it that ever time I go searching for an explanation of something in Android development I always seem to end up on this channel? Thanks for all of this information, Philipp! Danke Schoen!

  • @trendystatuses161
    @trendystatuses1612 жыл бұрын

    Just what I needed, thank you

  • @dariusfathi5520
    @dariusfathi55202 жыл бұрын

    After years of android development, finally I'm going to understand product flavors! Great work Thanks

  • @mikec4220
    @mikec42202 жыл бұрын

    Hoooray! Finally ! This is soo important to learn as early as possible in your dev career and many of us fail to do so! Thanks a lot Philipp

  • @Alchemist10241

    @Alchemist10241

    Жыл бұрын

    you're right, I've postponed learning Gradle till this video and I've suffered the consequences

  • @shabari13
    @shabari1310 ай бұрын

    Thank you for doing this..For a Gradle beginner, this is such a good start

  • @dreablin
    @dreablin2 жыл бұрын

    Thanks, I faced with Flavors just 2 weeks ago on a new job :) It may be not 100% clear from this video, but you can use different res folders as well. Waiting for the next part!

  • @rowenarrow
    @rowenarrow2 жыл бұрын

    Fantastic video. I learned a lot on something I have wanted to learn about. Got some good notes from this and I am looking forward to watching more of your content.

  • @kushiskinng
    @kushiskinng2 жыл бұрын

    I m really glad I follow this channel.. Thanks Philip! Your content is really helpful

  • @devenderchaturvedi9903
    @devenderchaturvedi99032 жыл бұрын

    Best Gradle video ever. I'm desperately waiting for the next part in this series. Also, If we don't want to have 2 apks for free and paid features, instead we want to have it in one apk, and unlock paid feature modules on subscription basis. How to manage this use case? Please make a video on this. There's literally no video on it.

  • @stephensiapno7361

    @stephensiapno7361

    2 жыл бұрын

    If that is your usecase, then you don't need to create a buildFlavor. You just need to create a different module to separate the concern for free and paid features.

  • @devenderchaturvedi9903

    @devenderchaturvedi9903

    2 жыл бұрын

    @@stephensiapno7361 Thanks. Sure I'll try the multi-modular approach.

  • @haykmkrtchyan7093

    @haykmkrtchyan7093

    2 жыл бұрын

    @@devenderchaturvedi9903 If it's one apk and it's in app subscription, just use the billing library with multi module I guess

  • @sujit_ghimire
    @sujit_ghimire2 жыл бұрын

    Thanks Philipp for this video. You're the best.

  • @pandukaful
    @pandukaful2 жыл бұрын

    Thank you for creating this video, it is so helpful mate.

  • @adcmjbe
    @adcmjbe Жыл бұрын

    You do have a way of making complex concepts "almost" simple ;) Thanks for another great video ...

  • @amirhosseinparhizgar4528
    @amirhosseinparhizgar45282 жыл бұрын

    Nice one! waiting for next video on gradle. thank you Philipp

  • @rajeevkumargupta532
    @rajeevkumargupta5322 жыл бұрын

    Content and knowledge, up to the mark as always ❣️

  • @luke7551
    @luke75512 жыл бұрын

    Gradle is most confusing thing when I start to learn Android development. Thank you so much for such useful content. I hope you will making tutorials on working with rich text formatting on typing.

  • @augustocera574
    @augustocera5742 жыл бұрын

    Thank you for this video Philipp!

  • @elfarouk3306
    @elfarouk33062 жыл бұрын

    I can't wait for the next video ... *You are the best*

  • @adamjacob5482
    @adamjacob54822 жыл бұрын

    Thanks mate, really good content and very helpful as always

  • @TiagoDvl
    @TiagoDvl2 жыл бұрын

    As always: super helpful! I would love to have more insights on how do you know what folder to choose from that long list when you type "test" or "testDebug".

  • @PhilippLackner

    @PhilippLackner

    2 жыл бұрын

    It's really just about deciding which build variant you have specific behavior or specific resources for and then picking the folder for that build variant. Usually, you either select the /java folder or /res folder depending on what differs for that variant. If you write tests for it, you of course choose the test or androidTest source set depending on the type of tests.

  • @TheChustek
    @TheChustek Жыл бұрын

    OP explanation Philipp, Good Job!

  • @muhammadirvan8655
    @muhammadirvan86552 жыл бұрын

    Great explanation for beginner, its complicated sometime for new comers who learn Android Apps to know what is Gradle actually. thank you Philipp

  • @PhilippLackner

    @PhilippLackner

    2 жыл бұрын

    You're very welcome!

  • @kapileshrajput456
    @kapileshrajput4562 жыл бұрын

    Really great explanation, thank you.

  • @kushal7966
    @kushal7966 Жыл бұрын

    Thanks for the video .. its helpful at right time ....

  • @adeltarek9114
    @adeltarek91142 жыл бұрын

    I didn't watched it yet But of course I LIKED IT Because You decided to talk about something has a lack of resources, I appreciate it ❤️

  • @PhilippLackner

    @PhilippLackner

    2 жыл бұрын

    ❤️

  • @smelkova5826
    @smelkova5826 Жыл бұрын

    Thank you so much for this helpful video

  • @omidphoenix4883
    @omidphoenix48832 жыл бұрын

    Thanks brother! good job! 🙏

  • @chrisfelix9065
    @chrisfelix90652 жыл бұрын

    God bless you for treating this topic

  • @rileyfarro6801
    @rileyfarro68012 жыл бұрын

    I really needed this, thank you!

  • @PhilippLackner

    @PhilippLackner

    2 жыл бұрын

    You're welcome!

  • @milon27
    @milon272 жыл бұрын

    i was waiting for so long

  • @maverick7695
    @maverick76952 жыл бұрын

    Always amazing philipp ,, keep up the good tutorials ❤❤

  • @PhilippLackner

    @PhilippLackner

    2 жыл бұрын

    More to come!

  • @jeckonly5853
    @jeckonly58532 жыл бұрын

    So thanks!!!You help me a lot!! 😲

  • @axw-ei3fn
    @axw-ei3fn Жыл бұрын

    This videos tutorials is very helpful to me .

  • @jjhoninatan55sabadi
    @jjhoninatan55sabadi2 жыл бұрын

    I wish i could like your video 100 times!

  • @ashwinpatidar2878
    @ashwinpatidar28782 жыл бұрын

    Superb Explanation

  • @elangovankr110
    @elangovankr1102 жыл бұрын

    Very useful video. Expecting more like this.

  • @PhilippLackner

    @PhilippLackner

    2 жыл бұрын

    Sure 👍

  • @jamief123
    @jamief1232 жыл бұрын

    Thanks for this. Gradle is a bit of a mystery to me and I never really understood what it was doing.

  • @PhilippLackner

    @PhilippLackner

    2 жыл бұрын

    Hope it helped!

  • @alihosseinnezhad2957
    @alihosseinnezhad29572 жыл бұрын

    Interesting. Thanks Philip 😊.

  • @niroshanrathnayake7002
    @niroshanrathnayake70022 жыл бұрын

    Really helpful. Good one. Thank You

  • @unaisulhadi9102
    @unaisulhadi91022 жыл бұрын

    Amazing video! Please do a video about Kotlin DSL also.

  • @cashat
    @cashat Жыл бұрын

    Thank you for this awesome video , Wil you organize it with the second video in a playlist?! I couldn't find the other one

  • @khaled.noordin
    @khaled.noordin2 жыл бұрын

    Great topic. Thanks a lot

  • @timurabdyraev4447
    @timurabdyraev44472 жыл бұрын

    Beg you: Make a detailed video about Gradle version catalogs. Really need it now

  • @haykmkrtchyan7093
    @haykmkrtchyan70932 жыл бұрын

    Great tutorial. Just one more question. If we have some flavours, do we use source sets to implement the flavour specific functionality? Like one source set for the free app and one source set for the paid one?

  • @samsammaniamantap
    @samsammaniamantap2 жыл бұрын

    Thanks Phil, sekarang saya lebih mengerti tentang Flavors

  • @Sepphirex
    @Sepphirex2 жыл бұрын

    Thank you so much!

  • @CivoMT
    @CivoMT2 жыл бұрын

    Great and easy to understand as always! Philip could you make a video with explanation of MVI architecture? Or Even some application with usage of this architecture? More and more companies are asking for MVI as it suit pretty well with jetpack compose. I think lot of people would appreciate it. Thank y :-)!

  • @thishandleistaken.

    @thishandleistaken.

    2 жыл бұрын

    Great Idea, also I would like to see series or maybe a 3hour long video of him making a real app from absolute scratch (with setting up gradle, manifest file, all the implementations) and show the process of uploading it into play store

  • @kkp559

    @kkp559

    2 жыл бұрын

    Did you read about Elmslie from vivid money? It’s good library to understand mvi flow

  • @dawidtyburek

    @dawidtyburek

    2 жыл бұрын

    This is an amazing MVI talk imho kzread.info/dash/bejne/gox2usWBgciqfKg.html

  • @anandbehera1969
    @anandbehera19692 жыл бұрын

    Helpful Content.. Thanks

  • @tiamabderezai5374
    @tiamabderezai5374 Жыл бұрын

    Philipp! Make a video explaining build variants and flavors (release, debug, etc) please

  • @santoshs490
    @santoshs4902 жыл бұрын

    Great video...!! Thanks

  • @mustafaammar551
    @mustafaammar5512 жыл бұрын

    Very cool video thank you BRO 🔥🔥🔥 👍👍👍

  • @milon27
    @milon272 жыл бұрын

    love you man

  • @amineayachi335
    @amineayachi3352 жыл бұрын

    what a great video thanks

  • @alphacoder3822
    @alphacoder38222 жыл бұрын

    2 german dudes making amazing android content. 1. Philip 2. Florin walther from coding in flow

  • @anmolkulshrestha5855
    @anmolkulshrestha58552 жыл бұрын

    Thanks man

  • @hdkloh6857
    @hdkloh68572 жыл бұрын

    Nice video as always.... Android/Google team needs to make gradle thing similar to iOS... If a fresher gets a gradle sync failed error it's a nightmare for them....

  • @studiomacbookpro159
    @studiomacbookpro1592 жыл бұрын

    very nice topic

  • @sumukhaithal2819
    @sumukhaithal28192 жыл бұрын

    Simple and easy to understand. Thank you. Could you make a videos about applying pro guard and r8 for a project as well ?

  • @PhilippLackner

    @PhilippLackner

    2 жыл бұрын

    Already have that, search on my channel 😁

  • @sumukhaithal2819

    @sumukhaithal2819

    2 жыл бұрын

    @@PhilippLackner ah my bad !. Thanks again

  • @stonedcodingtom9097
    @stonedcodingtom90974 ай бұрын

    It helped me, bump

  • @lee-zl2cu
    @lee-zl2cu2 жыл бұрын

    thank you

  • @gautamsharma7607
    @gautamsharma76072 жыл бұрын

    thanku so much

  • @vinaykumarpatel649
    @vinaykumarpatel6492 жыл бұрын

    Thanks

  • @masoudfallahpour3650
    @masoudfallahpour36502 жыл бұрын

    Just a small correction. At 2:29 you say "package name" when highlighting the "applicationId" in the IDE. Package name is not the same thing as application ID.

  • @TerryboyVictor
    @TerryboyVictor2 жыл бұрын

    On the Minimum SDK part, how do you then upload to the store targeting difference SDK if you can only upload one apk/bundle ? Or by building it packages both and on installing on individual device, it will target the device API and choose appropriately ?

  • @safionweb
    @safionweb Жыл бұрын

    Amazing

  • @datel666
    @datel6662 жыл бұрын

    Nice vid!

  • @alexdelarge2584
    @alexdelarge25842 жыл бұрын

    Automatically like

  • @coffeebytez
    @coffeebytez2 жыл бұрын

    great video!

  • @PhilippLackner

    @PhilippLackner

    2 жыл бұрын

    Glad you enjoyed it

  • @ff2x701
    @ff2x701 Жыл бұрын

    Thannkkk Yooouuuuu!!!!

  • @varshabhatia5487
    @varshabhatia54872 жыл бұрын

    Nice video. Thank you. I have a question: For example in my project I have 4 variants/ product flavours. I have one file which is already created in main folder but I want to use the same file with extra code for different product flavours. So is that possible via source set? I tried it but it won’t work. Example: I have xyz class in main folder. I cretaed 4 product flavours in build.gradle. Now I want to use the same xyz file with some extra code. I tried to copy and pasted the same file into newly created sourceset folder with some extra connection. But it won’t work that way.

  • @AdityaMishra-cj7kt
    @AdityaMishra-cj7kt10 ай бұрын

    Awesome

  • @alannelson4001
    @alannelson4001 Жыл бұрын

    Two questions: 1.) How do we define from where the implementations SDKs are pulled from? I know it's usually from maven repository but is it defined in the gradle someplace? 2.) Does anyone have any good resources for establishing a "bypassLogin" build that would have all mock data provided for all API responses?

  • @chanikafernando4928
    @chanikafernando49282 жыл бұрын

    Thank you for the cool video. I just encountered an issue after uograde to kotlin 1.6.10. i have fragments with tablayout and viewpager fragments. When i go to another screen and come back, it is not loading viewpager fragments. This happened after upgrading kotlin to 1.6.10. Do you have any idea why? Could you please help?

  • @Basirafeef
    @Basirafeef11 ай бұрын

    thanks for sharing great knowledge sir. sir i created an app for multiple people from the same source with different name, themes, server and google's .json configuration file. the problem is when i update one i need to update others too. is there a why to create multiple apps from the same source with different name, themes, server and google's .json configuration file from one project with different source sets. thanks.

  • @imnithish
    @imnithish2 жыл бұрын

    🔥

  • @salmaK20012
    @salmaK20012 Жыл бұрын

    Hi, is ktor currently a good choice for backend development?

  • @oxitroy
    @oxitroy2 жыл бұрын

    I guess i'm missing something about products flavor and having one app that can have different minsdk ; If you have one product flavor with minSdk 21 and one with minSdk 18, when the app is released on store will it be available to phone with sdk 18 ? Even with product flavor you are forced to release 2 app with different minsdk, dont you? Great video as always

  • @PhilippLackner

    @PhilippLackner

    2 жыл бұрын

    yes, but you still have one code base instead of two

  • @user-kj8xk5qu2x
    @user-kj8xk5qu2x2 жыл бұрын

    Please Help I am new to this channel First I started learning kotlin language and fundamental tutorial and I am currently working on an application. Is the next step to learn Corotin Course or mvvm and add there are two mvvm series on the channel what is the difference between them thank you philipp

  • @rafaelparanhos7435
    @rafaelparanhos7435 Жыл бұрын

    Is there a way to config a flavor with plugin com.android.application and other flavor with com.android.library. If so, how to config it?

  • @AndroidDojo
    @AndroidDojo2 жыл бұрын

    Wow, this is cool Man, can you create a GradleBasicplaylist please 🙏, this is soooooo important. There are no videos talking about Android Gradle exactly like this 😀.

  • @PhilippLackner

    @PhilippLackner

    2 жыл бұрын

    This video is about gradle basics 😅

  • @MrNDQuattro
    @MrNDQuattro Жыл бұрын

    Thanks for the vid. Why would we need apks with different minSdk? Anyway we need to handle API check logic in code if we use new features.

  • @PhilippLackner

    @PhilippLackner

    Жыл бұрын

    If a whole feature is only for a certain min sdk, you don't want to include all that code in an app which can't even use that feature

  • @rapidretrovenue563
    @rapidretrovenue563 Жыл бұрын

    does gradle HAVE to be in C drive? I need to move it to D, would that be possible? If so, how do I point to the directory? Thanks in advance everyone!

  • @pickemparty
    @pickemparty9 ай бұрын

    Can you show Generating Multiple APKs for Android ABIs (diff CPUs) in Gradle?!

  • @clerdsonjuca3823
    @clerdsonjuca38232 жыл бұрын

    thanks ,videos CI/CD

  • @manishakamble7473
    @manishakamble7473Ай бұрын

    👍

  • @erasmonepomuceno1719
    @erasmonepomuceno17192 жыл бұрын

    Hi Phillip, can you make a video how to use AD (Banner or Native) in recicleview but gettind data from api? I'm bennigner in android and i'm trying this, i see a lot tutorial but don't work with getting data from api

  • @PhilippLackner

    @PhilippLackner

    2 жыл бұрын

    I'll put it on my list :)

  • @erasmonepomuceno1719

    @erasmonepomuceno1719

    2 жыл бұрын

    @@PhilippLackner Tks a lot

  • @astaghfirullahalzimastaghf3648
    @astaghfirullahalzimastaghf3648 Жыл бұрын

    bro please help me my gradle wrapper build fails

  • @astaghfirullahalzimastaghf3648
    @astaghfirullahalzimastaghf3648 Жыл бұрын

    i want to learn MVVM but i dont understand the code you wrote in the build.gradle (project) .. because it involves buildscript object and allprojects object.. in my project it only contains plugins object..so that s why i am here

  • @rubinho388

    @rubinho388

    Жыл бұрын

    in recent android studio versions the items in the gradle are displayed a little bit differently from olders version. If you want to add buildScript to your project level gradle just add it above the plugins block

  • @MrOmsa12
    @MrOmsa127 ай бұрын

    I did as you did in the tutorial but i could not use freeMinSdk21DebugImplementation, for some reason it did not work for me.

  • @pickemparty
    @pickemparty9 ай бұрын

    Lastly, you didnt cover splits... is there a reason for that?

  • @quantumgaming7
    @quantumgaming72 жыл бұрын

    It that course price really 28900 euros??

  • @quantumgaming7

    @quantumgaming7

    2 жыл бұрын

    If it is in India it’s like 2.4 Millions an average person don’t even earn that much in there entire life 🌝

  • @kamertonaudiophileplayer847
    @kamertonaudiophileplayer8472 жыл бұрын

    Awesome, more stupid system for building apps than Gradle I never met. Nice,that somebody tried to explain it.

  • @BlackSkyCrew
    @BlackSkyCrew Жыл бұрын

    I'm completely newby in this topic. And I have problems with run your old and new examples from Github. I don't undestand how people maintains android projects, if when I or someone else try to run this project on his local mashine and need to fight with many buid issues, which is not have relation to real code writing. This is a big pain in my life now...

  • @h4ktbtw
    @h4ktbtw2 жыл бұрын

    Gradle takes endless time to build? Oh boy, have you ever used Maven to build Java/Kotlin project?

  • @WeslleyCampos-kw3pm
    @WeslleyCampos-kw3pm Жыл бұрын

    Clean Task is no longer necessary, it's default now.

  • @ReddSpark
    @ReddSpark Жыл бұрын

    Had to wait till 2:20 to actually find an answer to "What the fook is gradle?"

  • @marvelrivera1194
    @marvelrivera11945 ай бұрын

    I hate gradle

  • @AnB-em9wo
    @AnB-em9wo7 ай бұрын

    I recommend you upgrade your microphone. Sound quality on your channel is no good

  • @jopadjr
    @jopadjr2 жыл бұрын

    Hi Philipp, after a year of absence in the Android development, I noticed the build.gradle project level has a different setup. It was like this before with dependencies, etc. dependencies { classpath 'com.android.tools.build:gradle:7.2.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } Was there an explanation (been googling for answers) on converting this to the new format shown at 2:45? Thanks in advance

  • @milon27
    @milon272 жыл бұрын

    thank you