internal/binres: skip resources tests if android.jar of api 15 is missing
Change-Id: I1cf92bb03c420e1eddaa36824cf488c5ed6f5a78
Reviewed-on: https://go-review.googlesource.com/93998
Reviewed-by: Hyang-Ah Hana Kim <hyangah@gmail.com>
diff --git a/internal/binres/binres_test.go b/internal/binres/binres_test.go
index 6fba715..183583b 100644
--- a/internal/binres/binres_test.go
+++ b/internal/binres/binres_test.go
@@ -494,10 +494,7 @@
}
func TestTableRefByName(t *testing.T) {
- sdkdir := os.Getenv("ANDROID_HOME")
- if sdkdir == "" {
- t.Skip("ANDROID_HOME env var not set")
- }
+ checkResources(t)
tbl, err := OpenSDKTable()
if err != nil {
t.Fatal(err)
@@ -517,10 +514,7 @@
}
func TestTableMarshal(t *testing.T) {
- sdkdir := os.Getenv("ANDROID_HOME")
- if sdkdir == "" {
- t.Skip("ANDROID_HOME env var not set")
- }
+ checkResources(t)
tbl, err := OpenSDKTable()
if err != nil {
t.Fatal(err)
@@ -633,6 +627,21 @@
}
}
+func checkResources(t *testing.T) {
+ t.Helper()
+ sdkdir := os.Getenv("ANDROID_HOME")
+ if sdkdir == "" {
+ t.Skip("ANDROID_HOME env var not set")
+ }
+ rscPath, err := apiResourcesPath()
+ if err != nil {
+ t.Skipf("failed to find resources: %v", err)
+ }
+ if _, err := os.Stat(rscPath); err != nil {
+ t.Skipf("failed to find resources: %v", err)
+ }
+}
+
func BenchmarkTableRefByName(b *testing.B) {
sdkdir := os.Getenv("ANDROID_HOME")
if sdkdir == "" {
diff --git a/internal/binres/sdk.go b/internal/binres/sdk.go
index 7e751c5..5817c75 100644
--- a/internal/binres/sdk.go
+++ b/internal/binres/sdk.go
@@ -15,15 +15,14 @@
// Requires environment variable ANDROID_HOME to be set.
func apiResources() ([]byte, error) {
- sdkdir := os.Getenv("ANDROID_HOME")
- if sdkdir == "" {
- return nil, fmt.Errorf("ANDROID_HOME env var not set")
+ apiResPath, err := apiResourcesPath()
+ if err != nil {
+ return nil, err
}
- platform := fmt.Sprintf("android-%v", MinSDK)
- zr, err := zip.OpenReader(path.Join(sdkdir, "platforms", platform, "android.jar"))
+ zr, err := zip.OpenReader(apiResPath)
if err != nil {
if os.IsNotExist(err) {
- return nil, fmt.Errorf(`%v; consider installing with "android update sdk --all --no-ui --filter %s"`, err, platform)
+ return nil, fmt.Errorf(`%v; consider installing with "android update sdk --all --no-ui --filter android-%d"`, err, MinSDK)
}
return nil, err
}
@@ -50,6 +49,17 @@
return buf.Bytes(), nil
}
+func apiResourcesPath() (string, error) {
+ // TODO(elias.naur): use the logic from gomobile's androidAPIPath and use the any installed version of the
+ // Android SDK instead. Currently, the binres_test.go tests fail on anything newer than android-15.
+ sdkdir := os.Getenv("ANDROID_HOME")
+ if sdkdir == "" {
+ return "", fmt.Errorf("ANDROID_HOME env var not set")
+ }
+ platform := fmt.Sprintf("android-%v", MinSDK)
+ return path.Join(sdkdir, "platforms", platform, "android.jar"), nil
+}
+
// PackResources produces a stripped down gzip version of the resources.arsc from api jar.
func PackResources() ([]byte, error) {
tbl, err := OpenSDKTable()