Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在Windows中从aapt输出中提取值_Android_Cmd - Fatal编程技术网

Android 在Windows中从aapt输出中提取值

Android 在Windows中从aapt输出中提取值,android,cmd,Android,Cmd,我正在使用Windows8。所以请不要给出任何linux命令。我真的很难从aapt输出中提取包名和版本代码。它在cmd中的格式如下 package: name='com.brand0.subbranded.monkey' versionCode='1' versionName='1.0' 我使用了以下命令: D:\android-studio-.3.2\sdk\build-tools\20.0.0\aapt d badging SubBranded-monkeytal

我正在使用Windows8。所以请不要给出任何linux命令。我真的很难从aapt输出中提取包名和版本代码。它在cmd中的格式如下

       package: name='com.brand0.subbranded.monkey' versionCode='1' versionName='1.0'
我使用了以下命令:

      D:\android-studio-.3.2\sdk\build-tools\20.0.0\aapt d badging SubBranded-monkeytalk.apk | grep package
其他方面可用的帮助是“awk命令”无法识别或sed命令难以理解

对于纯(丑陋)单线cmd解决方案:

for /f "delims=' tokens=2,4" %a in ('D:\android-studio-.3.2\sdk\build-tools\20.0.0\aapt d badging SubBranded-monkeytalk.apk ^| findstr "package"') do @echo Package name is %a && @echo Version code is %b
如果需要将其放在批处理文件中,则需要将变量的%符号加倍,并且可以将语句的格式设置得稍微好一点:

set AAPT=D:\android-studio-.3.2\sdk\build-tools\20.0.0\aapt
for /f "delims=' tokens=2,4" %%a in ('%AAPT% d badging SubBranded-monkeytalk.apk ^| findstr "package"') do (
    echo Package name is %%a
    echo Version code is %%b
)
这是相当脆弱的,而且(IMO)比sed更难理解。如果您安装Cygwin并了解一些关于sed的知识,您将受益匪浅。一旦你明白了(而且不会花很长时间),你就再也不会回去了

使用变量存储结果的示例:

set AAPT=D:\android-studio-.3.2\sdk\build-tools\20.0.0\aapt
for /f "delims=' tokens=2,4" %%a in ('%AAPT% d badging SubBranded-monkeytalk.apk ^| findstr "package"') do (
    set PKGNAME=%%a
    set PKGVER=%%b
)
echo Package name is %PKGNAME%, version is %PKGVER%

如下所述,如果尝试在for循环内设置并引用非循环变量,cmd.exe会将整个for循环作为一个命令处理。不幸的是,这会在执行循环之前展开
%BLAH%
,因此结果会出现意外值。您可以使用
setlocalenabledelayedexpansion
解决这个问题,并使用
引用变量!废话而不是
%BLAH%
。如果您需要在循环中获取子字符串,这有时很有用,但在这种情况下,如果循环中只有一个值,您就可以失败,然后再进行工作。

我可以回显包名,但不能在(“%AAPT%d bading SubBranded-monkeytalk.apk^ findstr“Package”)中为/f“delims=”tokens=2,4”%%a设置变量(echo包名称为%%a echo版本代码为%%b)您设置了一个变量来代替echo行…例如,set pkgname=%%%i解决了这个问题,显然,您必须执行类似于set“PACKAGENAME=%%a”的操作setlocal enabledelayedexpansion echo包名为!PACKAGENAME!否则,set PACKAGENAME=%%a本身就是一个DOS命令,它显示为空。只有当您想使用在for循环中设置的变量时,才是这样。如果您只是使用循环来设置它,那么以后可以使用该变量。将代码添加到这些注释中是穷人,所以我会添加一个快速的例子来回答。