Minor fix + more verbose assert in test to debug issue.
[android/platform/tools/build.git] / builder / src / main / java / com / android / builder / DefaultSdkParser.java
1 /*
2  * Copyright (C) 2012 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package com.android.builder;
18
19 import com.android.SdkConstants;
20 import com.android.annotations.NonNull;
21 import com.android.sdklib.IAndroidTarget;
22 import com.android.sdklib.SdkManager;
23 import com.android.sdklib.internal.repository.packages.FullRevision;
24 import com.android.sdklib.repository.PkgProps;
25 import com.android.utils.ILogger;
26 import com.google.common.base.Charsets;
27 import com.google.common.io.Closeables;
28
29 import java.io.File;
30 import java.io.FileInputStream;
31 import java.io.FileNotFoundException;
32 import java.io.IOException;
33 import java.io.InputStreamReader;
34 import java.io.Reader;
35 import java.util.Properties;
36
37 import static com.android.SdkConstants.FD_PLATFORM_TOOLS;
38 import static com.android.SdkConstants.FD_SUPPORT;
39 import static com.android.SdkConstants.FD_TOOLS;
40 import static com.android.SdkConstants.FN_ANNOTATIONS_JAR;
41 import static com.android.SdkConstants.FN_SOURCE_PROP;
42
43 /**
44  * Default implementation of {@link SdkParser} for a normal Android SDK distribution.
45  */
46 public class DefaultSdkParser implements SdkParser {
47
48     private final String mSdkLocation;
49     private SdkManager mManager;
50
51     public DefaultSdkParser(@NonNull String sdkLocation) {
52         if (!sdkLocation.endsWith(File.separator)) {
53             mSdkLocation = sdkLocation + File.separator;
54         } else {
55             mSdkLocation = sdkLocation;
56         }
57     }
58
59     @Override
60     public IAndroidTarget resolveTarget(@NonNull String target, @NonNull ILogger logger) {
61         if (mManager == null) {
62             mManager = SdkManager.createManager(mSdkLocation, logger);
63             if (mManager == null) {
64                 throw new RuntimeException("failed to parse SDK!");
65             }
66         }
67
68         return mManager.getTargetFromHashString(target);
69     }
70
71     @Override
72     public String getAnnotationsJar() {
73         return mSdkLocation + FD_TOOLS +
74                 '/' + FD_SUPPORT +
75                 '/' + FN_ANNOTATIONS_JAR;
76     }
77
78     @Override
79     public FullRevision getPlatformToolsRevision() {
80         File platformTools = new File(mSdkLocation, FD_PLATFORM_TOOLS);
81         if (!platformTools.isDirectory()) {
82             return null;
83         }
84
85         Reader reader = null;
86         try {
87             reader = new InputStreamReader(
88                     new FileInputStream(new File(platformTools, FN_SOURCE_PROP)),
89                     Charsets.UTF_8);
90             Properties props = new Properties();
91             props.load(reader);
92
93             String value = props.getProperty(PkgProps.PKG_REVISION);
94
95             return FullRevision.parseRevision(value);
96
97         } catch (FileNotFoundException ignore) {
98             // return null below.
99         } catch (IOException ignore) {
100             // return null below.
101         } catch (NumberFormatException ignore) {
102             // return null below.
103         } finally {
104             Closeables.closeQuietly(reader);
105         }
106
107         return null;
108     }
109
110     @Override
111     public File getAapt() {
112         File platformTools = new File(mSdkLocation, FD_PLATFORM_TOOLS);
113         if (!platformTools.isDirectory()) {
114             return null;
115         }
116
117         return new File(platformTools, SdkConstants.FN_AAPT);
118     }
119
120     @Override
121     public File getAidlCompiler() {
122         File platformTools = new File(mSdkLocation, FD_PLATFORM_TOOLS);
123         if (!platformTools.isDirectory()) {
124             return null;
125         }
126
127         return new File(platformTools, SdkConstants.FN_AIDL);
128     }
129
130     @Override
131     public File getRenderscriptCompiler() {
132         File platformTools = new File(mSdkLocation, FD_PLATFORM_TOOLS);
133         if (!platformTools.isDirectory()) {
134             return null;
135         }
136
137         return new File(platformTools, SdkConstants.FN_RENDERSCRIPT);
138     }
139 }