Is there a way to automate the android sdk installation?

后端 未结 12 2251
鱼传尺愫
鱼传尺愫 2020-11-27 08:41

Now I have to download and install the Android SDK and AVD Manager, and then install the APIs, tools through the UI. Is there a way to automate this process?

相关标签:
12条回答
  • 2020-11-27 09:22

    UPDATE

    Latest versions introduce sdkmanager, a command line tool that allows you to view, install, update, and uninstall packages for the Android SDK.

    The sdkmanager tool is provided in the Android SDK Tools package (25.2.3 and higher) and is located in android_sdk/tools/bin/.

      sdkmanager [--uninstall] [<common args>] [--package_file <file>] [<packages>...]
      sdkmanager --update [<common args>]
      sdkmanager --list [<common args>]
      sdkmanager --licenses [<common args>]
    
    In its first form, installs, or uninstalls, or updates packages.
        By default, the listed packages are installed or (if already installed)
        updated to the latest version.
    
        --uninstall: uninstalled listed packages.
    
        <package> is a sdk-style path (e.g. "build-tools;23.0.0" or
                 "platforms;android-23").
        <package-file> is a text file where each line is a sdk-style path
                       of a package to install or uninstall.
        Multiple --package_file arguments may be specified in combination
        with explicit paths.
    
    In its second form (with --update), all installed packages are
        updated to the latest version.
    
    In its third form, all installed and available packages are printed
        out.
    
    In its fourth form (with --licenses), show and offer the option to
         accept licenses for all available packages that have not already been
         accepted.
    
    Common Arguments:
        --sdk_root=<sdkRootPath>: Use the specified SDK root instead of the SDK 
                                  containing this tool
    
        --channel=<channelId>: Include packages in channels up to <channelId>.
                               Common channels are:
                               0 (Stable), 1 (Beta), 2 (Dev), and 3 (Canary).
    
        --include_obsolete: With --list, show obsolete packages in the
                            package listing. With --update, update obsolete
                            packages as well as non-obsolete.
    
        --no_https: Force all connections to use http rather than https.
    
        --proxy=<http | socks>: Connect via a proxy of the given type.
    
        --proxy_host=<IP or DNS address>: IP or DNS address of the proxy to use.
    
        --proxy_port=<port #>: Proxy port to connect to.
    
    * If the env var REPO_OS_OVERRIDE is set to "windows",
      "macosx", or "linux", packages will be downloaded for that OS.
    

    so, to update the packages run

    $ sdkmanager --update
    

    to accept the licenses

    $ yes | sdkmanager --licenses
    

    OLD ANSWER

    (Please note: The android command is deprecated!)

    The closer you can get to automation probably is:

    $ android update sdk --no-ui
    

    android provide these options for automatic updates:

    Action "update sdk":
      Updates the SDK by suggesting new platforms to install if available.
    Options:
      -f --force    Forces replacement of a package or its parts, even if something has been modified
      -u --no-ui    Updates from command-line (does not display the GUI)
      -o --obsolete Installs obsolete packages
      -t --filter   A filter that limits the update to the specified types of packages in the form of
                    a comma-separated list of [platform, tool, platform-tool, doc, sample, extra]
      -s --no-https Uses HTTP instead of HTTPS (the default) for downloads
      -n --dry-mode Simulates the update but does not download or install anything
    

    If you want to list which packages are available for installation you can use

    $ android list sdk
    

    and you'll obtain an ordered list of packages, for example

    Packages available for installation or update: 9
       1- ARM EABI v7a System Image, Android API 15, revision 2
       2- Intel x86 Atom System Image, Android API 15, revision 1
       3- Android Support, revision 8
       4- Google AdMob Ads SDK, revision 6
       5- Google Analytics SDK, revision 2
       6- Google Play APK Expansion Library, revision 1
       7- Google Play Billing Library, revision 2
       8- Google Play Licensing Library, revision 2
       9- Google Web Driver, revision 2
    

    Also you can limit the update only to a desired component if you use the --filter option

    $ android update sdk --filter <component> --no-ui
    

    where component is one or more of

    • the numbers returned by android list sdk (i.e. 1, also know as package index)
    • add-on
    • doc
    • extra
    • platform
    • platform-tool
    • sample
    • source
    • system-image
    • tool

    or can be one or more specific identifiers. For instance, if you just want to download a small set of specific packages, you could do this:

    $ android update sdk -u --filter platform-tools,android-16,extra-android-support
    

    and you'll just get the platform tools, api level 16 and support package jar. This is really handy if you're building a build machine only and would have to pay for downloading all the extra stuff that you'll never use.

    To see the available options you can use --help, for example

    $ android --help list sdk
    
           Usage:
           android [global options] list sdk [action options]
           Global options:
      -h --help       : Help on a specific command.
      -v --verbose    : Verbose mode, shows errors, warnings and all messages.
         --clear-cache: Clear the SDK Manager repository manifest cache.
      -s --silent     : Silent mode, shows errors only.
    
                       Action "list sdk":
      Lists remote SDK repository.
    Options:
      -o --obsolete  : Deprecated. Please use --all instead.
      -a --all       : Lists all available packages (including obsolete and
                       installed ones)
         --proxy-host: HTTP/HTTPS proxy host (overrides settings if defined)
         --proxy-port: HTTP/HTTPS proxy port (overrides settings if defined)
      -s --no-https  : Uses HTTP instead of HTTPS (the default) for downloads.
      -e --extended  : Displays extended details on each package
      -u --no-ui     : Displays list result on console (no GUI) [Default: true]
    
    0 讨论(0)
  • 2020-11-27 09:24

    For any one still searching for a method to download all Android packages, I have wrote a script to do that. It will download all non-obsoleted packages.

    #!/binbash
    # Install all non-obsolete android sdk packages.
    # author: Tai Le Tien (letientai299 at gmail.com)
    
    function install_sdk {
      android update sdk -u -s -a -t "$1"
    }
    
    function fetch_non_obsoled_package_indices {
      # Fetch the sdk list using non-https connections
      android list sdk -u -s -a |\
        # Filter obsoleted packages
        sed '/\(Obsolete\)/d' |\
        # Filter to take only the index number of package
        sed 's/^[ ]*\([0-9]*\).*/\1/' |\
        # Remove the empty lines
        sed -n 's/^[^ $]/\0/p'
    }
    
    for package_index in  $(fetch_non_obsoled_package_indices)
    do
      echo "====================================================================="
      echo "Start to install package:  ${package_index}"
      echo "====================================================================="
      # Auto accept license
      echo -e "y" | install_sdk "${package_index}"
      echo
      echo
    done
    

    You can also see it on my Github repo

    The good:

    • Not depend on expect.
    • Headless.

    The downsides:

    • You still have to install basic SDK manually, and put android into your path.
    • Script only works on unix.
    0 讨论(0)
  • 2020-11-27 09:28

    In newer android versions (e.g. 25.2.5) we should use sdkmanager (instead of the android command)

    Example of installing a package:

    android-sdk/tools/bin/sdkmanager "extras;android;m2repository"
    

    Command to get a list of all available packages:

     android-sdk/tools/bin/sdkmanager --verbose --list
    

    This web-page lists download links for the SDK-tools:

    Here is a link to an open-source repository docker-android which can install android in a Docker image.

    You may also find the answers in this SO Question: Automatically accept all SDK licences useful.

    0 讨论(0)
  • 2020-11-27 09:29

    To answer all licenses with 'y', you can try this in the script:

    (while :
    do
      echo 'y'
      sleep 2
    done) | android update sdk -u .....
    
    0 讨论(0)
  • 2020-11-27 09:29

    For a newbie Android developer, but an experienced Java developer, it is really bewildering to know WHICH dependencies, EVEN if you get past all of the above nightmares. Colleague of mine advised me to use Android Studio (which is Intellij based :-) specifically because of the above nightmares. I followed his advice. But I did not accept the defaults for the installation, and tried to install it in a software drive of mine. It turned out to be a nightmare. The SDK dialogue seemed to hang and was not intuitive at all. Which is why I ended up here. After reading the above, I gave Studio another try, and this time accepted ALL the defaults for the intallation. Hey PRESTO...it took care of all the SDK dependencies (core ones I am guessing) in a couple of dialogues without being prompted i.e. Ctl-Shift-S and the SKD. I would therefore recommend it for a newbie. Here the proof of the pudding as it downloads:

    The version of sudio I downloaded and installed: Version of windows: And here after it did its good-stuff:

    Sincerely hope it works for you!!

    0 讨论(0)
  • 2020-11-27 09:30

    i use this to install and update the sdk on travis-ci

    curl --location http://dl.google.com/android/android-sdk_r22.3-linux.tgz | tar -x -z -C $HOME
    export ANDROID_HOME=$HOME/android-sdk-linux
    export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools
    ( sleep 5 && while [ 1 ]; do sleep 1; echo y; done ) | android update sdk --no-ui --filter platform-tool,android-19,sysimg-19,build-tools-19.0.1
    
    0 讨论(0)
提交回复
热议问题