blob: 849abfd351a6f159bf75c3fdd15dd08d33f57861 [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 (
22 "path/filepath"
23 "strings"
24
25 "github.com/google/blueprint"
26
27 "android/soong/common"
28)
29
30var (
31 aaptCreateResourceJavaFile = pctx.StaticRule("aaptCreateResourceJavaFile",
32 blueprint.RuleParams{
33 Command: `rm -rf "$javaDir" && mkdir -p "$javaDir" && ` +
34 `$aaptCmd package -m $aaptFlags -P $publicResourcesFile -G $proguardOptionsFile ` +
35 `-J $javaDir || ( rm -rf "$javaDir/*"; exit 41 ) && ` +
36 `find $javaDir -name "*.java" > $javaFileList`,
Dan Willemsenc94a7682015-11-17 15:27:28 -080037 CommandDeps: []string{"$aaptCmd"},
Colin Cross30e076a2015-04-13 13:58:27 -070038 Description: "aapt create R.java $out",
39 },
40 "aaptFlags", "publicResourcesFile", "proguardOptionsFile", "javaDir", "javaFileList")
41
42 aaptCreateAssetsPackage = pctx.StaticRule("aaptCreateAssetsPackage",
43 blueprint.RuleParams{
Colin Cross5adac8a2015-04-28 13:29:20 -070044 Command: `rm -f $out && $aaptCmd package $aaptFlags -F $out`,
Dan Willemsenc94a7682015-11-17 15:27:28 -080045 CommandDeps: []string{"$aaptCmd"},
Colin Cross30e076a2015-04-13 13:58:27 -070046 Description: "aapt export package $out",
47 },
48 "aaptFlags", "publicResourcesFile", "proguardOptionsFile", "javaDir", "javaFileList")
49
50 aaptAddResources = pctx.StaticRule("aaptAddResources",
51 blueprint.RuleParams{
52 // TODO: add-jni-shared-libs-to-package
53 Command: `cp -f $in $out.tmp && $aaptCmd package -u $aaptFlags -F $out.tmp && mv $out.tmp $out`,
Dan Willemsenc94a7682015-11-17 15:27:28 -080054 CommandDeps: []string{"$aaptCmd"},
Colin Cross30e076a2015-04-13 13:58:27 -070055 Description: "aapt package $out",
56 },
57 "aaptFlags")
58
Colin Cross30e076a2015-04-13 13:58:27 -070059 signapk = pctx.StaticRule("signapk",
60 blueprint.RuleParams{
61 Command: `java -jar $signapkCmd $certificates $in $out`,
Dan Willemsenc94a7682015-11-17 15:27:28 -080062 CommandDeps: []string{"$signapkCmd"},
Colin Cross30e076a2015-04-13 13:58:27 -070063 Description: "signapk $out",
64 },
65 "certificates")
66
67 androidManifestMerger = pctx.StaticRule("androidManifestMerger",
68 blueprint.RuleParams{
69 Command: "java -classpath $androidManifestMergerCmd com.android.manifmerger.Main merge " +
70 "--main $in --libs $libsManifests --out $out",
Dan Willemsenc94a7682015-11-17 15:27:28 -080071 CommandDeps: []string{"$androidManifestMergerCmd"},
Colin Cross30e076a2015-04-13 13:58:27 -070072 Description: "merge manifest files $out",
73 },
74 "libsManifests")
75)
76
77func init() {
78 pctx.StaticVariable("androidManifestMergerCmd", "${srcDir}/prebuilts/devtools/tools/lib/manifest-merger.jar")
79 pctx.VariableFunc("aaptCmd", func(c interface{}) (string, error) {
80 return c.(common.Config).HostBinTool("aapt")
81 })
Colin Cross30e076a2015-04-13 13:58:27 -070082 pctx.VariableFunc("signapkCmd", func(c interface{}) (string, error) {
83 return c.(common.Config).HostJavaTool("signapk.jar")
84 })
85}
86
87func CreateResourceJavaFiles(ctx common.AndroidModuleContext, flags []string,
88 deps []string) (string, string, string) {
89 javaDir := filepath.Join(common.ModuleGenDir(ctx), "R")
90 javaFileList := filepath.Join(common.ModuleOutDir(ctx), "R.filelist")
91 publicResourcesFile := filepath.Join(common.ModuleOutDir(ctx), "public_resources.xml")
92 proguardOptionsFile := filepath.Join(common.ModuleOutDir(ctx), "proguard.options")
93
94 ctx.Build(pctx, blueprint.BuildParams{
95 Rule: aaptCreateResourceJavaFile,
96 Outputs: []string{publicResourcesFile, proguardOptionsFile, javaFileList},
97 Implicits: deps,
98 Args: map[string]string{
99 "aaptFlags": strings.Join(flags, " "),
100 "publicResourcesFile": publicResourcesFile,
101 "proguardOptionsFile": proguardOptionsFile,
102 "javaDir": javaDir,
103 "javaFileList": javaFileList,
104 },
105 })
106
107 return publicResourcesFile, proguardOptionsFile, javaFileList
108}
109
110func CreateExportPackage(ctx common.AndroidModuleContext, flags []string, deps []string) string {
111 outputFile := filepath.Join(common.ModuleOutDir(ctx), "package-export.apk")
112
113 ctx.Build(pctx, blueprint.BuildParams{
114 Rule: aaptCreateAssetsPackage,
115 Outputs: []string{outputFile},
116 Implicits: deps,
117 Args: map[string]string{
118 "aaptFlags": strings.Join(flags, " "),
119 },
120 })
121
122 return outputFile
123}
124
125func CreateAppPackage(ctx common.AndroidModuleContext, flags []string, jarFile string,
126 certificates []string) string {
127
128 resourceApk := filepath.Join(common.ModuleOutDir(ctx), "resources.apk")
129
130 ctx.Build(pctx, blueprint.BuildParams{
Dan Willemsenc94a7682015-11-17 15:27:28 -0800131 Rule: aaptAddResources,
132 Outputs: []string{resourceApk},
133 Inputs: []string{jarFile},
Colin Cross30e076a2015-04-13 13:58:27 -0700134 Args: map[string]string{
135 "aaptFlags": strings.Join(flags, " "),
136 },
137 })
138
Alex Klyubin03257b02015-12-04 11:58:32 -0800139 outputFile := filepath.Join(common.ModuleOutDir(ctx), "package.apk")
Colin Cross30e076a2015-04-13 13:58:27 -0700140
141 var certificateArgs []string
142 for _, c := range certificates {
143 certificateArgs = append(certificateArgs, c+".x509.pem", c+".pk8")
144 }
145
146 ctx.Build(pctx, blueprint.BuildParams{
Dan Willemsenc94a7682015-11-17 15:27:28 -0800147 Rule: signapk,
Alex Klyubin03257b02015-12-04 11:58:32 -0800148 Outputs: []string{outputFile},
Dan Willemsenc94a7682015-11-17 15:27:28 -0800149 Inputs: []string{resourceApk},
Colin Cross30e076a2015-04-13 13:58:27 -0700150 Args: map[string]string{
151 "certificates": strings.Join(certificateArgs, " "),
152 },
153 })
154
Colin Cross30e076a2015-04-13 13:58:27 -0700155 return outputFile
156}