From 77acec63fec7d2f3e08f56954a4fb70f7906b2ed Mon Sep 17 00:00:00 2001 From: Jiyong Park Date: Mon, 1 Jun 2020 21:39:15 +0900 Subject: [PATCH] dex_import can be added to apex Bug:157886942 Test: m Change-Id: Ida6f7bb784efe74cc1fa0e8d370eaee803f08b0f --- apex/apex.go | 18 ++++++------------ apex/apex_test.go | 16 +++++++++++++++- java/java.go | 4 ++++ 3 files changed, 25 insertions(+), 13 deletions(-) diff --git a/apex/apex.go b/apex/apex.go index 10c16f5b8..4b49cbf98 100644 --- a/apex/apex.go +++ b/apex/apex.go @@ -1648,7 +1648,8 @@ func apexFileForShBinary(ctx android.BaseModuleContext, sh *android.ShBinary) ap } type javaDependency interface { - java.Dependency + DexJar() android.Path + JacocoReportClassesFile() android.Path Stem() string } @@ -1975,23 +1976,16 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) { ctx.PropertyErrorf("binaries", "%q is neither cc_binary, (embedded) py_binary, (host) blueprint_go_binary, (host) bootstrap_go_binary, nor sh_binary", depName) } case javaLibTag: - if javaLib, ok := child.(*java.Library); ok { - af := apexFileForJavaLibrary(ctx, javaLib, javaLib) - if !af.Ok() { - ctx.PropertyErrorf("java_libs", "%q is not configured to be compiled into dex", depName) - } else { - filesInfo = append(filesInfo, af) - return true // track transitive dependencies - } - } else if sdkLib, ok := child.(*java.SdkLibrary); ok { - af := apexFileForJavaLibrary(ctx, sdkLib, sdkLib) + switch child.(type) { + case *java.Library, *java.SdkLibrary, *java.DexImport: + af := apexFileForJavaLibrary(ctx, child.(javaDependency), child.(android.Module)) if !af.Ok() { ctx.PropertyErrorf("java_libs", "%q is not configured to be compiled into dex", depName) return false } filesInfo = append(filesInfo, af) return true // track transitive dependencies - } else { + default: ctx.PropertyErrorf("java_libs", "%q of type %q is not supported", depName, ctx.OtherModuleType(child)) } case androidAppTag: diff --git a/apex/apex_test.go b/apex/apex_test.go index 29bd087c6..1142cbcc9 100644 --- a/apex/apex_test.go +++ b/apex/apex_test.go @@ -327,7 +327,10 @@ func TestBasicApex(t *testing.T) { binaries: ["foo",], } }, - java_libs: ["myjar"], + java_libs: [ + "myjar", + "myjar_dex", + ], } apex { @@ -436,6 +439,15 @@ func TestBasicApex(t *testing.T) { ], } + dex_import { + name: "myjar_dex", + jars: ["prebuilt.jar"], + apex_available: [ + "//apex_available:platform", + "myapex", + ], + } + java_library { name: "myotherjar", srcs: ["foo/bar/MyClass.java"], @@ -471,6 +483,7 @@ func TestBasicApex(t *testing.T) { // Ensure that apex variant is created for the direct dep ensureListContains(t, ctx.ModuleVariantsForTests("mylib"), "android_arm64_armv8-a_shared_myapex") ensureListContains(t, ctx.ModuleVariantsForTests("myjar"), "android_common_myapex") + ensureListContains(t, ctx.ModuleVariantsForTests("myjar_dex"), "android_common_myapex") // Ensure that apex variant is created for the indirect dep ensureListContains(t, ctx.ModuleVariantsForTests("mylib2"), "android_arm64_armv8-a_shared_myapex") @@ -480,6 +493,7 @@ func TestBasicApex(t *testing.T) { ensureContains(t, copyCmds, "image.apex/lib64/mylib.so") ensureContains(t, copyCmds, "image.apex/lib64/mylib2.so") ensureContains(t, copyCmds, "image.apex/javalib/myjar_stem.jar") + ensureContains(t, copyCmds, "image.apex/javalib/myjar_dex.jar") // .. but not for java libs ensureNotContains(t, copyCmds, "image.apex/javalib/myotherjar.jar") ensureNotContains(t, copyCmds, "image.apex/javalib/msharedjar.jar") diff --git a/java/java.go b/java/java.go index 76bfa86d6..eaf0fe968 100644 --- a/java/java.go +++ b/java/java.go @@ -2691,6 +2691,10 @@ func (j *DexImport) Stem() string { return proptools.StringDefault(j.properties.Stem, j.ModuleBase.Name()) } +func (a *DexImport) JacocoReportClassesFile() android.Path { + return nil +} + func (j *DexImport) IsInstallable() bool { return true }