blob: 2a475196e4278006fe740186f85c58be325fffb4 [file] [log] [blame]
Colin Cross30e076a2015-04-13 13:58:27 -07001// Copyright 2015 Google Inc. All rights reserved.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package java
16
17// This file generates the final rules for compiling all Java. All properties related to
18// compiling should have been translated into javaBuilderFlags or another argument to the Transform*
19// functions.
20
21import (
Colin Cross30e076a2015-04-13 13:58:27 -070022 "strings"
23
24 "github.com/google/blueprint"
25
26 "android/soong/common"
27)
28
29var (
30 aaptCreateResourceJavaFile = pctx.StaticRule("aaptCreateResourceJavaFile",
31 blueprint.RuleParams{
32 Command: `rm -rf "$javaDir" && mkdir -p "$javaDir" && ` +
33 `$aaptCmd package -m $aaptFlags -P $publicResourcesFile -G $proguardOptionsFile ` +
34 `-J $javaDir || ( rm -rf "$javaDir/*"; exit 41 ) && ` +
35 `find $javaDir -name "*.java" > $javaFileList`,
Dan Willemsenc94a7682015-11-17 15:27:28 -080036 CommandDeps: []string{"$aaptCmd"},
Colin Cross30e076a2015-04-13 13:58:27 -070037 Description: "aapt create R.java $out",
38 },
39 "aaptFlags", "publicResourcesFile", "proguardOptionsFile", "javaDir", "javaFileList")
40
41 aaptCreateAssetsPackage = pctx.StaticRule("aaptCreateAssetsPackage",
42 blueprint.RuleParams{
Colin Cross5adac8a2015-04-28 13:29:20 -070043 Command: `rm -f $out && $aaptCmd package $aaptFlags -F $out`,
Dan Willemsenc94a7682015-11-17 15:27:28 -080044 CommandDeps: []string{"$aaptCmd"},
Colin Cross30e076a2015-04-13 13:58:27 -070045 Description: "aapt export package $out",
46 },
47 "aaptFlags", "publicResourcesFile", "proguardOptionsFile", "javaDir", "javaFileList")
48
49 aaptAddResources = pctx.StaticRule("aaptAddResources",
50 blueprint.RuleParams{
51 // TODO: add-jni-shared-libs-to-package
52 Command: `cp -f $in $out.tmp && $aaptCmd package -u $aaptFlags -F $out.tmp && mv $out.tmp $out`,
Dan Willemsenc94a7682015-11-17 15:27:28 -080053 CommandDeps: []string{"$aaptCmd"},
Colin Cross30e076a2015-04-13 13:58:27 -070054 Description: "aapt package $out",
55 },
56 "aaptFlags")
57
Colin Cross30e076a2015-04-13 13:58:27 -070058 signapk = pctx.StaticRule("signapk",
59 blueprint.RuleParams{
60 Command: `java -jar $signapkCmd $certificates $in $out`,
Dan Willemsenc94a7682015-11-17 15:27:28 -080061 CommandDeps: []string{"$signapkCmd"},
Colin Cross30e076a2015-04-13 13:58:27 -070062 Description: "signapk $out",
63 },
64 "certificates")
65
66 androidManifestMerger = pctx.StaticRule("androidManifestMerger",
67 blueprint.RuleParams{
68 Command: "java -classpath $androidManifestMergerCmd com.android.manifmerger.Main merge " +
69 "--main $in --libs $libsManifests --out $out",
Dan Willemsenc94a7682015-11-17 15:27:28 -080070 CommandDeps: []string{"$androidManifestMergerCmd"},
Colin Cross30e076a2015-04-13 13:58:27 -070071 Description: "merge manifest files $out",
72 },
73 "libsManifests")
74)
75
76func init() {
Dan Willemsen34cc69e2015-09-23 15:26:20 -070077 pctx.SourcePathVariable("androidManifestMergerCmd", "prebuilts/devtools/tools/lib/manifest-merger.jar")
78 pctx.HostBinToolVariable("aaptCmd", "aapt")
79 pctx.HostJavaToolVariable("signapkCmd", "signapk.jar")
Colin Cross30e076a2015-04-13 13:58:27 -070080}
81
82func CreateResourceJavaFiles(ctx common.AndroidModuleContext, flags []string,
Dan Willemsen34cc69e2015-09-23 15:26:20 -070083 deps common.Paths) (common.Path, common.Path, common.Path) {
84 javaDir := common.PathForModuleGen(ctx, "R")
85 javaFileList := common.PathForModuleOut(ctx, "R.filelist")
86 publicResourcesFile := common.PathForModuleOut(ctx, "public_resources.xml")
87 proguardOptionsFile := common.PathForModuleOut(ctx, "proguard.options")
Colin Cross30e076a2015-04-13 13:58:27 -070088
Dan Willemsen34cc69e2015-09-23 15:26:20 -070089 ctx.ModuleBuild(pctx, common.ModuleBuildParams{
Colin Cross30e076a2015-04-13 13:58:27 -070090 Rule: aaptCreateResourceJavaFile,
Dan Willemsen34cc69e2015-09-23 15:26:20 -070091 Outputs: common.WritablePaths{publicResourcesFile, proguardOptionsFile, javaFileList},
Colin Cross30e076a2015-04-13 13:58:27 -070092 Implicits: deps,
93 Args: map[string]string{
94 "aaptFlags": strings.Join(flags, " "),
Dan Willemsen34cc69e2015-09-23 15:26:20 -070095 "publicResourcesFile": publicResourcesFile.String(),
96 "proguardOptionsFile": proguardOptionsFile.String(),
97 "javaDir": javaDir.String(),
98 "javaFileList": javaFileList.String(),
Colin Cross30e076a2015-04-13 13:58:27 -070099 },
100 })
101
102 return publicResourcesFile, proguardOptionsFile, javaFileList
103}
104
Dan Willemsen34cc69e2015-09-23 15:26:20 -0700105func CreateExportPackage(ctx common.AndroidModuleContext, flags []string, deps common.Paths) common.ModuleOutPath {
106 outputFile := common.PathForModuleOut(ctx, "package-export.apk")
Colin Cross30e076a2015-04-13 13:58:27 -0700107
Dan Willemsen34cc69e2015-09-23 15:26:20 -0700108 ctx.ModuleBuild(pctx, common.ModuleBuildParams{
Colin Cross30e076a2015-04-13 13:58:27 -0700109 Rule: aaptCreateAssetsPackage,
Dan Willemsen34cc69e2015-09-23 15:26:20 -0700110 Output: outputFile,
Colin Cross30e076a2015-04-13 13:58:27 -0700111 Implicits: deps,
112 Args: map[string]string{
113 "aaptFlags": strings.Join(flags, " "),
114 },
115 })
116
117 return outputFile
118}
119
Dan Willemsen34cc69e2015-09-23 15:26:20 -0700120func CreateAppPackage(ctx common.AndroidModuleContext, flags []string, jarFile common.Path,
121 certificates []string) common.Path {
Colin Cross30e076a2015-04-13 13:58:27 -0700122
Dan Willemsen34cc69e2015-09-23 15:26:20 -0700123 resourceApk := common.PathForModuleOut(ctx, "resources.apk")
Colin Cross30e076a2015-04-13 13:58:27 -0700124
Dan Willemsen34cc69e2015-09-23 15:26:20 -0700125 ctx.ModuleBuild(pctx, common.ModuleBuildParams{
126 Rule: aaptAddResources,
127 Output: resourceApk,
128 Input: jarFile,
Colin Cross30e076a2015-04-13 13:58:27 -0700129 Args: map[string]string{
130 "aaptFlags": strings.Join(flags, " "),
131 },
132 })
133
Dan Willemsen34cc69e2015-09-23 15:26:20 -0700134 outputFile := common.PathForModuleOut(ctx, "package.apk")
Colin Cross30e076a2015-04-13 13:58:27 -0700135
136 var certificateArgs []string
137 for _, c := range certificates {
138 certificateArgs = append(certificateArgs, c+".x509.pem", c+".pk8")
139 }
140
Dan Willemsen34cc69e2015-09-23 15:26:20 -0700141 ctx.ModuleBuild(pctx, common.ModuleBuildParams{
142 Rule: signapk,
143 Output: outputFile,
144 Input: resourceApk,
Colin Cross30e076a2015-04-13 13:58:27 -0700145 Args: map[string]string{
146 "certificates": strings.Join(certificateArgs, " "),
147 },
148 })
149
Colin Cross30e076a2015-04-13 13:58:27 -0700150 return outputFile
151}