blob: 55fded57ce1a454fb528e6d278b1c19fcbb6f817 [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
Colin Cross635c3b02016-05-18 15:37:25 -070026 "android/soong/android"
Colin Cross30e076a2015-04-13 13:58:27 -070027)
28
29var (
Colin Cross9d45bb72016-08-29 16:14:13 -070030 aaptCreateResourceJavaFile = pctx.AndroidStaticRule("aaptCreateResourceJavaFile",
Colin Cross30e076a2015-04-13 13:58:27 -070031 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 },
38 "aaptFlags", "publicResourcesFile", "proguardOptionsFile", "javaDir", "javaFileList")
39
Colin Cross9d45bb72016-08-29 16:14:13 -070040 aaptCreateAssetsPackage = pctx.AndroidStaticRule("aaptCreateAssetsPackage",
Colin Cross30e076a2015-04-13 13:58:27 -070041 blueprint.RuleParams{
Colin Cross5adac8a2015-04-28 13:29:20 -070042 Command: `rm -f $out && $aaptCmd package $aaptFlags -F $out`,
Dan Willemsenc94a7682015-11-17 15:27:28 -080043 CommandDeps: []string{"$aaptCmd"},
Colin Cross30e076a2015-04-13 13:58:27 -070044 },
45 "aaptFlags", "publicResourcesFile", "proguardOptionsFile", "javaDir", "javaFileList")
46
Colin Cross9d45bb72016-08-29 16:14:13 -070047 aaptAddResources = pctx.AndroidStaticRule("aaptAddResources",
Colin Cross30e076a2015-04-13 13:58:27 -070048 blueprint.RuleParams{
49 // TODO: add-jni-shared-libs-to-package
50 Command: `cp -f $in $out.tmp && $aaptCmd package -u $aaptFlags -F $out.tmp && mv $out.tmp $out`,
Dan Willemsenc94a7682015-11-17 15:27:28 -080051 CommandDeps: []string{"$aaptCmd"},
Colin Cross30e076a2015-04-13 13:58:27 -070052 },
53 "aaptFlags")
54
Colin Cross9d45bb72016-08-29 16:14:13 -070055 signapk = pctx.AndroidStaticRule("signapk",
Colin Cross30e076a2015-04-13 13:58:27 -070056 blueprint.RuleParams{
57 Command: `java -jar $signapkCmd $certificates $in $out`,
Dan Willemsenc94a7682015-11-17 15:27:28 -080058 CommandDeps: []string{"$signapkCmd"},
Colin Cross30e076a2015-04-13 13:58:27 -070059 },
60 "certificates")
61
Colin Cross9d45bb72016-08-29 16:14:13 -070062 androidManifestMerger = pctx.AndroidStaticRule("androidManifestMerger",
Colin Cross30e076a2015-04-13 13:58:27 -070063 blueprint.RuleParams{
64 Command: "java -classpath $androidManifestMergerCmd com.android.manifmerger.Main merge " +
65 "--main $in --libs $libsManifests --out $out",
Dan Willemsenc94a7682015-11-17 15:27:28 -080066 CommandDeps: []string{"$androidManifestMergerCmd"},
Colin Cross67a5c132017-05-09 13:45:28 -070067 Description: "merge manifest files",
Colin Cross30e076a2015-04-13 13:58:27 -070068 },
69 "libsManifests")
70)
71
72func init() {
Dan Willemsen34cc69e2015-09-23 15:26:20 -070073 pctx.SourcePathVariable("androidManifestMergerCmd", "prebuilts/devtools/tools/lib/manifest-merger.jar")
74 pctx.HostBinToolVariable("aaptCmd", "aapt")
75 pctx.HostJavaToolVariable("signapkCmd", "signapk.jar")
Colin Cross30e076a2015-04-13 13:58:27 -070076}
77
Colin Cross635c3b02016-05-18 15:37:25 -070078func CreateResourceJavaFiles(ctx android.ModuleContext, flags []string,
79 deps android.Paths) (android.Path, android.Path, android.Path) {
80 javaDir := android.PathForModuleGen(ctx, "R")
81 javaFileList := android.PathForModuleOut(ctx, "R.filelist")
82 publicResourcesFile := android.PathForModuleOut(ctx, "public_resources.xml")
83 proguardOptionsFile := android.PathForModuleOut(ctx, "proguard.options")
Colin Cross30e076a2015-04-13 13:58:27 -070084
Colin Cross635c3b02016-05-18 15:37:25 -070085 ctx.ModuleBuild(pctx, android.ModuleBuildParams{
Colin Cross67a5c132017-05-09 13:45:28 -070086 Rule: aaptCreateResourceJavaFile,
87 Description: "aapt create R.java",
88 Outputs: android.WritablePaths{publicResourcesFile, proguardOptionsFile, javaFileList},
89 Implicits: deps,
Colin Cross30e076a2015-04-13 13:58:27 -070090 Args: map[string]string{
91 "aaptFlags": strings.Join(flags, " "),
Dan Willemsen34cc69e2015-09-23 15:26:20 -070092 "publicResourcesFile": publicResourcesFile.String(),
93 "proguardOptionsFile": proguardOptionsFile.String(),
94 "javaDir": javaDir.String(),
95 "javaFileList": javaFileList.String(),
Colin Cross30e076a2015-04-13 13:58:27 -070096 },
97 })
98
99 return publicResourcesFile, proguardOptionsFile, javaFileList
100}
101
Colin Cross635c3b02016-05-18 15:37:25 -0700102func CreateExportPackage(ctx android.ModuleContext, flags []string, deps android.Paths) android.ModuleOutPath {
103 outputFile := android.PathForModuleOut(ctx, "package-export.apk")
Colin Cross30e076a2015-04-13 13:58:27 -0700104
Colin Cross635c3b02016-05-18 15:37:25 -0700105 ctx.ModuleBuild(pctx, android.ModuleBuildParams{
Colin Cross67a5c132017-05-09 13:45:28 -0700106 Rule: aaptCreateAssetsPackage,
107 Description: "aapt export package",
108 Output: outputFile,
109 Implicits: deps,
Colin Cross30e076a2015-04-13 13:58:27 -0700110 Args: map[string]string{
111 "aaptFlags": strings.Join(flags, " "),
112 },
113 })
114
115 return outputFile
116}
117
Colin Cross635c3b02016-05-18 15:37:25 -0700118func CreateAppPackage(ctx android.ModuleContext, flags []string, jarFile android.Path,
119 certificates []string) android.Path {
Colin Cross30e076a2015-04-13 13:58:27 -0700120
Colin Cross635c3b02016-05-18 15:37:25 -0700121 resourceApk := android.PathForModuleOut(ctx, "resources.apk")
Colin Cross30e076a2015-04-13 13:58:27 -0700122
Colin Cross635c3b02016-05-18 15:37:25 -0700123 ctx.ModuleBuild(pctx, android.ModuleBuildParams{
Colin Cross67a5c132017-05-09 13:45:28 -0700124 Rule: aaptAddResources,
125 Description: "aapt package",
126 Output: resourceApk,
127 Input: jarFile,
Colin Cross30e076a2015-04-13 13:58:27 -0700128 Args: map[string]string{
129 "aaptFlags": strings.Join(flags, " "),
130 },
131 })
132
Colin Cross635c3b02016-05-18 15:37:25 -0700133 outputFile := android.PathForModuleOut(ctx, "package.apk")
Colin Cross30e076a2015-04-13 13:58:27 -0700134
135 var certificateArgs []string
136 for _, c := range certificates {
137 certificateArgs = append(certificateArgs, c+".x509.pem", c+".pk8")
138 }
139
Colin Cross635c3b02016-05-18 15:37:25 -0700140 ctx.ModuleBuild(pctx, android.ModuleBuildParams{
Colin Cross67a5c132017-05-09 13:45:28 -0700141 Rule: signapk,
142 Description: "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}