Gradle for Android and Java

بواسطة: Udacity

Overview

This course explores how the Gradle build tool compiles and packages apps, and you'll learn to customize the build process. The first half of this course is for anyone interested in Gradle, build automation, and continuous delivery of software.

The latter half of the course reveals the magic that happens after you hit the "Run" button in Android Studio. You'll also explore advanced Android topics, learning to configure free vs paid app flavors, create and integrate Android libraries, test your app, and prepare your app for the Play Store.

Syllabus

  • Gradle Fundamentals
    • Understand Gradle's capabilities and role in Java and Android builds.,Learn the Gradle task model, and put together your first build!,Explore the Gardle build lifecycle.
  • Gradle for Java
    • Understand the Gradle plugin system, and explore the Java plugin.,Build and test Java projects.,Learn to use Gradle for Dependency management.
  • Gradle for Android
    • Use Gradle in Android Studio.,Explore the features of the Gradle Android plugin and build process.,Build an Android app with free and paid product flavors.
  • Advanced Android Builds
    • Create Android libraries and apps that depend on them.,Use advanced features of the Android Gradle Plugin to configure signing, obfuscation, and optimization.,Configure Android testing.
  • Final Project
    • Build and test a joke telling app with a free ad-supported version and a paid version.,As a bonus, deploy a Google Cloud Messaging backend to supply the jokes.

Taught by

Jeremy Silver and Mark Vieira

Gradle for Android and Java
الذهاب الي الدورة

Gradle for Android and Java

بواسطة: Udacity

  • Udacity
  • مجانية
  • الإنجليزية
  • متاح شهادة
  • متاح في أي وقت
  • advanced
  • N/A
