检查是否以编程方式安装了Android SDK包

11 android android-sdk-tools

我正在替代GUI独立SDK Manager(它已经在Android SDK 25上使用),我在Android Studio中找到了检索包所需的XML.

Android Repository  https://dl.google.com/android/repository/repository2-1.xml
Android System Images   https://dl.google.com/android/repository/sys-img/android/sys-img2-1.xml
Android TV System Images    https://dl.google.com/android/repository/sys-img/android-tv/sys-img2-1.xml
Android Wear System Images  https://dl.google.com/android/repository/sys-img/android-wear/sys-img2-1.xml
Glass Development Kit, Google Inc.  https://dl.google.com/android/repository/glass/addon2-1.xml
Google API add-on System Images https://dl.google.com/android/repository/sys-img/google_apis/sys-img2-1.xml
Google API with Playstore System Images https://dl.google.com/android/repository/sys-img/google_apis_playstore/sys-img2-1.xml
Google Inc. https://dl.google.com/android/repository/addon2-1.xml
Intel HAXM  https://dl.google.com/android/repository/extras/intel/addon2-1.xml
Offline Repo    file:/C:/Program%20Files/Android/Android%20Studio/plugins/sdk-updates/offline-repo/offline-repo.xml
Run Code Online (Sandbox Code Playgroud)

我想检查哪些软件包已安装,哪些软件包可用于更新,哪些软件包未安装但可供下载.

编辑:我知道如何解析,我不确定path属性是否是一种可靠的检查方式.

alb*_*elu 5

你不需要重新发明轮子。我会使用新的sdkmanager并为其添加一个 GUI。

仅使用新命令行工具sdkmanager解析输出。从这里输出。

这个简单的命令行列出了已安装的软件包:

find ~/.android-sdk/ -name package.xml -exec sh -c 'eval $(xmllint --xpath "//*[local-name()='\'localPackage\'']/@path" $0) && echo $path' {} \;
Run Code Online (Sandbox Code Playgroud)

您可以比较可用软件包的完整列表(由 sdkmanager 返回)和已安装软件包的列表(由该命令或 sdkmanager 返回),然后在此信息上添加 GUI。

使用此处此处sdkmanager --list --verbose解释的替代输出进行解析

./sdkmanager --list --verbose > tmp.txt

Info: Parsing /Users/albodelu/Library/Android/sdk/build-tools/19.1.0/package.xml
Info: Parsing /Users/albodelu/Library/Android/sdk/build-tools/21.1.2/package.xml
...
Info: Parsing /Users/albodelu/Library/Android/sdk/system-images/android-25/google_apis/x86_64/package.xml
Info: Parsing /Users/albodelu/Library/Android/sdk/tools/package.xml
Installed packages:
--------------------------------------
build-tools;19.1.0
    Description:        Android SDK Build-Tools 19.1
    Version:            19.1.0
    Installed Location: /Users/albodelu/Library/Android/sdk/build-tools/19.1.0

build-tools;21.1.2
    Description:        Android SDK Build-Tools 21.1.2
    Version:            21.1.2
    Installed Location: /Users/albodelu/Library/Android/sdk/build-tools/21.1.2
...
system-images;android-25;google_apis;x86_64
    Description:        Google APIs Intel x86 Atom_64 System Image
    Version:            4
    Installed Location: /Users/albodelu/Library/Android/sdk/system-images/android-25/google_apis/x86_64

tools
    Description:        Android SDK Tools
    Version:            26.0.2
    Installed Location: /Users/albodelu/Library/Android/sdk/tools

Available Packages:
--------------------------------------
add-ons;addon-google_apis-google-15
    Description:        Google APIs
    Version:            3

add-ons;addon-google_apis-google-16
    Description:        Google APIs
    Version:            4
...
system-images;android-25;google_apis;x86
    Description:        Google APIs Intel x86 Atom System Image
    Version:            4

system-images;android-25;google_apis;x86_64
    Description:        Google APIs Intel x86 Atom_64 System Image
    Version:            4

tools
    Description:        Android SDK Tools
    Version:            26.0.2
    Dependencies:
        patcher;v4
        emulator
        platform-tools Revision 20

done
Run Code Online (Sandbox Code Playgroud)


Yas*_*asi 3

您必须完成两项单独的工作:

  1. 解析来自 url 的 xml,例如 ( https://dl.google.com/android/repository/repository2-1.xml )
  2. 读取 SDK 路径中每个文件夹中的文件描述

例如:在C:\Program Files (x86)\Android\android-sdk\platforms\android-23我的笔记本电脑中,有一个source.properties名为以下内​​容的文件:

Pkg.Desc=Android SDK Platform 6.0
Pkg.UserSrc=false
Platform.Version=6.0
Platform.CodeName=
Pkg.Revision=3
AndroidVersion.ApiLevel=23
Layoutlib.Api=16
Layoutlib.Revision=3
Platform.MinToolsRev=22
Run Code Online (Sandbox Code Playgroud)

source.properties每个文件夹中都有文件。我希望这可以帮助你 ;)