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 Version254msRequest Duration2MBMemory UsageGET ar/الدورات/{slug}Route
    • Booting (153ms)
    • Application (100ms)
    • 1 x Booting (60.25%)
      152.92ms
      1 x Application (39.51%)
      100.29ms
      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 executed15.95ms
      • select * from `courses` where `slug_ar` = 'gradle-for-android-and-java' limit 1
        14.1ms/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-04-10 05:15:50' where `id` = 6835
        860μs/app/Http/Controllers/CourseController.php:21corspedia
        Metadata
        Bindings
        • 0. 2025-04-10 05:15:50
        • 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)
        330μ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)
        170μ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
        160μ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
        180μ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
        TMU7F4L2NCwu2tFMA4AdsQnAfa5mxVcqyPznNSS7
        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 => "18.218.121.8" ] "cdn-loop" => array:1 [ 0 => "cloudflare; loops=1" ] "x-forwarded-proto" => array:1 [ 0 => "https" ] "cf-visitor" => array:1 [ 0 => "{"scheme":"https"}" ] "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 => ""HeadlessChrome";v="129", "Not=A?Brand";v="8", "Chromium";v="129"" ] "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 => "92dfc4c669fb7e6b-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" ] "x-forwarded-for" => array:1 [ 0 => "18.218.121.8" ] "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" => "18.218.121.8" "HTTP_CDN_LOOP" => "cloudflare; loops=1" "HTTP_X_FORWARDED_PROTO" => "https" "HTTP_CF_VISITOR" => "{"scheme":"https"}" "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" => ""HeadlessChrome";v="129", "Not=A?Brand";v="8", "Chromium";v="129"" "HTTP_CACHE_CONTROL" => "no-cache" "HTTP_PRAGMA" => "no-cache" "HTTP_SEC_FETCH_DEST" => "document" "HTTP_CF_RAY" => "92dfc4c669fb7e6b-ORD" "HTTP_ACCEPT_ENCODING" => "gzip, br" "HTTP_PRIORITY" => "u=0, i" "HTTP_SEC_FETCH_USER" => "?1" "HTTP_SEC_FETCH_MODE" => "navigate" "HTTP_X_FORWARDED_FOR" => "18.218.121.8" "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" => "21422" "REMOTE_ADDR" => "172.69.17.125" "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" => 1744262150.406 "REQUEST_TIME" => 1744262150 ]
        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 => "Thu, 10 Apr 2025 05:15:50 GMT" ] "set-cookie" => array:2 [ 0 => "XSRF-TOKEN=eyJpdiI6InhqMGRmSzdDTGJlbE1DNk1NREkzM2c9PSIsInZhbHVlIjoiOEcxU2s5OTlLY3k0SWZZanBYQkV4a09UTkUxRnVCSmdEU3B0cGRLVW9IMWU3WlJBbkFEOHN3Q2pNQ0tvWGNjRkQ0a1JsMnlSSGZ0U2ZaYjdha0hZbkxMMFZ3RUNIM2toQi9rSi8vNXRBTTA5aUU0ZlA2TzJ2Y2tDNjk3Z0hmUnIiLCJtYWMiOiI3YjJmMzI3M2M0ZDkxMjk4YjdhYzZjZDE0YjVkODFjYzVkYzQ3NzQ3ZmUzZTY1ZDJlN2I2YWY1NTc2YTZjMTNmIiwidGFnIjoiIn0%3D; expires=Thu, 10 Apr 2025 07:15:50 GMT; Max-Age=7200; path=/; samesite=laxXSRF-TOKEN=eyJpdiI6InhqMGRmSzdDTGJlbE1DNk1NREkzM2c9PSIsInZhbHVlIjoiOEcxU2s5OTlLY3k0SWZZanBYQkV4a09UTkUxRnVCSmdEU3B0cGRLVW9IMWU3WlJBbkFEOHN3Q2pNQ0tvWGNjRkQ0a1JsM" 1 => "laravel_session=eyJpdiI6Ilp5aG5WOXNHbDlocTd5SFNKVHc0TXc9PSIsInZhbHVlIjoiVnNNbC81K3ZQVjlHQmtyS05mSHoyNnBKQlhiWXJZTThUN2lGT2RiNFZJazBZemwrKzhEVlRJY25nN0hkQlVvRy9YQ21wT3RLdUNPaE5RdG1yeFZ5dk1aRnhmWjk4ZDh1TUxHNi9zV3R6UEFXSm5sSStxSVpHVSs3ekoyVW1nL3AiLCJtYWMiOiIyOGNiZTVlMmExYjI2NjRiYjQwZTgxYWYwZjMwNzUzMWU0NWVkOWMwZjZlZWYzOTI0NGExYTU0OTg2MjUyNWEwIiwidGFnIjoiIn0%3D; expires=Thu, 10 Apr 2025 07:15:50 GMT; Max-Age=7200; path=/; httponly; samesite=laxlaravel_session=eyJpdiI6Ilp5aG5WOXNHbDlocTd5SFNKVHc0TXc9PSIsInZhbHVlIjoiVnNNbC81K3ZQVjlHQmtyS05mSHoyNnBKQlhiWXJZTThUN2lGT2RiNFZJazBZemwrKzhEVlRJY25nN0hkQlVvRy9Y" ] "Set-Cookie" => array:2 [ 0 => "XSRF-TOKEN=eyJpdiI6InhqMGRmSzdDTGJlbE1DNk1NREkzM2c9PSIsInZhbHVlIjoiOEcxU2s5OTlLY3k0SWZZanBYQkV4a09UTkUxRnVCSmdEU3B0cGRLVW9IMWU3WlJBbkFEOHN3Q2pNQ0tvWGNjRkQ0a1JsMnlSSGZ0U2ZaYjdha0hZbkxMMFZ3RUNIM2toQi9rSi8vNXRBTTA5aUU0ZlA2TzJ2Y2tDNjk3Z0hmUnIiLCJtYWMiOiI3YjJmMzI3M2M0ZDkxMjk4YjdhYzZjZDE0YjVkODFjYzVkYzQ3NzQ3ZmUzZTY1ZDJlN2I2YWY1NTc2YTZjMTNmIiwidGFnIjoiIn0%3D; expires=Thu, 10-Apr-2025 07:15:50 GMT; path=/XSRF-TOKEN=eyJpdiI6InhqMGRmSzdDTGJlbE1DNk1NREkzM2c9PSIsInZhbHVlIjoiOEcxU2s5OTlLY3k0SWZZanBYQkV4a09UTkUxRnVCSmdEU3B0cGRLVW9IMWU3WlJBbkFEOHN3Q2pNQ0tvWGNjRkQ0a1JsM" 1 => "laravel_session=eyJpdiI6Ilp5aG5WOXNHbDlocTd5SFNKVHc0TXc9PSIsInZhbHVlIjoiVnNNbC81K3ZQVjlHQmtyS05mSHoyNnBKQlhiWXJZTThUN2lGT2RiNFZJazBZemwrKzhEVlRJY25nN0hkQlVvRy9YQ21wT3RLdUNPaE5RdG1yeFZ5dk1aRnhmWjk4ZDh1TUxHNi9zV3R6UEFXSm5sSStxSVpHVSs3ekoyVW1nL3AiLCJtYWMiOiIyOGNiZTVlMmExYjI2NjRiYjQwZTgxYWYwZjMwNzUzMWU0NWVkOWMwZjZlZWYzOTI0NGExYTU0OTg2MjUyNWEwIiwidGFnIjoiIn0%3D; expires=Thu, 10-Apr-2025 07:15:50 GMT; path=/; httponlylaravel_session=eyJpdiI6Ilp5aG5WOXNHbDlocTd5SFNKVHc0TXc9PSIsInZhbHVlIjoiVnNNbC81K3ZQVjlHQmtyS05mSHoyNnBKQlhiWXJZTThUN2lGT2RiNFZJazBZemwrKzhEVlRJY25nN0hkQlVvRy9Y" ] ]
        session_attributes
        0 of 0
        array:5 [ "_token" => "TMU7F4L2NCwu2tFMA4AdsQnAfa5mxVcqyPznNSS7" "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" => [] ]