diff options
Diffstat (limited to 'android')
-rw-r--r-- | android/app/build.gradle | 21 | ||||
-rw-r--r-- | android/app/src/main/AndroidManifest.xml | 8 | ||||
-rw-r--r-- | android/app/src/main/java/net/minetest/minetest/GameActivity.java | 33 | ||||
-rw-r--r-- | android/app/src/main/java/net/minetest/minetest/MainActivity.java | 3 | ||||
-rw-r--r-- | android/app/src/main/java/net/minetest/minetest/UnzipService.java | 5 | ||||
-rw-r--r-- | android/build.gradle | 9 | ||||
-rw-r--r-- | android/gradle/wrapper/gradle-wrapper.properties | 3 | ||||
-rwxr-xr-x | android/gradlew | 2 | ||||
-rw-r--r-- | android/icons/aux_btn.svg | 411 | ||||
-rw-r--r-- | android/native/build.gradle | 51 | ||||
-rw-r--r-- | android/native/jni/Android.mk | 123 | ||||
-rw-r--r-- | android/native/jni/Application.mk | 16 |
12 files changed, 145 insertions, 540 deletions
diff --git a/android/app/build.gradle b/android/app/build.gradle index b7d93ef0f..e8ba95722 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -1,12 +1,12 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 29 + compileSdkVersion 30 buildToolsVersion '30.0.3' - ndkVersion '22.0.7026061' + ndkVersion "$ndk_version" defaultConfig { applicationId 'net.minetest.minetest' minSdkVersion 16 - targetSdkVersion 29 + targetSdkVersion 30 versionName "${versionMajor}.${versionMinor}.${versionPatch}" versionCode project.versionCode } @@ -68,7 +68,7 @@ task prepareAssets() { from "${projRoot}/client/shaders" into "${assetsFolder}/client/shaders" } copy { - from "../native/deps/Android/Irrlicht/shaders" into "${assetsFolder}/client/shaders/Irrlicht" + from "../native/deps/armeabi-v7a/Irrlicht/Shaders" into "${assetsFolder}/client/shaders/Irrlicht" } copy { from "${projRoot}/fonts" include "*.ttf" into "${assetsFolder}/fonts" @@ -76,10 +76,13 @@ task prepareAssets() { copy { from "${projRoot}/games/${gameToCopy}" into "${assetsFolder}/games/${gameToCopy}" } - /*copy { - // ToDo: fix broken locales - from "${projRoot}/po" into "${assetsFolder}/po" - }*/ + fileTree("${projRoot}/po").include("**/*.po").forEach { poFile -> + def moPath = "${assetsFolder}/locale/${poFile.parentFile.name}/LC_MESSAGES/" + file(moPath).mkdirs() + exec { + commandLine 'msgfmt', '-o', "${moPath}/minetest.mo", poFile + } + } copy { from "${projRoot}/textures" into "${assetsFolder}/textures" } @@ -109,5 +112,5 @@ android.applicationVariants.all { variant -> dependencies { implementation project(':native') - implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'androidx.appcompat:appcompat:1.3.1' } diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 314a38b5c..6ea677cb9 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -19,8 +19,6 @@ android:label="@string/label" android:requestLegacyExternalStorage="true" android:resizeableActivity="false" - android:hasFragileUserData="true" - android:isGame="true" tools:ignore="UnusedAttribute"> <meta-data @@ -32,7 +30,8 @@ android:configChanges="orientation|keyboardHidden|navigation|screenSize" android:maxAspectRatio="3.0" android:screenOrientation="sensorLandscape" - android:theme="@style/AppTheme"> + android:theme="@style/AppTheme" + android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> @@ -46,7 +45,8 @@ android:launchMode="singleTask" android:maxAspectRatio="3.0" android:screenOrientation="sensorLandscape" - android:theme="@style/AppTheme"> + android:theme="@style/AppTheme" + android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> </intent-filter> diff --git a/android/app/src/main/java/net/minetest/minetest/GameActivity.java b/android/app/src/main/java/net/minetest/minetest/GameActivity.java index dc2e564be..46fc9b1de 100644 --- a/android/app/src/main/java/net/minetest/minetest/GameActivity.java +++ b/android/app/src/main/java/net/minetest/minetest/GameActivity.java @@ -30,7 +30,9 @@ import android.view.KeyEvent; import android.view.View; import android.view.WindowManager; import android.view.inputmethod.InputMethodManager; +import android.widget.Button; import android.widget.EditText; +import android.widget.LinearLayout; import androidx.appcompat.app.AlertDialog; @@ -85,9 +87,19 @@ public class GameActivity extends NativeActivity { private void showDialogUI(String hint, String current, int editType) { final AlertDialog.Builder builder = new AlertDialog.Builder(this); - EditText editText = new CustomEditText(this); - builder.setView(editText); + LinearLayout container = new LinearLayout(this); + container.setOrientation(LinearLayout.VERTICAL); + builder.setView(container); AlertDialog alertDialog = builder.create(); + EditText editText; + // For multi-line, do not close the dialog after pressing back button + if (editType == 1) { + editText = new EditText(this); + } else { + editText = new CustomEditText(this); + } + container.addView(editText); + editText.setMaxLines(8); editText.requestFocus(); editText.setHint(hint); editText.setText(current); @@ -103,8 +115,9 @@ public class GameActivity extends NativeActivity { else editText.setInputType(InputType.TYPE_CLASS_TEXT); editText.setSelection(editText.getText().length()); - editText.setOnKeyListener((view, KeyCode, event) -> { - if (KeyCode == KeyEvent.KEYCODE_ENTER) { + editText.setOnKeyListener((view, keyCode, event) -> { + // For multi-line, do not submit the text after pressing Enter key + if (keyCode == KeyEvent.KEYCODE_ENTER && editType != 1) { imm.hideSoftInputFromWindow(editText.getWindowToken(), 0); messageReturnCode = 0; messageReturnValue = editText.getText().toString(); @@ -113,6 +126,18 @@ public class GameActivity extends NativeActivity { } return false; }); + // For multi-line, add Done button since Enter key does not submit text + if (editType == 1) { + Button doneButton = new Button(this); + container.addView(doneButton); + doneButton.setText(R.string.ime_dialog_done); + doneButton.setOnClickListener((view -> { + imm.hideSoftInputFromWindow(editText.getWindowToken(), 0); + messageReturnCode = 0; + messageReturnValue = editText.getText().toString(); + alertDialog.dismiss(); + })); + } alertDialog.show(); alertDialog.setOnCancelListener(dialog -> { getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); diff --git a/android/app/src/main/java/net/minetest/minetest/MainActivity.java b/android/app/src/main/java/net/minetest/minetest/MainActivity.java index 56615fca7..b6567b4b7 100644 --- a/android/app/src/main/java/net/minetest/minetest/MainActivity.java +++ b/android/app/src/main/java/net/minetest/minetest/MainActivity.java @@ -101,7 +101,8 @@ public class MainActivity extends AppCompatActivity { mTextView = findViewById(R.id.textView); sharedPreferences = getSharedPreferences(SETTINGS, Context.MODE_PRIVATE); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && + Build.VERSION.SDK_INT < Build.VERSION_CODES.R) checkPermission(); else checkAppVersion(); diff --git a/android/app/src/main/java/net/minetest/minetest/UnzipService.java b/android/app/src/main/java/net/minetest/minetest/UnzipService.java index b513a7fe0..a61a49139 100644 --- a/android/app/src/main/java/net/minetest/minetest/UnzipService.java +++ b/android/app/src/main/java/net/minetest/minetest/UnzipService.java @@ -32,6 +32,7 @@ import android.os.Environment; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.annotation.RequiresApi; import androidx.annotation.StringRes; import java.io.File; @@ -200,6 +201,10 @@ public class UnzipService extends IntentService { * Migrates user data from deprecated external storage to app scoped storage */ private void migrate(Notification.Builder notificationBuilder, File newLocation) throws IOException { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + return; + } + File oldLocation = new File(Environment.getExternalStorageDirectory(), "Minetest"); if (!oldLocation.isDirectory()) return; diff --git a/android/build.gradle b/android/build.gradle index b3118af21..71e995e48 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -1,21 +1,22 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. project.ext.set("versionMajor", 5) // Version Major -project.ext.set("versionMinor", 4) // Version Minor -project.ext.set("versionPatch", 2) // Version Patch +project.ext.set("versionMinor", 5) // Version Minor +project.ext.set("versionPatch", 0) // Version Patch project.ext.set("versionExtra", "") // Version Extra -project.ext.set("versionCode", 36) // Android Version Code +project.ext.set("versionCode", 38) // Android Version Code // NOTE: +2 after each release! // +1 for ARM and +1 for ARM64 APK's, because // each APK must have a larger `versionCode` than the previous buildscript { + ext.ndk_version = '23.0.7599858' repositories { google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:4.1.1' + classpath 'com.android.tools.build:gradle:7.0.3' classpath 'de.undercouch:gradle-download-task:4.1.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index 7fd9307d7..8ad73a75c 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Fri Jan 08 17:52:00 UTC 2020 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.8-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip diff --git a/android/gradlew b/android/gradlew index 83f2acfdc..25e0c1148 100755 --- a/android/gradlew +++ b/android/gradlew @@ -98,7 +98,7 @@ location of your Java installation." fi else JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + command -v java >/dev/null || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." diff --git a/android/icons/aux_btn.svg b/android/icons/aux_btn.svg deleted file mode 100644 index 6bbefff67..000000000 --- a/android/icons/aux_btn.svg +++ /dev/null @@ -1,411 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!-- Created with Inkscape (http://www.inkscape.org/) --> - -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="512" - height="512" - viewBox="0 0 135.46666 135.46667" - version="1.1" - id="svg8" - inkscape:version="0.92.1 r15371" - sodipodi:docname="aux_btn.svg" - inkscape:export-filename="/home/stu/Desktop/icons/png/aux_btn.png" - inkscape:export-xdpi="24.000002" - inkscape:export-ydpi="24.000002"> - <defs - id="defs2"> - <filter - style="color-interpolation-filters:sRGB;" - inkscape:label="Colorize" - id="filter4628"> - <feComposite - in2="SourceGraphic" - operator="arithmetic" - k1="0" - k2="1" - result="composite1" - id="feComposite4614" /> - <feColorMatrix - in="composite1" - values="1" - type="saturate" - result="colormatrix1" - id="feColorMatrix4616" /> - <feFlood - flood-opacity="1" - flood-color="rgb(158,0,0)" - result="flood1" - id="feFlood4618" /> - <feBlend - in="flood1" - in2="colormatrix1" - mode="multiply" - result="blend1" - id="feBlend4620" /> - <feBlend - in2="blend1" - mode="screen" - result="blend2" - id="feBlend4622" /> - <feColorMatrix - in="blend2" - values="1" - type="saturate" - result="colormatrix2" - id="feColorMatrix4624" /> - <feComposite - in="colormatrix2" - in2="SourceGraphic" - operator="in" - k2="1" - result="composite2" - id="feComposite4626" /> - </filter> - <filter - style="color-interpolation-filters:sRGB;" - inkscape:label="Sharpen More" - id="filter5109" - inkscape:menu="Image Effects" - inkscape:menu-tooltip="Sharpen edges and boundaries within the object, force=0.3"> - <feComposite - in2="SourceGraphic" - operator="arithmetic" - k1="0" - k2="1" - result="composite1" - id="feComposite5095" /> - <feColorMatrix - in="composite1" - values="1" - type="saturate" - result="colormatrix1" - id="feColorMatrix5097" /> - <feFlood - flood-opacity="1" - flood-color="rgb(158,67,0)" - result="flood1" - id="feFlood5099" /> - <feBlend - in="flood1" - in2="colormatrix1" - mode="multiply" - result="blend1" - id="feBlend5101" /> - <feBlend - in2="blend1" - mode="screen" - result="blend2" - id="feBlend5103" /> - <feColorMatrix - in="blend2" - values="1" - type="saturate" - result="colormatrix2" - id="feColorMatrix5105" /> - <feComposite - in="colormatrix2" - in2="SourceGraphic" - operator="in" - k2="1" - result="fbSourceGraphic" - id="feComposite5107" /> - <feColorMatrix - result="fbSourceGraphicAlpha" - in="fbSourceGraphic" - values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0" - id="feColorMatrix5111" /> - <feComposite - in2="fbSourceGraphic" - id="feComposite5113" - operator="arithmetic" - k1="0" - k2="1" - result="composite1" - in="fbSourceGraphic" /> - <feColorMatrix - id="feColorMatrix5115" - in="composite1" - values="1" - type="saturate" - result="colormatrix1" /> - <feFlood - id="feFlood5117" - flood-opacity="1" - flood-color="rgb(158,0,0)" - result="flood1" /> - <feBlend - in2="colormatrix1" - id="feBlend5119" - in="flood1" - mode="multiply" - result="blend1" /> - <feBlend - in2="blend1" - id="feBlend5121" - mode="screen" - result="blend2" /> - <feColorMatrix - id="feColorMatrix5123" - in="blend2" - values="1" - type="saturate" - result="colormatrix2" /> - <feComposite - in2="fbSourceGraphic" - id="feComposite5125" - in="colormatrix2" - operator="in" - k2="1" - result="fbSourceGraphic" /> - <feColorMatrix - result="fbSourceGraphicAlpha" - in="fbSourceGraphic" - values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0" - id="feColorMatrix7007" /> - <feConvolveMatrix - id="feConvolveMatrix7009" - order="3 3" - kernelMatrix="0 -0.15 0 -0.15 1.6 -0.15 0 -0.15 0" - divisor="1" - in="fbSourceGraphic" - targetX="1" - targetY="1" - result="fbSourceGraphic" /> - <feColorMatrix - result="fbSourceGraphicAlpha" - in="fbSourceGraphic" - values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0" - id="feColorMatrix7011" /> - <feConvolveMatrix - id="feConvolveMatrix7013" - targetY="1" - targetX="1" - in="fbSourceGraphic" - divisor="1" - kernelMatrix="0 -0.3 0 -0.3 2.2 -0.3 0 -0.3 0" - order="3 3" - result="result1" /> - <feBlend - in2="fbSourceGraphic" - id="feBlend7015" - mode="normal" - result="result2" /> - </filter> - <marker - style="overflow:visible" - refY="0.0" - refX="0.0" - orient="auto" - id="DistanceX"> - <path - id="path7410" - style="stroke:#000000; stroke-width:0.5" - d="M 3,-3 L -3,3 M 0,-5 L 0,5" /> - </marker> - <pattern - y="0" - x="0" - width="8" - patternUnits="userSpaceOnUse" - id="Hatch" - height="8"> - <path - id="path7413" - stroke-width="0.25" - stroke="#000000" - linecap="square" - d="M8 4 l-4,4" /> - <path - id="path7415" - stroke-width="0.25" - stroke="#000000" - linecap="square" - d="M6 2 l-4,4" /> - <path - id="path7417" - stroke-width="0.25" - stroke="#000000" - linecap="square" - d="M4 0 l-4,4" /> - </pattern> - <symbol - id="*Model_Space" /> - <symbol - id="*Paper_Space" /> - <symbol - id="*Paper_Space0" /> - <filter - style="color-interpolation-filters:sRGB;" - inkscape:label="Colorize" - id="filter4883"> - <feComposite - in2="SourceGraphic" - operator="arithmetic" - k1="0" - k2="1" - result="composite1" - id="feComposite4869" /> - <feColorMatrix - in="composite1" - values="1" - type="saturate" - result="colormatrix1" - id="feColorMatrix4871" /> - <feFlood - flood-opacity="1" - flood-color="rgb(158,21,0)" - result="flood1" - id="feFlood4873" /> - <feBlend - in="flood1" - in2="colormatrix1" - mode="multiply" - result="blend1" - id="feBlend4875" /> - <feBlend - in2="blend1" - mode="screen" - result="blend2" - id="feBlend4877" /> - <feColorMatrix - in="blend2" - values="1" - type="saturate" - result="colormatrix2" - id="feColorMatrix4879" /> - <feComposite - in="colormatrix2" - in2="SourceGraphic" - operator="in" - k2="1" - result="composite2" - id="feComposite4881" /> - </filter> - </defs> - <sodipodi:namedview - id="base" - pagecolor="#404040" - bordercolor="#666666" - borderopacity="1.0" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:zoom="0.98994949" - inkscape:cx="-341.34157" - inkscape:cy="210.02973" - inkscape:document-units="mm" - inkscape:current-layer="layer2" - showgrid="true" - units="px" - inkscape:window-width="1920" - inkscape:window-height="1023" - inkscape:window-x="0" - inkscape:window-y="34" - inkscape:window-maximized="1" - inkscape:pagecheckerboard="false" - inkscape:snap-grids="false" - inkscape:snap-page="true" - showguides="true" - inkscape:snap-bbox="true" - inkscape:snap-to-guides="true" - inkscape:snap-object-midpoints="false" - inkscape:snap-others="true" - inkscape:snap-bbox-midpoints="true"> - <inkscape:grid - type="xygrid" - id="grid16" - spacingx="0.26458333" - spacingy="0.26458333" - empspacing="4" - color="#40ff40" - opacity="0.1254902" - empcolor="#40ff40" - empopacity="0.25098039" /> - </sodipodi:namedview> - <metadata - id="metadata5"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - <cc:license - rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" /> - </cc:Work> - <cc:License - rdf:about="http://creativecommons.org/licenses/by-sa/4.0/"> - <cc:permits - rdf:resource="http://creativecommons.org/ns#Reproduction" /> - <cc:permits - rdf:resource="http://creativecommons.org/ns#Distribution" /> - <cc:requires - rdf:resource="http://creativecommons.org/ns#Notice" /> - <cc:requires - rdf:resource="http://creativecommons.org/ns#Attribution" /> - <cc:permits - rdf:resource="http://creativecommons.org/ns#DerivativeWorks" /> - <cc:requires - rdf:resource="http://creativecommons.org/ns#ShareAlike" /> - </cc:License> - </rdf:RDF> - </metadata> - <g - inkscape:groupmode="layer" - id="layer2" - inkscape:label="Layer 2" - style="display:inline"> - <path - style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="" - id="path7055" - inkscape:connector-curvature="0" /> - <path - style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="" - id="path7035" - inkscape:connector-curvature="0" /> - <path - style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="" - id="path7005" - inkscape:connector-curvature="0" /> - <path - style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="" - id="path5127" - inkscape:connector-curvature="0" /> - <text - xml:space="preserve" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:48.47851181px;line-height:1.25;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#d9d9d9;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - x="67.78315" - y="85.59491" - id="text4716" - transform="scale(1.0078883,0.99217343)"><tspan - sodipodi:role="line" - id="tspan4714" - x="67.78315" - y="85.59491" - style="fill:#d9d9d9;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">AUX</tspan></text> - <flowRoot - xml:space="preserve" - id="flowRoot4718" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:1.25;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:none;fill-opacity:1;stroke:#ffffff;stroke-opacity:1" - transform="scale(0.26458333)"><flowRegion - id="flowRegion4720" - style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-opacity:1"><rect - id="rect4722" - width="157.5838" - height="136.37059" - x="264.65997" - y="124.10143" - style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-opacity:1" /></flowRegion><flowPara - id="flowPara4724" /></flowRoot> </g> -</svg> diff --git a/android/native/build.gradle b/android/native/build.gradle index d58a2dcc5..2ddc77135 100644 --- a/android/native/build.gradle +++ b/android/native/build.gradle @@ -2,12 +2,12 @@ apply plugin: 'com.android.library' apply plugin: 'de.undercouch.download' android { - compileSdkVersion 29 + compileSdkVersion 30 buildToolsVersion '30.0.3' - ndkVersion '22.0.7026061' + ndkVersion "$ndk_version" defaultConfig { minSdkVersion 16 - targetSdkVersion 29 + targetSdkVersion 30 externalNativeBuild { ndkBuild { arguments '-j' + Runtime.getRuntime().availableProcessors(), @@ -50,54 +50,19 @@ android { } // get precompiled deps -def folder = 'minetest_android_deps_binaries' -def deps_ref = "342eb18b7512462585a33bc9eef0b68298087151" - task downloadDeps(type: Download) { - src 'https://github.com/minetest/' + folder + '/archive/' + deps_ref + '.zip' + src 'https://github.com/minetest/minetest_android_deps/releases/download/latest/deps.zip' dest new File(buildDir, 'deps.zip') overwrite false } task getDeps(dependsOn: downloadDeps, type: Copy) { - def deps = file('deps') - def f = file("$buildDir/" + folder + "-" + deps_ref) - - if (!deps.exists() && !f.exists()) { + def deps = new File(buildDir.parent, 'deps') + if (!deps.exists()) { + deps.mkdir() from zipTree(downloadDeps.dest) - into buildDir - } - - doLast { - if (!deps.exists()) { - file(f).renameTo(file(deps)) - } - } -} - -// get sqlite -def sqlite_ver = '3340000' -task downloadSqlite(dependsOn: getDeps, type: Download) { - src 'https://www.sqlite.org/2020/sqlite-amalgamation-' + sqlite_ver + '.zip' - dest new File(buildDir, 'sqlite.zip') - overwrite false -} - -task getSqlite(dependsOn: downloadSqlite, type: Copy) { - def sqlite = file('deps/Android/sqlite') - def f = file("$buildDir/sqlite-amalgamation-" + sqlite_ver) - - if (!sqlite.exists() && !f.exists()) { - from zipTree(downloadSqlite.dest) - into buildDir - } - - doLast { - if (!sqlite.exists()) { - file(f).renameTo(file(sqlite)) - } + into deps } } preBuild.dependsOn getDeps -preBuild.dependsOn getSqlite diff --git a/android/native/jni/Android.mk b/android/native/jni/Android.mk index 73df04945..f8ca74d3c 100644 --- a/android/native/jni/Android.mk +++ b/android/native/jni/Android.mk @@ -4,64 +4,82 @@ LOCAL_PATH := $(call my-dir)/.. include $(CLEAR_VARS) LOCAL_MODULE := Curl -LOCAL_SRC_FILES := deps/Android/Curl/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libcurl.a +LOCAL_SRC_FILES := deps/$(APP_ABI)/Curl/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 +LOCAL_MODULE := libmbedcrypto +LOCAL_SRC_FILES := deps/$(APP_ABI)/Curl/libmbedcrypto.a include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS) -LOCAL_MODULE := Irrlicht -LOCAL_SRC_FILES := deps/Android/Irrlicht/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libIrrlicht.a +LOCAL_MODULE := libmbedtls +LOCAL_SRC_FILES := deps/$(APP_ABI)/Curl/libmbedtls.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 := libmbedx509 +LOCAL_SRC_FILES := deps/$(APP_ABI)/Curl/libmbedx509.a +include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS) -LOCAL_MODULE := LuaJIT -LOCAL_SRC_FILES := deps/Android/LuaJIT/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libluajit.a +LOCAL_MODULE := Freetype +LOCAL_SRC_FILES := deps/$(APP_ABI)/Freetype/libfreetype.a +include $(PREBUILT_STATIC_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := Iconv +LOCAL_SRC_FILES := deps/$(APP_ABI)/Iconv/libiconv.a include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS) -LOCAL_MODULE := mbedTLS -LOCAL_SRC_FILES := deps/Android/mbedTLS/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libmbedtls.a +LOCAL_MODULE := libcharset +LOCAL_SRC_FILES := deps/$(APP_ABI)/Iconv/libcharset.a include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS) -LOCAL_MODULE := mbedx509 -LOCAL_SRC_FILES := deps/Android/mbedTLS/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libmbedx509.a +LOCAL_MODULE := Irrlicht +LOCAL_SRC_FILES := deps/$(APP_ABI)/Irrlicht/libIrrlichtMt.a include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS) -LOCAL_MODULE := mbedcrypto -LOCAL_SRC_FILES := deps/Android/mbedTLS/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libmbedcrypto.a +LOCAL_MODULE := LuaJIT +LOCAL_SRC_FILES := deps/$(APP_ABI)/LuaJIT/libluajit.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 +LOCAL_SRC_FILES := deps/$(APP_ABI)/OpenAL-Soft/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 := Gettext +LOCAL_SRC_FILES := deps/$(APP_ABI)/Gettext/libintl.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 := SQLite3 +LOCAL_SRC_FILES := deps/$(APP_ABI)/SQLite/libsqlite3.a +include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := Vorbis -LOCAL_SRC_FILES := deps/Android/Vorbis/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libvorbis.a +LOCAL_SRC_FILES := deps/$(APP_ABI)/Vorbis/libvorbis.a +include $(PREBUILT_STATIC_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := libvorbisfile +LOCAL_SRC_FILES := deps/$(APP_ABI)/Vorbis/libvorbisfile.a +include $(PREBUILT_STATIC_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := libogg +LOCAL_SRC_FILES := deps/$(APP_ABI)/Vorbis/libogg.a +include $(PREBUILT_STATIC_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := Zstd +LOCAL_SRC_FILES := deps/$(APP_ABI)/Zstd/libzstd.a include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS) @@ -73,9 +91,9 @@ LOCAL_CFLAGS += \ -DENABLE_GLES=1 \ -DUSE_CURL=1 \ -DUSE_SOUND=1 \ - -DUSE_FREETYPE=1 \ -DUSE_LEVELDB=0 \ -DUSE_LUAJIT=1 \ + -DUSE_GETTEXT=1 \ -DVERSION_MAJOR=${versionMajor} \ -DVERSION_MINOR=${versionMinor} \ -DVERSION_PATCH=${versionPatch} \ @@ -97,16 +115,16 @@ LOCAL_C_INCLUDES := \ ../../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 + deps/$(APP_ABI)/Curl/include \ + deps/$(APP_ABI)/Freetype/include/freetype2 \ + deps/$(APP_ABI)/Irrlicht/include \ + deps/$(APP_ABI)/Gettext/include \ + deps/$(APP_ABI)/Iconv/include \ + deps/$(APP_ABI)/LuaJIT/include \ + deps/$(APP_ABI)/OpenAL-Soft/include \ + deps/$(APP_ABI)/SQLite/include \ + deps/$(APP_ABI)/Vorbis/include \ + deps/$(APP_ABI)/Zstd/include LOCAL_SRC_FILES := \ $(wildcard ../../src/client/*.cpp) \ @@ -189,25 +207,24 @@ LOCAL_SRC_FILES := \ ../../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_STATIC_LIBRARIES += \ + Curl libmbedcrypto libmbedtls libmbedx509 \ + Freetype \ + Iconv libcharset \ + Irrlicht \ + LuaJIT \ + OpenAL \ + Gettext \ + SQLite3 \ + Vorbis libvorbisfile libogg \ + Zstd +LOCAL_STATIC_LIBRARIES += android_native_app_glue $(PROFILER_LIBS) LOCAL_LDLIBS := -lEGL -lGLESv1_CM -lGLESv2 -landroid -lOpenSLES diff --git a/android/native/jni/Application.mk b/android/native/jni/Application.mk index 82f0148f0..e21bca61c 100644 --- a/android/native/jni/Application.mk +++ b/android/native/jni/Application.mk @@ -5,22 +5,22 @@ NDK_TOOLCHAIN_VERSION := clang APP_SHORT_COMMANDS := true APP_MODULES := Minetest -APP_CPPFLAGS := -Ofast -fvisibility=hidden -fexceptions -Wno-deprecated-declarations -Wno-extra-tokens +APP_CPPFLAGS := -O2 -fvisibility=hidden ifeq ($(APP_ABI),armeabi-v7a) -APP_CPPFLAGS += -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -mthumb +APP_CPPFLAGS += -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 +ifeq ($(APP_ABI),x86) +APP_CPPFLAGS += -mssse3 -mfpmath=sse -funroll-loops +endif ifndef NDEBUG -APP_CPPFLAGS := -g -D_DEBUG -O0 -fno-omit-frame-pointer -fexceptions +APP_CPPFLAGS := -g -Og -fno-omit-frame-pointer endif -APP_CFLAGS := $(APP_CPPFLAGS) -Wno-parentheses-equality #-Werror=shorten-64-to-32 -APP_CXXFLAGS := $(APP_CPPFLAGS) -frtti -std=gnu++17 +APP_CFLAGS := $(APP_CPPFLAGS) -Wno-inconsistent-missing-override -Wno-parentheses-equality +APP_CXXFLAGS := $(APP_CPPFLAGS) -fexceptions -frtti -std=gnu++17 APP_LDFLAGS := -Wl,--no-warn-mismatch,--gc-sections,--icf=safe ifeq ($(APP_ABI),arm64-v8a) |