From 62ae7adab2bebde04864c12543caefbffab24963 Mon Sep 17 00:00:00 2001 From: Maksim Date: Wed, 15 Apr 2020 16:27:40 +0200 Subject: Android: add Android Studio support, completely redone java part (#9066) --- build/android/native/build.gradle | 59 ++++++ build/android/native/jni/Android.mk | 218 ++++++++++++++++++++++ build/android/native/jni/Application.mk | 32 ++++ build/android/native/src/main/AndroidManifest.xml | 1 + 4 files changed, 310 insertions(+) create mode 100644 build/android/native/build.gradle create mode 100644 build/android/native/jni/Android.mk create mode 100644 build/android/native/jni/Application.mk create mode 100644 build/android/native/src/main/AndroidManifest.xml (limited to 'build/android/native') diff --git a/build/android/native/build.gradle b/build/android/native/build.gradle new file mode 100644 index 000000000..f06e4e3f0 --- /dev/null +++ b/build/android/native/build.gradle @@ -0,0 +1,59 @@ +apply plugin: 'com.android.library' +import org.ajoberstar.grgit.Grgit + +android { + compileSdkVersion 29 + buildToolsVersion '29.0.3' + ndkVersion '21.0.6113669' + defaultConfig { + minSdkVersion 16 + targetSdkVersion 29 + externalNativeBuild { + ndkBuild { + arguments '-j8', + "versionMajor=${versionMajor}", + "versionMinor=${versionMinor}", + "versionPatch=${versionPatch}", + "versionExtra=${versionExtra}" + } + } + } + + externalNativeBuild { + ndkBuild { + path file('jni/Android.mk') + } + } + + // supported architectures + splits { + abi { + enable true + reset() + include 'armeabi-v7a', 'arm64-v8a'//, 'x86' + } + } + + buildTypes { + release { + externalNativeBuild { + ndkBuild { + arguments 'NDEBUG=1' + } + } + } + } +} + +task cloneGitRepo() { + def destination = file('deps') + if(!destination.exists()) { + def grgit = Grgit.clone( + dir: destination, + uri: 'https://github.com/minetest/minetest_android_deps_binaries' + ) + grgit.close() + } +} + +preBuild.dependsOn cloneGitRepo diff --git a/build/android/native/jni/Android.mk b/build/android/native/jni/Android.mk new file mode 100644 index 000000000..a5cb099e6 --- /dev/null +++ b/build/android/native/jni/Android.mk @@ -0,0 +1,218 @@ +LOCAL_PATH := $(call my-dir)/.. + +#LOCAL_ADDRESS_SANITIZER:=true + +include $(CLEAR_VARS) +LOCAL_MODULE := Curl +LOCAL_SRC_FILES := deps/Android/Curl/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libcurl.a +include $(PREBUILT_STATIC_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := Freetype +LOCAL_SRC_FILES := deps/Android/Freetype/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libfreetype.a +include $(PREBUILT_STATIC_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := Irrlicht +LOCAL_SRC_FILES := deps/Android/Irrlicht/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libIrrlicht.a +include $(PREBUILT_STATIC_LIBRARY) + +#include $(CLEAR_VARS) +#LOCAL_MODULE := LevelDB +#LOCAL_SRC_FILES := deps/Android/LevelDB/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libleveldb.a +#include $(PREBUILT_STATIC_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := LuaJIT +LOCAL_SRC_FILES := deps/Android/LuaJIT/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libluajit.a +include $(PREBUILT_STATIC_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := mbedTLS +LOCAL_SRC_FILES := deps/Android/mbedTLS/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libmbedtls.a +include $(PREBUILT_STATIC_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := mbedx509 +LOCAL_SRC_FILES := deps/Android/mbedTLS/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libmbedx509.a +include $(PREBUILT_STATIC_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := mbedcrypto +LOCAL_SRC_FILES := deps/Android/mbedTLS/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libmbedcrypto.a +include $(PREBUILT_STATIC_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := OpenAL +LOCAL_SRC_FILES := deps/Android/OpenAL-Soft/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libopenal.a +include $(PREBUILT_STATIC_LIBRARY) + +# You can use `OpenSSL and Crypto` instead `mbedTLS mbedx509 mbedcrypto`, +#but it increase APK size on ~0.7MB +#include $(CLEAR_VARS) +#LOCAL_MODULE := OpenSSL +#LOCAL_SRC_FILES := deps/Android/OpenSSL/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libssl.a +#include $(PREBUILT_STATIC_LIBRARY) + +#include $(CLEAR_VARS) +#LOCAL_MODULE := Crypto +#LOCAL_SRC_FILES := deps/Android/OpenSSL/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libcrypto.a +#include $(PREBUILT_STATIC_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := Vorbis +LOCAL_SRC_FILES := deps/Android/Vorbis/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libvorbis.a +include $(PREBUILT_STATIC_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := Minetest + +LOCAL_CFLAGS += \ + -DJSONCPP_NO_LOCALE_SUPPORT \ + -DHAVE_TOUCHSCREENGUI \ + -DENABLE_GLES=1 \ + -DUSE_CURL=1 \ + -DUSE_SOUND=1 \ + -DUSE_FREETYPE=1 \ + -DUSE_LEVELDB=0 \ + -DUSE_LUAJIT=1 \ + -DVERSION_MAJOR=${versionMajor} \ + -DVERSION_MINOR=${versionMinor} \ + -DVERSION_PATCH=${versionPatch} \ + -DVERSION_EXTRA=${versionExtra} \ + $(GPROF_DEF) + +ifdef NDEBUG + LOCAL_CFLAGS += -DNDEBUG=1 +endif + +ifdef GPROF + GPROF_DEF := -DGPROF + PROFILER_LIBS := android-ndk-profiler + LOCAL_CFLAGS += -pg +endif + +LOCAL_C_INCLUDES := \ + ../../../src \ + ../../../src/script \ + ../../../lib/gmp \ + ../../../lib/jsoncpp \ + deps/Android/Curl/include \ + deps/Android/Freetype/include \ + deps/Android/Irrlicht/include \ + deps/Android/LevelDB/include \ + deps/Android/libiconv/include \ + deps/Android/libiconv/libcharset/include \ + deps/Android/LuaJIT/src \ + deps/Android/OpenAL-Soft/include \ + deps/Android/sqlite \ + deps/Android/Vorbis/include + +LOCAL_SRC_FILES := \ + $(wildcard ../../../src/client/*.cpp) \ + $(wildcard ../../../src/client/*/*.cpp) \ + $(wildcard ../../../src/content/*.cpp) \ + ../../../src/database/database.cpp \ + ../../../src/database/database-dummy.cpp \ + ../../../src/database/database-files.cpp \ + ../../../src/database/database-sqlite3.cpp \ + $(wildcard ../../../src/gui/*.cpp) \ + $(wildcard ../../../src/irrlicht_changes/*.cpp) \ + $(wildcard ../../../src/mapgen/*.cpp) \ + $(wildcard ../../../src/network/*.cpp) \ + $(wildcard ../../../src/script/*.cpp) \ + $(wildcard ../../../src/script/*/*.cpp) \ + $(wildcard ../../../src/server/*.cpp) \ + $(wildcard ../../../src/threading/*.cpp) \ + $(wildcard ../../../src/util/*.c) \ + $(wildcard ../../../src/util/*.cpp) \ + ../../../src/ban.cpp \ + ../../../src/chat.cpp \ + ../../../src/clientiface.cpp \ + ../../../src/collision.cpp \ + ../../../src/content_mapnode.cpp \ + ../../../src/content_nodemeta.cpp \ + ../../../src/convert_json.cpp \ + ../../../src/craftdef.cpp \ + ../../../src/debug.cpp \ + ../../../src/defaultsettings.cpp \ + ../../../src/emerge.cpp \ + ../../../src/environment.cpp \ + ../../../src/face_position_cache.cpp \ + ../../../src/filesys.cpp \ + ../../../src/gettext.cpp \ + ../../../src/httpfetch.cpp \ + ../../../src/hud.cpp \ + ../../../src/inventory.cpp \ + ../../../src/inventorymanager.cpp \ + ../../../src/itemdef.cpp \ + ../../../src/itemstackmetadata.cpp \ + ../../../src/light.cpp \ + ../../../src/log.cpp \ + ../../../src/main.cpp \ + ../../../src/map.cpp \ + ../../../src/map_settings_manager.cpp \ + ../../../src/mapblock.cpp \ + ../../../src/mapnode.cpp \ + ../../../src/mapsector.cpp \ + ../../../src/metadata.cpp \ + ../../../src/modchannels.cpp \ + ../../../src/nameidmapping.cpp \ + ../../../src/nodedef.cpp \ + ../../../src/nodemetadata.cpp \ + ../../../src/nodetimer.cpp \ + ../../../src/noise.cpp \ + ../../../src/objdef.cpp \ + ../../../src/object_properties.cpp \ + ../../../src/pathfinder.cpp \ + ../../../src/player.cpp \ + ../../../src/porting.cpp \ + ../../../src/porting_android.cpp \ + ../../../src/profiler.cpp \ + ../../../src/raycast.cpp \ + ../../../src/reflowscan.cpp \ + ../../../src/remoteplayer.cpp \ + ../../../src/rollback.cpp \ + ../../../src/rollback_interface.cpp \ + ../../../src/serialization.cpp \ + ../../../src/server.cpp \ + ../../../src/serverenvironment.cpp \ + ../../../src/serverlist.cpp \ + ../../../src/settings.cpp \ + ../../../src/staticobject.cpp \ + ../../../src/texture_override.cpp \ + ../../../src/tileanimation.cpp \ + ../../../src/tool.cpp \ + ../../../src/translation.cpp \ + ../../../src/version.cpp \ + ../../../src/voxel.cpp \ + ../../../src/voxelalgorithms.cpp + +# LevelDB backend is disabled +# ../../../src/database/database-leveldb.cpp + +# GMP +LOCAL_SRC_FILES += ../../../lib/gmp/mini-gmp.c + +# JSONCPP +LOCAL_SRC_FILES += ../../../lib/jsoncpp/jsoncpp.cpp + +# iconv +LOCAL_SRC_FILES += \ + deps/Android/libiconv/lib/iconv.c \ + deps/Android/libiconv/libcharset/lib/localcharset.c + +# SQLite3 +LOCAL_SRC_FILES += deps/Android/sqlite/sqlite3.c + +LOCAL_STATIC_LIBRARIES += Curl Freetype Irrlicht OpenAL mbedTLS mbedx509 mbedcrypto Vorbis LuaJIT android_native_app_glue $(PROFILER_LIBS) #LevelDB +#OpenSSL Crypto + +LOCAL_LDLIBS := -lEGL -lGLESv1_CM -lGLESv2 -landroid -lOpenSLES + +include $(BUILD_SHARED_LIBRARY) + +ifdef GPROF +$(call import-module,android-ndk-profiler) +endif +$(call import-module,android/native_app_glue) diff --git a/build/android/native/jni/Application.mk b/build/android/native/jni/Application.mk new file mode 100644 index 000000000..82f0148f0 --- /dev/null +++ b/build/android/native/jni/Application.mk @@ -0,0 +1,32 @@ +APP_PLATFORM := ${APP_PLATFORM} +APP_ABI := ${TARGET_ABI} +APP_STL := c++_shared +NDK_TOOLCHAIN_VERSION := clang +APP_SHORT_COMMANDS := true +APP_MODULES := Minetest + +APP_CPPFLAGS := -Ofast -fvisibility=hidden -fexceptions -Wno-deprecated-declarations -Wno-extra-tokens + +ifeq ($(APP_ABI),armeabi-v7a) +APP_CPPFLAGS += -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -mthumb +endif + +#ifeq ($(APP_ABI),x86) +#APP_CPPFLAGS += -march=i686 -mtune=intel -mssse3 -mfpmath=sse -m32 -funroll-loops +#endif + +ifndef NDEBUG +APP_CPPFLAGS := -g -D_DEBUG -O0 -fno-omit-frame-pointer -fexceptions +endif + +APP_CFLAGS := $(APP_CPPFLAGS) -Wno-parentheses-equality #-Werror=shorten-64-to-32 +APP_CXXFLAGS := $(APP_CPPFLAGS) -frtti -std=gnu++17 +APP_LDFLAGS := -Wl,--no-warn-mismatch,--gc-sections,--icf=safe + +ifeq ($(APP_ABI),arm64-v8a) +APP_LDFLAGS := -Wl,--no-warn-mismatch,--gc-sections +endif + +ifndef NDEBUG +APP_LDFLAGS := +endif diff --git a/build/android/native/src/main/AndroidManifest.xml b/build/android/native/src/main/AndroidManifest.xml new file mode 100644 index 000000000..19451c7fd --- /dev/null +++ b/build/android/native/src/main/AndroidManifest.xml @@ -0,0 +1 @@ + -- cgit v1.2.3