class AndroidToolchain
super MakefileToolchain
- var android_project_root: String
+ var android_project_root: nullable String = null
redef fun compile_dir
do
redef fun write_files(compiler, compile_dir, cfiles)
do
+ var android_project_root = android_project_root.as(not null)
var project = toolcontext.modelbuilder.android_project_for(compiler.mainmodule)
var short_project_name = compiler.mainmodule.name
+ var release = toolcontext.opt_release.value
var app_name = project.name
if app_name == null then app_name = compiler.mainmodule.name
- print app_name
var app_package = project.java_package
if app_package == null then app_package = "org.nitlanguage.{short_project_name}"
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="{{{app_package}}}"
android:versionCode="{{{project.version_code}}}"
- android:versionName="{{{app_version}}}"
- android:debuggable="true">
+ android:versionName="{{{app_version}}}">
<!-- This is the platform API where NativeActivity was introduced. -->
<uses-sdk android:minSdkVersion="9" />
<application
android:label="@string/app_name"
android:hasCode="true"
- android:debuggable="true">
+ android:debuggable="{{{not release}}}">
<!-- Our activity is the built-in NativeActivity framework class.
This will take care of integrating with our NDK code. -->
### Link to assets (for mnit and others)
# This will be accessed from `android_project_root`
- var mainmodule_dir = compiler.mainmodule.location.file.filename.dirname
- var assets_dir = "{mainmodule_dir}/../assets"
- if not assets_dir.file_exists then assets_dir = "{mainmodule_dir}/assets"
+ var assets_dir
+ if compiler.mainmodule.location.file != null then
+ # it is a real file, use "{file}/../assets"
+ assets_dir = "{compiler.mainmodule.location.file.filename.dirname}/../assets"
+ else
+ # probably used -m, use "."
+ assets_dir = "assets"
+ end
if assets_dir.file_exists then
assets_dir = assets_dir.realpath
var target_assets_dir = "{android_project_root}/assets"
redef fun compile_c_code(compiler, compile_dir)
do
+ var android_project_root = android_project_root.as(not null)
+ var release = toolcontext.opt_release.value
+
# Compile C code (and thus Nit)
toolcontext.exec_and_check(["ndk-build", "-s", "-j", "4", "-C", android_project_root], "Android project error")
# Generate the apk
- toolcontext.exec_and_check(["ant", "-q", "debug", "-f", android_project_root+"/build.xml"], "Android project error")
+ var args = ["ant", "-q", "-f", android_project_root+"/build.xml"]
+ if release then
+ args.add "release"
+ else args.add "debug"
+ toolcontext.exec_and_check(args, "Android project error")
# Move the apk to the target
var outname = toolcontext.opt_output.value
if outname == null then outname = "{compiler.mainmodule.name}.apk"
- toolcontext.exec_and_check(["mv", "{android_project_root}/bin/{compiler.mainmodule.name}-debug.apk", outname], "Android project error")
+
+ var src_apk_suffix
+ if release then
+ src_apk_suffix = "release-unsigned"
+ else src_apk_suffix = "debug"
+
+ toolcontext.exec_and_check(["mv", "{android_project_root}/bin/{compiler.mainmodule.name}-{src_apk_suffix}.apk", outname], "Android project error")
end
end