aboutsummaryrefslogtreecommitdiffstats
path: root/java
diff options
context:
space:
mode:
authorColin Cross <ccross@android.com>2015-04-03 16:53:05 -0700
committerColin Cross <ccross@android.com>2015-04-03 16:53:05 -0700
commite1d62a8b1f26bb3bd4b6a42980da9b1daf407273 (patch)
treeb0ad510bac9a87bbdabef287016c785bacd08c13 /java
parent16daa921e3510d6ba3c6d9dc8a9aea7ebc5ceba8 (diff)
downloadbuild_soong-e1d62a8b1f26bb3bd4b6a42980da9b1daf407273.tar.gz
build_soong-e1d62a8b1f26bb3bd4b6a42980da9b1daf407273.tar.bz2
build_soong-e1d62a8b1f26bb3bd4b6a42980da9b1daf407273.zip
Add support for using prebuilt libraries as static dependencies
Extract files out of prebuilt libraries and create list files for classes and resources in order to allow including them in other jars. Change-Id: I9269d1fd6e0f570811a00bf319098ac1f7cdc816
Diffstat (limited to 'java')
-rw-r--r--java/builder.go31
-rw-r--r--java/java.go17
2 files changed, 44 insertions, 4 deletions
diff --git a/java/builder.go b/java/builder.go
index 2f9d7018..2c72caba 100644
--- a/java/builder.go
+++ b/java/builder.go
@@ -61,6 +61,16 @@ var (
Description: "dex $out",
},
"outDir", "dxFlags")
+
+ extractPrebuilt = pctx.StaticRule("extractPrebuilt",
+ blueprint.RuleParams{
+ Command: `rm -rf $outDir && unzip -qo $in -d $outDir && ` +
+ `find $outDir -name "*.class" > $classFile && ` +
+ `find $outDir -type f -a \! -name "*.class" -a \! -name "MANIFEST.MF" > $resourceFile || ` +
+ `(rm -rf $outDir; exit 42)`,
+ Description: "extract java prebuilt $outDir",
+ },
+ "outDir", "classFile", "resourceFile")
)
func init() {
@@ -187,3 +197,24 @@ func TransformDexToJavaLib(ctx common.AndroidModuleContext, resources []jarSpec,
return outputFile
}
+
+func TransformPrebuiltJarToClasses(ctx common.AndroidModuleContext,
+ prebuilt string) (classJarSpec, resourceJarSpec jarSpec) {
+
+ classDir := filepath.Join(common.ModuleOutDir(ctx), "classes")
+ classFileList := filepath.Join(classDir, "classes.list")
+ resourceFileList := filepath.Join(classDir, "resources.list")
+
+ ctx.Build(pctx, blueprint.BuildParams{
+ Rule: extractPrebuilt,
+ Outputs: []string{classFileList, resourceFileList},
+ Inputs: []string{prebuilt},
+ Args: map[string]string{
+ "outDir": classDir,
+ "classFile": classFileList,
+ "resourceFile": resourceFileList,
+ },
+ })
+
+ return jarSpec{classFileList, classDir}, jarSpec{resourceFileList, classDir}
+}
diff --git a/java/java.go b/java/java.go
index 67bde045..8b7e02d2 100644
--- a/java/java.go
+++ b/java/java.go
@@ -361,7 +361,8 @@ type JavaPrebuilt struct {
Srcs []string
}
- classpathFile string
+ classpathFile string
+ classJarSpecs, resourceJarSpecs []jarSpec
}
func (j *JavaPrebuilt) GenerateAndroidBuildActions(ctx common.AndroidModuleContext) {
@@ -369,7 +370,15 @@ func (j *JavaPrebuilt) GenerateAndroidBuildActions(ctx common.AndroidModuleConte
ctx.ModuleErrorf("expected exactly one jar in srcs")
return
}
- j.classpathFile = filepath.Join(common.ModuleSrcDir(ctx), j.properties.Srcs[0])
+ prebuilt := filepath.Join(common.ModuleSrcDir(ctx), j.properties.Srcs[0])
+
+ classJarSpec, resourceJarSpec := TransformPrebuiltJarToClasses(ctx, prebuilt)
+
+ j.classpathFile = prebuilt
+ j.classJarSpecs = []jarSpec{classJarSpec}
+ j.resourceJarSpecs = []jarSpec{resourceJarSpec}
+
+ ctx.InstallFileName("framework", ctx.ModuleName()+".jar", j.classpathFile)
}
var _ JavaDependency = (*JavaPrebuilt)(nil)
@@ -379,11 +388,11 @@ func (j *JavaPrebuilt) ClasspathFile() string {
}
func (j *JavaPrebuilt) ClassJarSpecs() []jarSpec {
- return nil
+ return j.classJarSpecs
}
func (j *JavaPrebuilt) ResourceJarSpecs() []jarSpec {
- return nil
+ return j.resourceJarSpecs
}
func JavaPrebuiltFactory() (blueprint.Module, []interface{}) {