xref: /aosp_15_r20/tools/apksig/etc/apksigner-kms (revision 7bbbfb8d33ab710321c31da7a57038ad95607045)
1*7bbbfb8dSAndroid Build Coastguard Worker#!/bin/bash
2*7bbbfb8dSAndroid Build Coastguard Worker#
3*7bbbfb8dSAndroid Build Coastguard Worker# Copyright (C) 2024 The Android Open Source Project
4*7bbbfb8dSAndroid Build Coastguard Worker#
5*7bbbfb8dSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
6*7bbbfb8dSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
7*7bbbfb8dSAndroid Build Coastguard Worker# You may obtain a copy of the License at
8*7bbbfb8dSAndroid Build Coastguard Worker#
9*7bbbfb8dSAndroid Build Coastguard Worker#     http://www.apache.org/licenses/LICENSE-2.0
10*7bbbfb8dSAndroid Build Coastguard Worker#
11*7bbbfb8dSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
12*7bbbfb8dSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
13*7bbbfb8dSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*7bbbfb8dSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
15*7bbbfb8dSAndroid Build Coastguard Worker# limitations under the License.
16*7bbbfb8dSAndroid Build Coastguard Worker
17*7bbbfb8dSAndroid Build Coastguard Worker# Set up prog to be the path of this script, including following symlinks,
18*7bbbfb8dSAndroid Build Coastguard Worker# and set up progdir to be the fully-qualified pathname of its directory.
19*7bbbfb8dSAndroid Build Coastguard Workerprog="$0"
20*7bbbfb8dSAndroid Build Coastguard Workerwhile [ -h "${prog}" ]; do
21*7bbbfb8dSAndroid Build Coastguard Worker    newProg=`/bin/ls -ld "${prog}"`
22*7bbbfb8dSAndroid Build Coastguard Worker    newProg=`expr "${newProg}" : ".* -> \(.*\)$"`
23*7bbbfb8dSAndroid Build Coastguard Worker    if expr "x${newProg}" : 'x/' >/dev/null; then
24*7bbbfb8dSAndroid Build Coastguard Worker        prog="${newProg}"
25*7bbbfb8dSAndroid Build Coastguard Worker    else
26*7bbbfb8dSAndroid Build Coastguard Worker        progdir=`dirname "${prog}"`
27*7bbbfb8dSAndroid Build Coastguard Worker        prog="${progdir}/${newProg}"
28*7bbbfb8dSAndroid Build Coastguard Worker    fi
29*7bbbfb8dSAndroid Build Coastguard Workerdone
30*7bbbfb8dSAndroid Build Coastguard Workeroldwd=`pwd`
31*7bbbfb8dSAndroid Build Coastguard Workerprogdir=`dirname "${prog}"`
32*7bbbfb8dSAndroid Build Coastguard Workercd "${progdir}"
33*7bbbfb8dSAndroid Build Coastguard Workerprogdir=`pwd`
34*7bbbfb8dSAndroid Build Coastguard Workerprog="${progdir}"/`basename "${prog}"`
35*7bbbfb8dSAndroid Build Coastguard Workercd "${oldwd}"
36*7bbbfb8dSAndroid Build Coastguard Worker
37*7bbbfb8dSAndroid Build Coastguard Worker# TODO(b/329887683): reuse existing apksigner script (this is the only difference)
38*7bbbfb8dSAndroid Build Coastguard Workerjarfile=apksigner-kms.jar
39*7bbbfb8dSAndroid Build Coastguard Workerlibdir="$progdir"
40*7bbbfb8dSAndroid Build Coastguard Worker
41*7bbbfb8dSAndroid Build Coastguard Workerif [ ! -r "$libdir/$jarfile" ]; then
42*7bbbfb8dSAndroid Build Coastguard Worker    # set apksigner.jar location for the SDK case
43*7bbbfb8dSAndroid Build Coastguard Worker    libdir="$libdir/lib"
44*7bbbfb8dSAndroid Build Coastguard Workerfi
45*7bbbfb8dSAndroid Build Coastguard Worker
46*7bbbfb8dSAndroid Build Coastguard Worker
47*7bbbfb8dSAndroid Build Coastguard Workerif [ ! -r "$libdir/$jarfile" ]; then
48*7bbbfb8dSAndroid Build Coastguard Worker    # set apksigner.jar location for the Android tree case
49*7bbbfb8dSAndroid Build Coastguard Worker    libdir=`dirname "$progdir"`/framework
50*7bbbfb8dSAndroid Build Coastguard Worker    # also include the library directory for any provider native libraries
51*7bbbfb8dSAndroid Build Coastguard Worker    providerLibdir=`dirname "$progdir"`/lib64
52*7bbbfb8dSAndroid Build Coastguard Workerfi
53*7bbbfb8dSAndroid Build Coastguard Worker
54*7bbbfb8dSAndroid Build Coastguard Workerif [ ! -r "$libdir/$jarfile" ]; then
55*7bbbfb8dSAndroid Build Coastguard Worker    echo `basename "$prog"`": can't find $jarfile"
56*7bbbfb8dSAndroid Build Coastguard Worker    exit 1
57*7bbbfb8dSAndroid Build Coastguard Workerfi
58*7bbbfb8dSAndroid Build Coastguard Worker
59*7bbbfb8dSAndroid Build Coastguard Worker# By default, give apksigner a max heap size of 1 gig. This can be overridden
60*7bbbfb8dSAndroid Build Coastguard Worker# by using a "-J" option (see below).
61*7bbbfb8dSAndroid Build Coastguard WorkerdefaultMx="-Xmx1024M"
62*7bbbfb8dSAndroid Build Coastguard Worker
63*7bbbfb8dSAndroid Build Coastguard Worker# The following will extract any initial parameters of the form
64*7bbbfb8dSAndroid Build Coastguard Worker# "-J<stuff>" from the command line and pass them to the Java
65*7bbbfb8dSAndroid Build Coastguard Worker# invocation (instead of to apksigner). This makes it possible for you to add
66*7bbbfb8dSAndroid Build Coastguard Worker# a command-line parameter such as "-JXmx256M" in your scripts, for
67*7bbbfb8dSAndroid Build Coastguard Worker# example. "java" (with no args) and "java -X" give a summary of
68*7bbbfb8dSAndroid Build Coastguard Worker# available options.
69*7bbbfb8dSAndroid Build Coastguard Worker
70*7bbbfb8dSAndroid Build Coastguard WorkerjavaOpts=""
71*7bbbfb8dSAndroid Build Coastguard Worker
72*7bbbfb8dSAndroid Build Coastguard Workerwhile expr "x$1" : 'x-J' >/dev/null; do
73*7bbbfb8dSAndroid Build Coastguard Worker    opt=`expr "x$1" : 'x-J\(.*\)'`
74*7bbbfb8dSAndroid Build Coastguard Worker    javaOpts="${javaOpts} -${opt}"
75*7bbbfb8dSAndroid Build Coastguard Worker    if expr "x${opt}" : "xXmx[0-9]" >/dev/null; then
76*7bbbfb8dSAndroid Build Coastguard Worker        defaultMx="no"
77*7bbbfb8dSAndroid Build Coastguard Worker    elif expr "x${opt}" : "xDjava.library.path=" >/dev/null; then
78*7bbbfb8dSAndroid Build Coastguard Worker        defaultLibdir="no"
79*7bbbfb8dSAndroid Build Coastguard Worker    fi
80*7bbbfb8dSAndroid Build Coastguard Worker    shift
81*7bbbfb8dSAndroid Build Coastguard Workerdone
82*7bbbfb8dSAndroid Build Coastguard Worker
83*7bbbfb8dSAndroid Build Coastguard Workerif [ "${defaultMx}" != "no" ]; then
84*7bbbfb8dSAndroid Build Coastguard Worker    javaOpts="${javaOpts} ${defaultMx}"
85*7bbbfb8dSAndroid Build Coastguard Workerfi
86*7bbbfb8dSAndroid Build Coastguard Worker
87*7bbbfb8dSAndroid Build Coastguard Workerif [ "${defaultLibdir}" != "no" ] && [ -n $providerLibdir ]; then
88*7bbbfb8dSAndroid Build Coastguard Worker    javaOpts="${javaOpts} -Djava.library.path=$providerLibdir"
89*7bbbfb8dSAndroid Build Coastguard Workerfi
90*7bbbfb8dSAndroid Build Coastguard Worker
91*7bbbfb8dSAndroid Build Coastguard Workerif [ "$OSTYPE" = "cygwin" ]; then
92*7bbbfb8dSAndroid Build Coastguard Worker    # For Cygwin, convert the jarfile path into native Windows style.
93*7bbbfb8dSAndroid Build Coastguard Worker    jarpath=`cygpath -w "$libdir/$jarfile"`
94*7bbbfb8dSAndroid Build Coastguard Workerelse
95*7bbbfb8dSAndroid Build Coastguard Worker    jarpath="$libdir/$jarfile"
96*7bbbfb8dSAndroid Build Coastguard Workerfi
97*7bbbfb8dSAndroid Build Coastguard Worker
98*7bbbfb8dSAndroid Build Coastguard Workerexec java $javaOpts -jar "$jarpath" "$@"
99