If specified, the package version code in the AndroidManifest.xml is
replaced with the version code for the build. See also forceversion.
-@item rm=<relpath>
-Specifies the relative path of a file to delete before the build is
-done. The path is relative to the base of the build directory - i.e.
-the root of the directory structure checked out from the source
-respository - not necessarily the directory that contains
+@item rm=<relpath1;relpath2;...>
+Specifies the relative paths of files or directories to delete before
+the build is done. The paths are relative to the base of the build
+directory - i.e. the root of the directory structure checked out from
+the source respository - not necessarily the directory that contains
AndroidManifest.xml.
-Multiple files can be specified by separating they with ';'.
+Multiple files/directories can be specified by separating them with ';'.
+Directories will be recursively deleted.
@item fixtrans=yes
Modifies any instances of string resources that use multiple
path]) != 0:
raise BuildException("Failed to amend manifest")
- # Delete unwanted file...
+ # Delete unwanted files...
if 'rm' in build:
for part in build['rm'].split(';'):
dest = os.path.join(build_dir, part.strip())
+ if not os.path.realpath(dest).startswith(os.path.realpath(root_dir)):
+ raise BuildException("rm is outside build root")
if os.path.exists(dest):
- os.remove(dest)
+ subprocess.call('rm -rf ' + dest, shell=True)
# Fix apostrophes translation files if necessary...
if build.get('fixapos', 'no') == 'yes':