Rob*_*ert 3 android android-sdk-tools android-sdk-manager
我正在尝试设置 Android 编程环境,但遇到此错误:
./sdkmanager --update
Warning: File /home/user/.android/repositories.cfg could not be loaded.
[=======================================] 100% Computing updates...
Run Code Online (Sandbox Code Playgroud)
我见过其他线程,人们说(或者更确切地说猜测),我应该创建该文件。但我不是那种只靠猜测就改变系统而不了解后果的人。我的意思是,在这种情况下,这样做并没有感觉太错误,但为什么 sdkmanager 在需要时不创建该文件?我的意思是 sdkmanager 已经创建了.android包含这么多文件的隐藏文件夹,什么会让开发人员认为“创建文件 repositories.cfg 是需要小心的事情,我们不要自己创建它并警告用户”?
在尝试解释之前,请注意该消息显示的是警告而不是错误。
Warning: File repositories.cfg could not be loaded.
这只是一个警告,因为此文件旨在供用户(开发人员)添加 sdk 存储库源列表。
请注意,该文件是一个属性文件,每行包含一个属性,格式如下:KEY=VALUE
因此sdkmanager有自己的 sdk 存储库源列表,并允许您将您的源添加到此文件中作为用户级别列表。
答案:
在某些线程中,我看到这个问题的答案建议只创建文件repositories.cfg:
mkdir -p ~/.android && touch ~/.android/repositories.cfg
像这儿。
其他答案建议在创建文件后添加以下行:
### User Sources for Android SDK Manager
count=0
Run Code Online (Sandbox Code Playgroud)
就像这里一样,两种解决方案都有效。
原因: 为了更好地理解发生了什么,我们需要查看处理这部分的源文件。
这是提交时RepoSources.java的链接,介绍了此行为。文件和行为可能会随着时间的推移而发生变化,但这将有助于了解正在发生的情况。
// Line 35-39
String KEY_COUNT = "count";
String KEY_SRC = "src";
String SRC_FILENAME = "repositories.cfg";
ArrayList<RepoSource> mSources = new ArrayList<RepoSource>();
Run Code Online (Sandbox Code Playgroud)
我们将处理文件repositories.cfg寻找键count并将src找到的源添加到mSources数组中。
// Lines 71 - 120
public void loadUserSources()
Run Code Online (Sandbox Code Playgroud)
这里(第 86-92 行)如果文件存在,我们将其作为 Properties 实例加载,然后查找键count,如果未找到,则返回 0,否则稍后在代码中查找src键以将找到的源添加到数组中。
count因此,当文件为空时,有或没有密钥并不重要,因为它默认为count=0.
您可以注意到,当该repositories.cfg文件不退出时,它不会执行任何操作,甚至不显示警告。
这意味着当时开发人员在使用该解决方案时甚至没有注意到他们可以使用,repositories.cfg因为没有显示任何内容。
我希望这能为您提供所需的信息。
| 归档时间: |
|
| 查看次数: |
26286 次 |
| 最近记录: |