# Custom lines to add to the AndroidManifest.xml in the <application> node
var manifest_application_lines = new Array[String]
+ # Minimum API level required for the application to run
+ var min_sdk: nullable Int = null
+
+ # Build target API level
+ var target_sdk: nullable Int = null
+
+ # Maximum API level on which the application will be allowed to run
+ var max_sdk: nullable Int = null
+
redef fun to_s do return """
name: {{{name or else "null"}}}
namespace: {{{java_package or else "null"}}}
annot = priority_annotation_on_modules("java_package", mmodule)
if annot != null then project.java_package = annot.arg_as_string(self)
- var annots = collect_annotations_on_modules("android_manifest", mmodule)
+ var annots = collect_annotations_on_modules("min_sdk_version", mmodule)
+ for an in annots do project.min_sdk = an.arg_as_int(self)
+
+ annots = collect_annotations_on_modules("max_sdk_version", mmodule)
+ for an in annots do project.max_sdk = an.arg_as_int(self)
+
+ annots = collect_annotations_on_modules("target_sdk_version", mmodule)
+ for an in annots do project.target_sdk = an.arg_as_int(self)
+
+ annots = collect_annotations_on_modules("android_manifest", mmodule)
for an in annots do project.manifest_lines.add an.arg_as_string(self)
annots = collect_annotations_on_modules("android_manifest_application", mmodule)
end
end
+ # Get the single argument of `self` as an `Int`. Raise error on any inconsistency.
+ private fun arg_as_int(modelbuilder: ModelBuilder): nullable Int
+ do
+ var annotation_name = n_atid.n_id.text
+ var format_error = "Annotation error: \"{annotation_name}\" expects a single Int as argument."
+
+ var args = n_args
+ var platform_name
+ if args.length != 1 then
+ modelbuilder.error(self, format_error)
+ return null
+ else
+ var arg = args.first
+
+ if not arg isa AExprAtArg then
+ modelbuilder.error(self, format_error)
+ return null
+ end
+
+ var expr = arg.n_expr
+ if not expr isa AIntExpr then
+ modelbuilder.error(self, format_error)
+ return null
+ end
+ return expr.value.as(not null)
+ end
+ end
+
# Returns a version string (example: "1.5.6b42a7c") from an annotation `version(1, 5, git_revision)`.
#
# The user can enter as many fields as needed. The call to `git_revision` will be replaced by the short
-# This file is part of NIT ( http://www.nitlanguage.org )
#
# Copyright 2014 Alexis Laferrière <alexis.laf@xymus.net>
#
var app_version = project.version
if app_version == null then app_version = "1.0"
+ var app_min_sdk = project.min_sdk
+ if app_min_sdk == null then app_min_sdk = 10
+
+ var app_target_sdk = project.target_sdk
+ if app_target_sdk == null then app_target_sdk = app_min_sdk
+
+ var app_max_sdk = ""
+ if project.max_sdk != null then app_max_sdk = "android:maxSdkVersion=\"{app_max_sdk}\""
+
# Clear the previous android project, so there is no "existing project warning"
# or conflict between Java files of different projects
if android_project_root.file_exists then android_project_root.rmdir
var args = ["android", "-s",
"create", "project",
"--name", short_project_name,
- "--target", "android-10",
+ "--target", "android-{app_target_sdk}",
"--path", android_project_root,
"--package", app_package,
"--activity", short_project_name]
android:versionName="{{{app_version}}}">
<!-- This is the platform API where NativeActivity was introduced. -->
- <uses-sdk android:minSdkVersion="9" />
+ <uses-sdk
+ android:minSdkVersion="{{{app_min_sdk}}}"
+ android:targetSdkVersion="{{{app_target_sdk}}}"
+ {{{app_max_sdk}}} />
<application
android:label="@string/app_name"