当前的Android SDK的sdkmanager存在正确生成问题 您选择添加的软件包的组合哈希签名。
仅当您仅使用sdkmanager.bat
管理您的Android SDK,而不是用于通过Android Studio对其进行管理。
如果您下载了当前的Android SDK,并将其放在C:\android-sdk-win
中,然后运行:
sdkmanager "platform-tools"
然后看看licenses/android-sdk-license
,它有24333f8a63b6825ea9c5514f83c2829b004d1fee
然后运行:
sdkmanager "build-tools;28.0.3" "platforms;android-28"
然后:
sdkmanager --licenses
并同意所有许可,然后检查哈希签名,它仍然相同,没有对其他许可协议文本进行哈希处理!
因此,我编写了这个测试Java程序,以尝试查看是否可以以编程方式生成正确的组合哈希签名。
第一个问题是要获取许可协议的正确哈希值
文本,则需要小心地从package.xml
文件中删除开头和结尾的XML。
例如,对于platforms;android-28
,请查看[SDK directory]/platforms/android-28/package.xml
的备份副本,然后仔细删除开头和结尾的XML并保存。
import java.io.FileInputStream;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class TestSHA1
{
public static void main(String[] args)
{
String sFile1 = "C:/android-sdk-win/platform-tools/package.xml";
String sFile2 = "C:/android-sdk-win/build-tools/28.0.3/package.xml";
String sFile3 = "C:/android-sdk-win/platforms/android-28/package.xml";
try
{
MessageDigest sha1 = MessageDigest.getInstance("SHA1");
FileInputStream fis = new FileInputStream(sFile1);
byte[] data = new byte[1024];
int read = 0;
while ((read = fis.read(data)) != -1)
{
sha1.update(data, 0, read);
};
fis = new FileInputStream(sFile2);
read = 0;
while ((read = fis.read(data)) != -1)
{
sha1.update(data, 0, read);
};
fis = new FileInputStream(sFile3);
read = 0;
while ((read = fis.read(data)) != -1)
{
sha1.update(data, 0, read);
};
byte[] hashBytes = sha1.digest();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < hashBytes.length; i++)
{
sb.append(Integer.toString((hashBytes[i] & 0xff) + 0x100, 16).substring(1));
}
String fileHash = sb.toString();
System.out.println("fileHash: '"+fileHash+"'");
}
catch (IOException ioe)
{
}
catch (NoSuchAlgorithmException nsae)
{
}
}
}
此代码只是概念证明,可以轻松进行改进,例如自动删除开头和结尾的XML。
但是它最终使我能够进行Gradle清理并发布项目的构建版本。
注意:在清理项目时,它得到了以下提示:
Found corrupted package.xml at C:\android-sdk-win\build-tools\28.0.3\package.xml
但是,它成功完成了清理并发布构建。
完成后,返回并还原原始package.xml文件。
更新
我发现下载较早的平台工具包并替换 SDK中的一个,有助于成功构建。
http://dl.google.com/android/repository/platform-tools_r28.0.1-windows.zip
某些项目版本正在运行,但在其他项目中,Gradle clean失败,并显示通常的“您尚未接受以下SDK组件的许可协议:”。
但是,我仍然认为它显示了sdkmanager
的问题以及可能的解决方案。是的,如果您已接受许可协议,我不完全理解该解决方案。
哦,它应该仅使用具有以下内容的package.xml
文件:
<license id="android-sdk-license"
在领先的XML中。