检查Android SDK包是否可以通过编程方式安装

13

我正在为GUI独立SDK管理器制作一种替代方案(它在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

我想查看已安装的软件包、可更新的软件包以及未安装但可供下载的软件包。

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

2个回答

5
你不需要重新发明轮子。我建议使用新的sdkmanager,并添加GUI界面。
只需要使用sdkmanager,这是一个新的命令行工具,并解析输出。输出可以从这里获取。 这个简单的命令行用于列出已安装的包:
find ~/.android-sdk/ -name package.xml -exec sh -c 'eval $(xmllint --xpath "//*[local-name()='\'localPackage\'']/@path" $0) && echo $path' {} \;

您可以比较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

在提问之前,我尝试解析输出结果,但这比重新发明轮子更困难且容易出错。对我来说,解析XML更可靠。回答不错,但并没有回答我的问题。 - user5395084
我知道,我的意思是要避免每次Google更改内容时出现未来的错误。关于你的疑问,我认为检查路径是可靠的,并且检查文件是否存在以确定它是否已安装。 - albodelu

3
你需要完成两个不同的任务:
  1. 解析给定的 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

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

检查软件包是否已安装,如何帮助我?源代码中的source.properties信息很有用。它如何帮助我?我需要检查文件是否存在吗?此外,XML具有名为“path”的属性,将路径存在性(将“;”替换为“\”)检查是否可靠以检查是否已安装? - user5395084

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接