1*333d2b36SAndroid Build Coastguard Worker// Copyright 2015 Google Inc. All rights reserved. 2*333d2b36SAndroid Build Coastguard Worker// 3*333d2b36SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License"); 4*333d2b36SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License. 5*333d2b36SAndroid Build Coastguard Worker// You may obtain a copy of the License at 6*333d2b36SAndroid Build Coastguard Worker// 7*333d2b36SAndroid Build Coastguard Worker// http://www.apache.org/licenses/LICENSE-2.0 8*333d2b36SAndroid Build Coastguard Worker// 9*333d2b36SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software 10*333d2b36SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS, 11*333d2b36SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*333d2b36SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and 13*333d2b36SAndroid Build Coastguard Worker// limitations under the License. 14*333d2b36SAndroid Build Coastguard Worker 15*333d2b36SAndroid Build Coastguard Workerpackage java 16*333d2b36SAndroid Build Coastguard Worker 17*333d2b36SAndroid Build Coastguard Worker// This file generates the final rules for compiling all Java. All properties related to 18*333d2b36SAndroid Build Coastguard Worker// compiling should have been translated into javaBuilderFlags or another argument to the Transform* 19*333d2b36SAndroid Build Coastguard Worker// functions. 20*333d2b36SAndroid Build Coastguard Worker 21*333d2b36SAndroid Build Coastguard Workerimport ( 22*333d2b36SAndroid Build Coastguard Worker "path/filepath" 23*333d2b36SAndroid Build Coastguard Worker "strings" 24*333d2b36SAndroid Build Coastguard Worker 25*333d2b36SAndroid Build Coastguard Worker "github.com/google/blueprint" 26*333d2b36SAndroid Build Coastguard Worker "github.com/google/blueprint/proptools" 27*333d2b36SAndroid Build Coastguard Worker 28*333d2b36SAndroid Build Coastguard Worker "android/soong/android" 29*333d2b36SAndroid Build Coastguard Worker "android/soong/remoteexec" 30*333d2b36SAndroid Build Coastguard Worker) 31*333d2b36SAndroid Build Coastguard Worker 32*333d2b36SAndroid Build Coastguard Workervar ( 33*333d2b36SAndroid Build Coastguard Worker Signapk, SignapkRE = pctx.RemoteStaticRules("signapk", 34*333d2b36SAndroid Build Coastguard Worker blueprint.RuleParams{ 35*333d2b36SAndroid Build Coastguard Worker Command: `rm -f $out && $reTemplate${config.JavaCmd} ${config.JavaVmFlags} -Djava.library.path=$$(dirname ${config.SignapkJniLibrary}) ` + 36*333d2b36SAndroid Build Coastguard Worker `-jar ${config.SignapkCmd} $flags $certificates $in $out`, 37*333d2b36SAndroid Build Coastguard Worker CommandDeps: []string{"${config.SignapkCmd}", "${config.SignapkJniLibrary}"}, 38*333d2b36SAndroid Build Coastguard Worker }, 39*333d2b36SAndroid Build Coastguard Worker &remoteexec.REParams{Labels: map[string]string{"type": "tool", "name": "signapk"}, 40*333d2b36SAndroid Build Coastguard Worker ExecStrategy: "${config.RESignApkExecStrategy}", 41*333d2b36SAndroid Build Coastguard Worker Inputs: []string{"${config.SignapkCmd}", "$in", "$$(dirname ${config.SignapkJniLibrary})", "$implicits"}, 42*333d2b36SAndroid Build Coastguard Worker OutputFiles: []string{"$outCommaList"}, 43*333d2b36SAndroid Build Coastguard Worker ToolchainInputs: []string{"${config.JavaCmd}"}, 44*333d2b36SAndroid Build Coastguard Worker Platform: map[string]string{remoteexec.PoolKey: "${config.REJavaPool}"}, 45*333d2b36SAndroid Build Coastguard Worker }, []string{"flags", "certificates"}, []string{"implicits", "outCommaList"}) 46*333d2b36SAndroid Build Coastguard Worker) 47*333d2b36SAndroid Build Coastguard Worker 48*333d2b36SAndroid Build Coastguard Workervar combineApk = pctx.AndroidStaticRule("combineApk", 49*333d2b36SAndroid Build Coastguard Worker blueprint.RuleParams{ 50*333d2b36SAndroid Build Coastguard Worker Command: `${config.MergeZipsCmd} $out $in`, 51*333d2b36SAndroid Build Coastguard Worker CommandDeps: []string{"${config.MergeZipsCmd}"}, 52*333d2b36SAndroid Build Coastguard Worker }) 53*333d2b36SAndroid Build Coastguard Worker 54*333d2b36SAndroid Build Coastguard Workerfunc CreateAndSignAppPackage(ctx android.ModuleContext, outputFile android.WritablePath, 55*333d2b36SAndroid Build Coastguard Worker packageFile, jniJarFile, dexJarFile android.Path, certificates []Certificate, deps android.Paths, v4SignatureFile android.WritablePath, lineageFile android.Path, rotationMinSdkVersion string) { 56*333d2b36SAndroid Build Coastguard Worker 57*333d2b36SAndroid Build Coastguard Worker unsignedApkName := strings.TrimSuffix(outputFile.Base(), ".apk") + "-unsigned.apk" 58*333d2b36SAndroid Build Coastguard Worker unsignedApk := android.PathForModuleOut(ctx, unsignedApkName) 59*333d2b36SAndroid Build Coastguard Worker 60*333d2b36SAndroid Build Coastguard Worker var inputs android.Paths 61*333d2b36SAndroid Build Coastguard Worker if dexJarFile != nil { 62*333d2b36SAndroid Build Coastguard Worker inputs = append(inputs, dexJarFile) 63*333d2b36SAndroid Build Coastguard Worker } 64*333d2b36SAndroid Build Coastguard Worker inputs = append(inputs, packageFile) 65*333d2b36SAndroid Build Coastguard Worker if jniJarFile != nil { 66*333d2b36SAndroid Build Coastguard Worker inputs = append(inputs, jniJarFile) 67*333d2b36SAndroid Build Coastguard Worker } 68*333d2b36SAndroid Build Coastguard Worker ctx.Build(pctx, android.BuildParams{ 69*333d2b36SAndroid Build Coastguard Worker Rule: combineApk, 70*333d2b36SAndroid Build Coastguard Worker Inputs: inputs, 71*333d2b36SAndroid Build Coastguard Worker Output: unsignedApk, 72*333d2b36SAndroid Build Coastguard Worker Implicits: deps, 73*333d2b36SAndroid Build Coastguard Worker }) 74*333d2b36SAndroid Build Coastguard Worker SignAppPackage(ctx, outputFile, unsignedApk, certificates, v4SignatureFile, lineageFile, rotationMinSdkVersion) 75*333d2b36SAndroid Build Coastguard Worker} 76*333d2b36SAndroid Build Coastguard Worker 77*333d2b36SAndroid Build Coastguard Workerfunc SignAppPackage(ctx android.ModuleContext, signedApk android.WritablePath, unsignedApk android.Path, certificates []Certificate, v4SignatureFile android.WritablePath, lineageFile android.Path, rotationMinSdkVersion string) { 78*333d2b36SAndroid Build Coastguard Worker 79*333d2b36SAndroid Build Coastguard Worker var certificateArgs []string 80*333d2b36SAndroid Build Coastguard Worker var deps android.Paths 81*333d2b36SAndroid Build Coastguard Worker for _, c := range certificates { 82*333d2b36SAndroid Build Coastguard Worker certificateArgs = append(certificateArgs, c.Pem.String(), c.Key.String()) 83*333d2b36SAndroid Build Coastguard Worker deps = append(deps, c.Pem, c.Key) 84*333d2b36SAndroid Build Coastguard Worker } 85*333d2b36SAndroid Build Coastguard Worker outputFiles := android.WritablePaths{signedApk} 86*333d2b36SAndroid Build Coastguard Worker var flags []string 87*333d2b36SAndroid Build Coastguard Worker if v4SignatureFile != nil { 88*333d2b36SAndroid Build Coastguard Worker outputFiles = append(outputFiles, v4SignatureFile) 89*333d2b36SAndroid Build Coastguard Worker flags = append(flags, "--enable-v4") 90*333d2b36SAndroid Build Coastguard Worker } 91*333d2b36SAndroid Build Coastguard Worker 92*333d2b36SAndroid Build Coastguard Worker if lineageFile != nil { 93*333d2b36SAndroid Build Coastguard Worker flags = append(flags, "--lineage", lineageFile.String()) 94*333d2b36SAndroid Build Coastguard Worker deps = append(deps, lineageFile) 95*333d2b36SAndroid Build Coastguard Worker } 96*333d2b36SAndroid Build Coastguard Worker 97*333d2b36SAndroid Build Coastguard Worker if rotationMinSdkVersion != "" { 98*333d2b36SAndroid Build Coastguard Worker flags = append(flags, "--rotation-min-sdk-version", rotationMinSdkVersion) 99*333d2b36SAndroid Build Coastguard Worker } 100*333d2b36SAndroid Build Coastguard Worker 101*333d2b36SAndroid Build Coastguard Worker rule := Signapk 102*333d2b36SAndroid Build Coastguard Worker args := map[string]string{ 103*333d2b36SAndroid Build Coastguard Worker "certificates": strings.Join(certificateArgs, " "), 104*333d2b36SAndroid Build Coastguard Worker "flags": strings.Join(flags, " "), 105*333d2b36SAndroid Build Coastguard Worker } 106*333d2b36SAndroid Build Coastguard Worker if ctx.Config().UseRBE() && ctx.Config().IsEnvTrue("RBE_SIGNAPK") { 107*333d2b36SAndroid Build Coastguard Worker rule = SignapkRE 108*333d2b36SAndroid Build Coastguard Worker args["implicits"] = strings.Join(deps.Strings(), ",") 109*333d2b36SAndroid Build Coastguard Worker args["outCommaList"] = strings.Join(outputFiles.Strings(), ",") 110*333d2b36SAndroid Build Coastguard Worker } 111*333d2b36SAndroid Build Coastguard Worker ctx.Build(pctx, android.BuildParams{ 112*333d2b36SAndroid Build Coastguard Worker Rule: rule, 113*333d2b36SAndroid Build Coastguard Worker Description: "signapk", 114*333d2b36SAndroid Build Coastguard Worker Outputs: outputFiles, 115*333d2b36SAndroid Build Coastguard Worker Input: unsignedApk, 116*333d2b36SAndroid Build Coastguard Worker Implicits: deps, 117*333d2b36SAndroid Build Coastguard Worker Args: args, 118*333d2b36SAndroid Build Coastguard Worker }) 119*333d2b36SAndroid Build Coastguard Worker} 120*333d2b36SAndroid Build Coastguard Worker 121*333d2b36SAndroid Build Coastguard Workervar buildAAR = pctx.AndroidStaticRule("buildAAR", 122*333d2b36SAndroid Build Coastguard Worker blueprint.RuleParams{ 123*333d2b36SAndroid Build Coastguard Worker Command: `rm -rf ${outDir} && mkdir -p ${outDir} && ` + 124*333d2b36SAndroid Build Coastguard Worker `cp ${manifest} ${outDir}/AndroidManifest.xml && ` + 125*333d2b36SAndroid Build Coastguard Worker `cp ${classesJar} ${outDir}/classes.jar && ` + 126*333d2b36SAndroid Build Coastguard Worker `cp ${rTxt} ${outDir}/R.txt && ` + 127*333d2b36SAndroid Build Coastguard Worker `${config.SoongZipCmd} -jar -o $out -C ${outDir} -D ${outDir}`, 128*333d2b36SAndroid Build Coastguard Worker CommandDeps: []string{"${config.SoongZipCmd}"}, 129*333d2b36SAndroid Build Coastguard Worker }, 130*333d2b36SAndroid Build Coastguard Worker "manifest", "classesJar", "rTxt", "outDir") 131*333d2b36SAndroid Build Coastguard Worker 132*333d2b36SAndroid Build Coastguard Workerfunc BuildAAR(ctx android.ModuleContext, outputFile android.WritablePath, 133*333d2b36SAndroid Build Coastguard Worker classesJar, manifest, rTxt android.Path, res android.Paths) { 134*333d2b36SAndroid Build Coastguard Worker 135*333d2b36SAndroid Build Coastguard Worker // TODO(ccross): uniquify and copy resources with dependencies 136*333d2b36SAndroid Build Coastguard Worker 137*333d2b36SAndroid Build Coastguard Worker deps := android.Paths{manifest, rTxt} 138*333d2b36SAndroid Build Coastguard Worker classesJarPath := "" 139*333d2b36SAndroid Build Coastguard Worker if classesJar != nil { 140*333d2b36SAndroid Build Coastguard Worker deps = append(deps, classesJar) 141*333d2b36SAndroid Build Coastguard Worker classesJarPath = classesJar.String() 142*333d2b36SAndroid Build Coastguard Worker } 143*333d2b36SAndroid Build Coastguard Worker 144*333d2b36SAndroid Build Coastguard Worker ctx.Build(pctx, android.BuildParams{ 145*333d2b36SAndroid Build Coastguard Worker Rule: buildAAR, 146*333d2b36SAndroid Build Coastguard Worker Description: "aar", 147*333d2b36SAndroid Build Coastguard Worker Implicits: deps, 148*333d2b36SAndroid Build Coastguard Worker Output: outputFile, 149*333d2b36SAndroid Build Coastguard Worker Args: map[string]string{ 150*333d2b36SAndroid Build Coastguard Worker "manifest": manifest.String(), 151*333d2b36SAndroid Build Coastguard Worker "classesJar": classesJarPath, 152*333d2b36SAndroid Build Coastguard Worker "rTxt": rTxt.String(), 153*333d2b36SAndroid Build Coastguard Worker "outDir": android.PathForModuleOut(ctx, "aar").String(), 154*333d2b36SAndroid Build Coastguard Worker }, 155*333d2b36SAndroid Build Coastguard Worker }) 156*333d2b36SAndroid Build Coastguard Worker} 157*333d2b36SAndroid Build Coastguard Worker 158*333d2b36SAndroid Build Coastguard Workervar buildBundleModule = pctx.AndroidStaticRule("buildBundleModule", 159*333d2b36SAndroid Build Coastguard Worker blueprint.RuleParams{ 160*333d2b36SAndroid Build Coastguard Worker Command: `${config.MergeZipsCmd} ${out} ${in}`, 161*333d2b36SAndroid Build Coastguard Worker CommandDeps: []string{"${config.MergeZipsCmd}"}, 162*333d2b36SAndroid Build Coastguard Worker }) 163*333d2b36SAndroid Build Coastguard Worker 164*333d2b36SAndroid Build Coastguard Workervar bundleMungePackage = pctx.AndroidStaticRule("bundleMungePackage", 165*333d2b36SAndroid Build Coastguard Worker blueprint.RuleParams{ 166*333d2b36SAndroid Build Coastguard Worker Command: `${config.Zip2ZipCmd} -i ${in} -o ${out} AndroidManifest.xml:manifest/AndroidManifest.xml resources.pb "res/**/*" "assets/**/*"`, 167*333d2b36SAndroid Build Coastguard Worker CommandDeps: []string{"${config.Zip2ZipCmd}"}, 168*333d2b36SAndroid Build Coastguard Worker }) 169*333d2b36SAndroid Build Coastguard Worker 170*333d2b36SAndroid Build Coastguard Workervar bundleMungeDexJar = pctx.AndroidStaticRule("bundleMungeDexJar", 171*333d2b36SAndroid Build Coastguard Worker blueprint.RuleParams{ 172*333d2b36SAndroid Build Coastguard Worker Command: `${config.Zip2ZipCmd} -i ${in} -o ${out} "classes*.dex:dex/" && ` + 173*333d2b36SAndroid Build Coastguard Worker `${config.Zip2ZipCmd} -i ${in} -o ${resJar} -x "classes*.dex" "**/*:root/"`, 174*333d2b36SAndroid Build Coastguard Worker CommandDeps: []string{"${config.Zip2ZipCmd}"}, 175*333d2b36SAndroid Build Coastguard Worker }, "resJar") 176*333d2b36SAndroid Build Coastguard Worker 177*333d2b36SAndroid Build Coastguard Worker// Builds an app into a module suitable for input to bundletool 178*333d2b36SAndroid Build Coastguard Workerfunc BuildBundleModule(ctx android.ModuleContext, outputFile android.WritablePath, 179*333d2b36SAndroid Build Coastguard Worker packageFile, jniJarFile, dexJarFile android.Path) { 180*333d2b36SAndroid Build Coastguard Worker 181*333d2b36SAndroid Build Coastguard Worker protoResJarFile := android.PathForModuleOut(ctx, "package-res.pb.apk") 182*333d2b36SAndroid Build Coastguard Worker aapt2Convert(ctx, protoResJarFile, packageFile, "proto") 183*333d2b36SAndroid Build Coastguard Worker 184*333d2b36SAndroid Build Coastguard Worker var zips android.Paths 185*333d2b36SAndroid Build Coastguard Worker 186*333d2b36SAndroid Build Coastguard Worker mungedPackage := android.PathForModuleOut(ctx, "bundle", "apk.zip") 187*333d2b36SAndroid Build Coastguard Worker ctx.Build(pctx, android.BuildParams{ 188*333d2b36SAndroid Build Coastguard Worker Rule: bundleMungePackage, 189*333d2b36SAndroid Build Coastguard Worker Input: protoResJarFile, 190*333d2b36SAndroid Build Coastguard Worker Output: mungedPackage, 191*333d2b36SAndroid Build Coastguard Worker Description: "bundle apk", 192*333d2b36SAndroid Build Coastguard Worker }) 193*333d2b36SAndroid Build Coastguard Worker zips = append(zips, mungedPackage) 194*333d2b36SAndroid Build Coastguard Worker 195*333d2b36SAndroid Build Coastguard Worker if dexJarFile != nil { 196*333d2b36SAndroid Build Coastguard Worker mungedDexJar := android.PathForModuleOut(ctx, "bundle", "dex.zip") 197*333d2b36SAndroid Build Coastguard Worker mungedResJar := android.PathForModuleOut(ctx, "bundle", "res.zip") 198*333d2b36SAndroid Build Coastguard Worker ctx.Build(pctx, android.BuildParams{ 199*333d2b36SAndroid Build Coastguard Worker Rule: bundleMungeDexJar, 200*333d2b36SAndroid Build Coastguard Worker Input: dexJarFile, 201*333d2b36SAndroid Build Coastguard Worker Output: mungedDexJar, 202*333d2b36SAndroid Build Coastguard Worker ImplicitOutput: mungedResJar, 203*333d2b36SAndroid Build Coastguard Worker Description: "bundle dex", 204*333d2b36SAndroid Build Coastguard Worker Args: map[string]string{ 205*333d2b36SAndroid Build Coastguard Worker "resJar": mungedResJar.String(), 206*333d2b36SAndroid Build Coastguard Worker }, 207*333d2b36SAndroid Build Coastguard Worker }) 208*333d2b36SAndroid Build Coastguard Worker zips = append(zips, mungedDexJar, mungedResJar) 209*333d2b36SAndroid Build Coastguard Worker } 210*333d2b36SAndroid Build Coastguard Worker if jniJarFile != nil { 211*333d2b36SAndroid Build Coastguard Worker zips = append(zips, jniJarFile) 212*333d2b36SAndroid Build Coastguard Worker } 213*333d2b36SAndroid Build Coastguard Worker 214*333d2b36SAndroid Build Coastguard Worker ctx.Build(pctx, android.BuildParams{ 215*333d2b36SAndroid Build Coastguard Worker Rule: buildBundleModule, 216*333d2b36SAndroid Build Coastguard Worker Inputs: zips, 217*333d2b36SAndroid Build Coastguard Worker Output: outputFile, 218*333d2b36SAndroid Build Coastguard Worker Description: "bundle", 219*333d2b36SAndroid Build Coastguard Worker }) 220*333d2b36SAndroid Build Coastguard Worker} 221*333d2b36SAndroid Build Coastguard Worker 222*333d2b36SAndroid Build Coastguard Workerfunc TransformJniLibsToJar( 223*333d2b36SAndroid Build Coastguard Worker ctx android.ModuleContext, 224*333d2b36SAndroid Build Coastguard Worker outputFile android.WritablePath, 225*333d2b36SAndroid Build Coastguard Worker jniLibs []jniLib, 226*333d2b36SAndroid Build Coastguard Worker prebuiltJniPackages android.Paths, 227*333d2b36SAndroid Build Coastguard Worker uncompressJNI bool) { 228*333d2b36SAndroid Build Coastguard Worker 229*333d2b36SAndroid Build Coastguard Worker var deps android.Paths 230*333d2b36SAndroid Build Coastguard Worker jarArgs := []string{ 231*333d2b36SAndroid Build Coastguard Worker "-j", // junk paths, they will be added back with -P arguments 232*333d2b36SAndroid Build Coastguard Worker } 233*333d2b36SAndroid Build Coastguard Worker 234*333d2b36SAndroid Build Coastguard Worker if uncompressJNI { 235*333d2b36SAndroid Build Coastguard Worker jarArgs = append(jarArgs, "-L", "0") 236*333d2b36SAndroid Build Coastguard Worker } 237*333d2b36SAndroid Build Coastguard Worker 238*333d2b36SAndroid Build Coastguard Worker for _, j := range jniLibs { 239*333d2b36SAndroid Build Coastguard Worker deps = append(deps, j.path) 240*333d2b36SAndroid Build Coastguard Worker jarArgs = append(jarArgs, 241*333d2b36SAndroid Build Coastguard Worker "-P", targetToJniDir(j.target), 242*333d2b36SAndroid Build Coastguard Worker "-f", j.path.String()) 243*333d2b36SAndroid Build Coastguard Worker } 244*333d2b36SAndroid Build Coastguard Worker 245*333d2b36SAndroid Build Coastguard Worker rule := zip 246*333d2b36SAndroid Build Coastguard Worker args := map[string]string{ 247*333d2b36SAndroid Build Coastguard Worker "jarArgs": strings.Join(proptools.NinjaAndShellEscapeList(jarArgs), " "), 248*333d2b36SAndroid Build Coastguard Worker } 249*333d2b36SAndroid Build Coastguard Worker if ctx.Config().UseRBE() && ctx.Config().IsEnvTrue("RBE_ZIP") { 250*333d2b36SAndroid Build Coastguard Worker rule = zipRE 251*333d2b36SAndroid Build Coastguard Worker args["implicits"] = strings.Join(deps.Strings(), ",") 252*333d2b36SAndroid Build Coastguard Worker } 253*333d2b36SAndroid Build Coastguard Worker var jniJarPath android.WritablePath = android.PathForModuleOut(ctx, "jniJarOutput.zip") 254*333d2b36SAndroid Build Coastguard Worker if len(prebuiltJniPackages) == 0 { 255*333d2b36SAndroid Build Coastguard Worker jniJarPath = outputFile 256*333d2b36SAndroid Build Coastguard Worker } 257*333d2b36SAndroid Build Coastguard Worker ctx.Build(pctx, android.BuildParams{ 258*333d2b36SAndroid Build Coastguard Worker Rule: rule, 259*333d2b36SAndroid Build Coastguard Worker Description: "zip jni libs", 260*333d2b36SAndroid Build Coastguard Worker Output: jniJarPath, 261*333d2b36SAndroid Build Coastguard Worker Implicits: deps, 262*333d2b36SAndroid Build Coastguard Worker Args: args, 263*333d2b36SAndroid Build Coastguard Worker }) 264*333d2b36SAndroid Build Coastguard Worker if len(prebuiltJniPackages) > 0 { 265*333d2b36SAndroid Build Coastguard Worker var mergeJniJarPath android.WritablePath = android.PathForModuleOut(ctx, "mergeJniJarOutput.zip") 266*333d2b36SAndroid Build Coastguard Worker if !uncompressJNI { 267*333d2b36SAndroid Build Coastguard Worker mergeJniJarPath = outputFile 268*333d2b36SAndroid Build Coastguard Worker } 269*333d2b36SAndroid Build Coastguard Worker ctx.Build(pctx, android.BuildParams{ 270*333d2b36SAndroid Build Coastguard Worker Rule: mergeAssetsRule, 271*333d2b36SAndroid Build Coastguard Worker Description: "merge prebuilt JNI packages", 272*333d2b36SAndroid Build Coastguard Worker Inputs: append(prebuiltJniPackages, jniJarPath), 273*333d2b36SAndroid Build Coastguard Worker Output: mergeJniJarPath, 274*333d2b36SAndroid Build Coastguard Worker }) 275*333d2b36SAndroid Build Coastguard Worker 276*333d2b36SAndroid Build Coastguard Worker if uncompressJNI { 277*333d2b36SAndroid Build Coastguard Worker ctx.Build(pctx, android.BuildParams{ 278*333d2b36SAndroid Build Coastguard Worker Rule: uncompressEmbeddedJniLibsRule, 279*333d2b36SAndroid Build Coastguard Worker Input: mergeJniJarPath, 280*333d2b36SAndroid Build Coastguard Worker Output: outputFile, 281*333d2b36SAndroid Build Coastguard Worker }) 282*333d2b36SAndroid Build Coastguard Worker } 283*333d2b36SAndroid Build Coastguard Worker } 284*333d2b36SAndroid Build Coastguard Worker} 285*333d2b36SAndroid Build Coastguard Worker 286*333d2b36SAndroid Build Coastguard Workerfunc (a *AndroidApp) generateJavaUsedByApex(ctx android.ModuleContext) { 287*333d2b36SAndroid Build Coastguard Worker javaApiUsedByOutputFile := android.PathForModuleOut(ctx, a.installApkName+"_using.xml") 288*333d2b36SAndroid Build Coastguard Worker javaUsedByRule := android.NewRuleBuilder(pctx, ctx) 289*333d2b36SAndroid Build Coastguard Worker javaUsedByRule.Command(). 290*333d2b36SAndroid Build Coastguard Worker Tool(android.PathForSource(ctx, "build/soong/scripts/gen_java_usedby_apex.sh")). 291*333d2b36SAndroid Build Coastguard Worker BuiltTool("dexdeps"). 292*333d2b36SAndroid Build Coastguard Worker Output(javaApiUsedByOutputFile). 293*333d2b36SAndroid Build Coastguard Worker Input(a.Library.Module.outputFile) 294*333d2b36SAndroid Build Coastguard Worker javaUsedByRule.Build("java_usedby_list", "Generate Java APIs used by Apex") 295*333d2b36SAndroid Build Coastguard Worker a.javaApiUsedByOutputFile = javaApiUsedByOutputFile 296*333d2b36SAndroid Build Coastguard Worker} 297*333d2b36SAndroid Build Coastguard Worker 298*333d2b36SAndroid Build Coastguard Workerfunc targetToJniDir(target android.Target) string { 299*333d2b36SAndroid Build Coastguard Worker return filepath.Join("lib", target.Arch.Abi[0]) 300*333d2b36SAndroid Build Coastguard Worker} 301