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
This commit is contained in:
@@ -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}
|
||||
}
|
||||
|
17
java/java.go
17
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{}) {
|
||||
|
Reference in New Issue
Block a user