TEMPLATE = lib android { API_VERSION_TO_USE = $$(ANDROID_API_VERSION) isEmpty(API_VERSION_TO_USE): API_VERSION_TO_USE = $$API_VERSION isEmpty(API_VERSION_TO_USE): API_VERSION_TO_USE = android-10 ANDROID_JAR_FILE = $$ANDROID_SDK_ROOT/platforms/$$API_VERSION_TO_USE/android.jar !exists($$ANDROID_JAR_FILE) { error("The Path $$ANDROID_JAR_FILE does not exist. Make sure the ANDROID_SDK_ROOT and ANDROID_API_VERSION environment variables are correctly set.") } JAVACLASSPATH += $$ANDROID_JAR_FILE # FIXME: This is a hack to work around some hardcoded values in the android.prf. The # android.prf should be fixed and this should be removed. CONFIG += android_app } isEmpty(CLASS_DIR) { bundled_jar_file: CLASS_DIR = .classes.bundled else: CLASS_DIR = .classes } CONFIG -= qt # Without these, qmake adds a name prefix and versioning postfixes (as well as file # links) to the target. This is hardcoded in the qmake code, so for now we use # the plugin configs to get what we want. CONFIG += plugin no_plugin_name_prefix javac.input = JAVASOURCES javac.output = $$CLASS_DIR javac.CONFIG += combine javac.commands = javac -source 6 -target 6 -Xlint:unchecked -bootclasspath $$ANDROID_JAR_FILE -cp $$shell_quote($$system_path($$join(JAVACLASSPATH, $$DIRLIST_SEPARATOR))) -d $$shell_quote($$CLASS_DIR) ${QMAKE_FILE_IN} # Force rebuild every time, because we don't know the paths of the destination files # as they depend on the code. javac.depends = FORCE QMAKE_EXTRA_COMPILERS += javac mkpath($$absolute_path($$CLASS_DIR, $$OUT_PWD)) | error("Aborting.") # Disable all linker flags since we are overriding the regular linker QMAKE_LFLAGS = QMAKE_CFLAGS = QMAKE_LFLAGS_RPATH = QMAKE_LFLAGS_PLUGIN = QMAKE_LIBS = QMAKE_LIBS_OPENGL_ES2 = QMAKE_LIBDIR = QMAKE_EXTENSION_SHLIB = jar # Override linker with dex (for distributable Android archives) or jar (for other java builds) android:!bundled_jar_file { contains(QMAKE_HOST.os, Windows) { # The location where dx.bat expects itself to be found is used as the landmark instead # of the base sdk folder. # Doing it this way makes this logic more similar to the other platforms and # also means that our dx.bat is more like Google's dx.bat DEX_BAT = $$ANDROID_SDK_ROOT/platform-tools/dx.bat !exists($$DEX_BAT): DEX_BAT = $$ANDROID_SDK_ROOT/build-tools/$$ANDROID_SDK_BUILD_TOOLS_REVISION/dx.bat DEX_CMD = $$PWD/data/android/dx $$DEX_BAT } else { DEX_CMD = $$ANDROID_SDK_ROOT/platform-tools/dx !exists($$DEX_CMD): DEX_CMD = $$ANDROID_SDK_ROOT/build-tools/$$ANDROID_SDK_BUILD_TOOLS_REVISION/dx !exists($$DEX_CMD): error("The path $$DEX_CMD does not exist. Please set the environment variable ANDROID_BUILD_TOOLS_REVISION to the revision of the build tools installed in your Android SDK.") } QMAKE_LINK_SHLIB_CMD = $$DEX_CMD --dex --output $(TARGET) $$CLASS_DIR } else { QMAKE_LINK_SHLIB_CMD = jar cf $(TARGET) -C $$CLASS_DIR . } # Force link step to always happen, since we are always updating the # .class files PRE_TARGETDEPS += FORCE