我正在使用Windows 8.所以请不要给任何linux命令。我真的很难从我的aapt输出中提取包名和versionCode。它在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命令。
答案 0 :(得分:1)
对于纯粹(且丑陋)的单行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%
,因此结果会出现意外值。您可以使用setlocal enabledelayedexpansion
解决该问题,并使用!BLAH!
而不是%BLAH%
引用变量。如果你需要在循环中获得子串,这有时很有用,但在这种情况下,循环中只有一个值,你可以直接完成并继续工作。