8.1.2PHP Version227msRequest Duration2MBMemory UsageGET ar/الدورات/{slug}Route
    • Booting (134ms)
    • Application (91.86ms)
    • 1 x Booting (59.21%)
      134.15ms
      1 x Application (40.54%)
      91.86ms
      14 templates were rendered
      • public.courses.show (resources/views/public/courses/show.blade.php)3bladefile
        Params
        0
        course
        1
        links
        2
        config
      • public.courses.partials.breadcrumbs (resources/views/public/courses/partials/breadcrumbs.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.courses.partials.heading (resources/views/public/courses/partials/heading.blade.php)7bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
        6
        classes
      • public.courses.partials.details (resources/views/public/courses/partials/details.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.courses.partials.breadcrumbs (resources/views/public/courses/partials/breadcrumbs.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.courses.partials.heading (resources/views/public/courses/partials/heading.blade.php)7bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
        6
        classes
      • public.layouts.main (resources/views/public/layouts/main.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.layouts.partials.meta (resources/views/public/layouts/partials/meta.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.layouts.partials.navbar (resources/views/public/layouts/partials/navbar.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.auth.profile.partials.links (resources/views/public/auth/profile/partials/links.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.auth.profile.partials.link (resources/views/public/auth/profile/partials/link.blade.php)8bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
        6
        route
        7
        title
      • public.auth.profile.partials.link (resources/views/public/auth/profile/partials/link.blade.php)8bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
        6
        route
        7
        title
      • public.auth.profile.partials.link (resources/views/public/auth/profile/partials/link.blade.php)8bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
        6
        route
        7
        title
      • public.layouts.partials.flash-session (resources/views/public/layouts/partials/flash-session.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      uri
      GET ar/الدورات/{slug}
      middleware
      web, localize:ar
      controller
      App\Http\Controllers\CourseController@show
      as
      ar.courses.show
      namespace
      prefix
      /ar
      where
      file
      app/Http/Controllers/CourseController.php:17-35
      7 statements were executed11.02ms
      • select * from `courses` where `slug_ar` = 'gradle-for-android-and-java' limit 1
        9.53ms/app/Http/Controllers/CourseController.php:20corspedia
        Metadata
        Bindings
        • 0. gradle-for-android-and-java
        Backtrace
        • 17. /app/Http/Controllers/CourseController.php:20
        • 18. /vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
        • 19. /vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:43
        • 20. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:260
        • 21. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:205
      • update `courses` set `visitors` = `visitors` + 1, `courses`.`updated_at` = '2025-06-02 02:19:47' where `id` = 6835
        660μs/app/Http/Controllers/CourseController.php:21corspedia
        Metadata
        Bindings
        • 0. 2025-06-02 02:19:47
        • 1. 6835
        Backtrace
        • 17. /app/Http/Controllers/CourseController.php:21
        • 18. /vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
        • 19. /vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:43
        • 20. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:260
        • 21. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:205
      • select `id`, `name_en`, `name_ar`, `topic_id`, `slug_en`, `slug_ar` from `subjects` where `subjects`.`id` in (197)
        170μs/app/Http/Controllers/CourseController.php:23corspedia
        Metadata
        Backtrace
        • 20. /app/Http/Controllers/CourseController.php:23
        • 21. /vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
        • 22. /vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:43
        • 23. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:260
        • 24. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:205
      • select `id`, `name_en`, `name_ar`, `slug_en`, `slug_ar` from `topics` where `topics`.`id` in (1)
        140μs/app/Http/Controllers/CourseController.php:23corspedia
        Metadata
        Backtrace
        • 25. /app/Http/Controllers/CourseController.php:23
        • 26. /vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
        • 27. /vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:43
        • 28. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:260
        • 29. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:205
      • select * from `institutions` where `institutions`.`id` in (28) and `institutions`.`deleted_at` is null
        180μs/app/Http/Controllers/CourseController.php:23corspedia
        Metadata
        Backtrace
        • 20. /app/Http/Controllers/CourseController.php:23
        • 21. /vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
        • 22. /vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:43
        • 23. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:260
        • 24. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:205
      • select * from `providers` where `providers`.`id` in (6) and `providers`.`deleted_at` is null
        150μs/app/Http/Controllers/CourseController.php:23corspedia
        Metadata
        Backtrace
        • 20. /app/Http/Controllers/CourseController.php:23
        • 21. /vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
        • 22. /vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:43
        • 23. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:260
        • 24. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:205
      • select * from `html_files` where `html_files`.`id` = 6826 limit 1
        190μs/app/Models/Course.php:84corspedia
        Metadata
        Bindings
        • 0. 6826
        Backtrace
        • 21. /app/Models/Course.php:84
        • 28. view::public.courses.show:29
        • 30. /vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php:125
        • 31. /vendor/laravel/framework/src/Illuminate/View/Engines/PhpEngine.php:58
        • 32. /vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php:72
      App\Models\HtmlFile
      1
      App\Models\Provider
      1
      App\Models\Institution
      1
      App\Models\Topic
      1
      App\Models\Subject
      1
      App\Models\Course
      1
        _token
        FFVzp3Iw7H4jANSB40Zrjl6zbsvEbuorSurZqqY5
        locale
        ar
        _previous
        array:1 [ "url" => "https://www.corspedia.com/ar/%D8%A7%D9%84%D8%AF%D9%88%D8%B1%D8%A7%D8%AA/gradle...
        _flash
        array:2 [ "old" => [] "new" => [] ]
        PHPDEBUGBAR_STACK_DATA
        []
        path_info
        /ar/%D8%A7%D9%84%D8%AF%D9%88%D8%B1%D8%A7%D8%AA/gradle-for-android-and-java
        status_code
        200
        
        status_text
        OK
        format
        html
        content_type
        text/html; charset=UTF-8
        request_query
        []
        
        request_request
        []
        
        request_headers
        0 of 0
        array:24 [ "cf-ipcountry" => array:1 [ 0 => "US" ] "cf-connecting-ip" => array:1 [ 0 => "3.141.202.105" ] "cdn-loop" => array:1 [ 0 => "cloudflare; loops=1" ] "x-forwarded-proto" => array:1 [ 0 => "https" ] "x-forwarded-for" => array:1 [ 0 => "3.141.202.105" ] "sec-fetch-site" => array:1 [ 0 => "none" ] "accept" => array:1 [ 0 => "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7" ] "user-agent" => array:1 [ 0 => "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)" ] "upgrade-insecure-requests" => array:1 [ 0 => "1" ] "sec-ch-ua-platform" => array:1 [ 0 => ""Windows"" ] "sec-ch-ua-mobile" => array:1 [ 0 => "?0" ] "sec-ch-ua" => array:1 [ 0 => ""Chromium";v="130", "HeadlessChrome";v="130", "Not?A_Brand";v="99"" ] "cache-control" => array:1 [ 0 => "no-cache" ] "pragma" => array:1 [ 0 => "no-cache" ] "sec-fetch-dest" => array:1 [ 0 => "document" ] "cf-ray" => array:1 [ 0 => "949377c31de4c474-ORD" ] "accept-encoding" => array:1 [ 0 => "gzip, br" ] "priority" => array:1 [ 0 => "u=0, i" ] "sec-fetch-user" => array:1 [ 0 => "?1" ] "sec-fetch-mode" => array:1 [ 0 => "navigate" ] "cf-visitor" => array:1 [ 0 => "{"scheme":"https"}" ] "host" => array:1 [ 0 => "www.corspedia.com" ] "content-length" => array:1 [ 0 => "" ] "content-type" => array:1 [ 0 => "" ] ]
        request_server
        0 of 0
        array:50 [ "USER" => "www-data" "HOME" => "/var/www" "HTTP_CF_IPCOUNTRY" => "US" "HTTP_CF_CONNECTING_IP" => "3.141.202.105" "HTTP_CDN_LOOP" => "cloudflare; loops=1" "HTTP_X_FORWARDED_PROTO" => "https" "HTTP_X_FORWARDED_FOR" => "3.141.202.105" "HTTP_SEC_FETCH_SITE" => "none" "HTTP_ACCEPT" => "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7" "HTTP_USER_AGENT" => "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)" "HTTP_UPGRADE_INSECURE_REQUESTS" => "1" "HTTP_SEC_CH_UA_PLATFORM" => ""Windows"" "HTTP_SEC_CH_UA_MOBILE" => "?0" "HTTP_SEC_CH_UA" => ""Chromium";v="130", "HeadlessChrome";v="130", "Not?A_Brand";v="99"" "HTTP_CACHE_CONTROL" => "no-cache" "HTTP_PRAGMA" => "no-cache" "HTTP_SEC_FETCH_DEST" => "document" "HTTP_CF_RAY" => "949377c31de4c474-ORD" "HTTP_ACCEPT_ENCODING" => "gzip, br" "HTTP_PRIORITY" => "u=0, i" "HTTP_SEC_FETCH_USER" => "?1" "HTTP_SEC_FETCH_MODE" => "navigate" "HTTP_CF_VISITOR" => "{"scheme":"https"}" "HTTP_HOST" => "www.corspedia.com" "REDIRECT_STATUS" => "200" "SERVER_NAME" => "corspedia.com" "SERVER_PORT" => "443" "SERVER_ADDR" => "141.95.147.152" "REMOTE_USER" => "" "REMOTE_PORT" => "42166" "REMOTE_ADDR" => "172.69.17.130" "SERVER_SOFTWARE" => "nginx/1.18.0" "GATEWAY_INTERFACE" => "CGI/1.1" "HTTPS" => "on" "REQUEST_SCHEME" => "https" "SERVER_PROTOCOL" => "HTTP/2.0" "DOCUMENT_ROOT" => "/var/www/corspedia/public" "DOCUMENT_URI" => "/index.php" "REQUEST_URI" => "/ar/%D8%A7%D9%84%D8%AF%D9%88%D8%B1%D8%A7%D8%AA/gradle-for-android-and-java" "SCRIPT_NAME" => "/index.php" "CONTENT_LENGTH" => "" "CONTENT_TYPE" => "" "REQUEST_METHOD" => "GET" "QUERY_STRING" => "" "SCRIPT_FILENAME" => "/var/www/corspedia/public/index.php" "PATH_INFO" => "" "FCGI_ROLE" => "RESPONDER" "PHP_SELF" => "/index.php" "REQUEST_TIME_FLOAT" => 1748830787.3221 "REQUEST_TIME" => 1748830787 ]
        request_cookies
        []
        
        response_headers
        0 of 0
        array:5 [ "content-type" => array:1 [ 0 => "text/html; charset=UTF-8" ] "cache-control" => array:1 [ 0 => "no-cache, private" ] "date" => array:1 [ 0 => "Mon, 02 Jun 2025 02:19:47 GMT" ] "set-cookie" => array:2 [ 0 => "XSRF-TOKEN=eyJpdiI6Im5NdHh5M1FvSGdSU3lPMkFjVjMxOUE9PSIsInZhbHVlIjoieGlOY3VuWWRlTUVvTk5aRThRemEwNEc4dkZkWWlpOEF3RUtRRGtwbHNVekR0Z0U0VktYM2RFZ1ZqeXdCMXdYZTJuNEdlWHIreEZUc2tNc3ZEK3Z1ZE8xdmJGY3FBSjhYSW1TdVBHUjVSbVpxTnB1VjRUeU92VVMzbC9tTVY5Q3kiLCJtYWMiOiJiZWE0NGM5ZDI4MzIzOTk3M2IxMmViZTI0MjVjYmQ2ZDQzOTZlZjhkZjU4NjJmZGVmMDg0ZDU2Mjc2MTIzNDBjIiwidGFnIjoiIn0%3D; expires=Mon, 02 Jun 2025 04:19:47 GMT; Max-Age=7200; path=/; samesite=laxXSRF-TOKEN=eyJpdiI6Im5NdHh5M1FvSGdSU3lPMkFjVjMxOUE9PSIsInZhbHVlIjoieGlOY3VuWWRlTUVvTk5aRThRemEwNEc4dkZkWWlpOEF3RUtRRGtwbHNVekR0Z0U0VktYM2RFZ1ZqeXdCMXdYZTJuNEdlW" 1 => "laravel_session=eyJpdiI6IlpqTVVBS3BZZUN1alNYMGdqTzZScnc9PSIsInZhbHVlIjoid0hydlV6L05rQ3V0bXVLUlFQQlhkTlNkeTl3ODY3NjZZdnJPcFZ0Qk5qWFFJbldJMXVicFBvT2llWkc4L0JIUEhaclZHVE94UE01SUF4QlZSZ29PTDU3VVg1cktwSmlNSCtQZERibDlrNk9CYmZDMlFObXRLamJjVUc5bHZ6VW8iLCJtYWMiOiI5NTc3MmI5ODBmOTNkZDY1OWJjNmEwZDQ5MWJjZjFjZWZhZDM1YmNhYjBkNmQ0YzBiODdlOGM3ZDA1MmY0ODU0IiwidGFnIjoiIn0%3D; expires=Mon, 02 Jun 2025 04:19:47 GMT; Max-Age=7200; path=/; httponly; samesite=laxlaravel_session=eyJpdiI6IlpqTVVBS3BZZUN1alNYMGdqTzZScnc9PSIsInZhbHVlIjoid0hydlV6L05rQ3V0bXVLUlFQQlhkTlNkeTl3ODY3NjZZdnJPcFZ0Qk5qWFFJbldJMXVicFBvT2llWkc4L0JIUEha" ] "Set-Cookie" => array:2 [ 0 => "XSRF-TOKEN=eyJpdiI6Im5NdHh5M1FvSGdSU3lPMkFjVjMxOUE9PSIsInZhbHVlIjoieGlOY3VuWWRlTUVvTk5aRThRemEwNEc4dkZkWWlpOEF3RUtRRGtwbHNVekR0Z0U0VktYM2RFZ1ZqeXdCMXdYZTJuNEdlWHIreEZUc2tNc3ZEK3Z1ZE8xdmJGY3FBSjhYSW1TdVBHUjVSbVpxTnB1VjRUeU92VVMzbC9tTVY5Q3kiLCJtYWMiOiJiZWE0NGM5ZDI4MzIzOTk3M2IxMmViZTI0MjVjYmQ2ZDQzOTZlZjhkZjU4NjJmZGVmMDg0ZDU2Mjc2MTIzNDBjIiwidGFnIjoiIn0%3D; expires=Mon, 02-Jun-2025 04:19:47 GMT; path=/XSRF-TOKEN=eyJpdiI6Im5NdHh5M1FvSGdSU3lPMkFjVjMxOUE9PSIsInZhbHVlIjoieGlOY3VuWWRlTUVvTk5aRThRemEwNEc4dkZkWWlpOEF3RUtRRGtwbHNVekR0Z0U0VktYM2RFZ1ZqeXdCMXdYZTJuNEdlW" 1 => "laravel_session=eyJpdiI6IlpqTVVBS3BZZUN1alNYMGdqTzZScnc9PSIsInZhbHVlIjoid0hydlV6L05rQ3V0bXVLUlFQQlhkTlNkeTl3ODY3NjZZdnJPcFZ0Qk5qWFFJbldJMXVicFBvT2llWkc4L0JIUEhaclZHVE94UE01SUF4QlZSZ29PTDU3VVg1cktwSmlNSCtQZERibDlrNk9CYmZDMlFObXRLamJjVUc5bHZ6VW8iLCJtYWMiOiI5NTc3MmI5ODBmOTNkZDY1OWJjNmEwZDQ5MWJjZjFjZWZhZDM1YmNhYjBkNmQ0YzBiODdlOGM3ZDA1MmY0ODU0IiwidGFnIjoiIn0%3D; expires=Mon, 02-Jun-2025 04:19:47 GMT; path=/; httponlylaravel_session=eyJpdiI6IlpqTVVBS3BZZUN1alNYMGdqTzZScnc9PSIsInZhbHVlIjoid0hydlV6L05rQ3V0bXVLUlFQQlhkTlNkeTl3ODY3NjZZdnJPcFZ0Qk5qWFFJbldJMXVicFBvT2llWkc4L0JIUEha" ] ]
        session_attributes
        0 of 0
        array:5 [ "_token" => "FFVzp3Iw7H4jANSB40Zrjl6zbsvEbuorSurZqqY5" "locale" => "ar" "_previous" => array:1 [ "url" => "https://www.corspedia.com/ar/%D8%A7%D9%84%D8%AF%D9%88%D8%B1%D8%A7%D8%AA/gradle-for-android-and-java" ] "_flash" => array:2 [ "old" => [] "new" => [] ] "PHPDEBUGBAR_STACK_DATA" => [] ]