Skip to content

Commit

Permalink
Amend Android dev documentation
Browse files Browse the repository at this point in the history
  • Loading branch information
sfan5 committed Mar 9, 2024
1 parent 4660310 commit 8ff0e1d
Show file tree
Hide file tree
Showing 4 changed files with 68 additions and 46 deletions.
4 changes: 4 additions & 0 deletions android/app/build.gradle
Expand Up @@ -108,6 +108,10 @@ task prepareAssets() {
preBuild.dependsOn zipAssets
prepareAssets.dependsOn ':native:getDeps'

clean {
delete new File("src/main/assets", "Minetest.zip")
}

// Map for the version code that gives each ABI a value.
import com.android.build.OutputFile

Expand Down
1 change: 1 addition & 0 deletions doc/developing/README.md
Expand Up @@ -15,6 +15,7 @@ Notable pages:
## In this folder

- [Developing minetestserver with Docker](docker.md)
- [Android tips & tricks](android.md)
- [Miscellaneous](misc.md)

## IRC
Expand Down
63 changes: 63 additions & 0 deletions doc/developing/android.md
@@ -0,0 +1,63 @@
# Android tips & tricks

## Sign the Android APK from CI

The [Github Actions Workflow](https://github.com/minetest/minetest/actions?query=workflow%3Aandroid+event%3Apush)
automatically produces an APK for each architecture.
Before installing them onto a device they however need to be signed.

This requires an installation of the Android SDK and `adb`.
```bash
.../android-sdk/build-tools/30.0.3/apksigner sign --ks ~/.android/debug.keystore \
app-arm64-v8a-release-unsigned.apk
# Enter 'android' (without quotes) when asked for a password
```

Note that the `debug.keystore` will not exist if you have never compiled an
Android app on your system (probably).

After that installing it will work:
```bash
adb install -r -d ./app-arm64-v8a-release-unsigned.apk
```

## How to get debug output from Minetest on Android

In case debug.txt isn't enough (e.g. when debugging a crash), you can get debug
output using logcat:

`adb logcat -s 'Minetest:*' '*:F'`

Note that you can do this even *after* the app has crashed,
since Android keeps an internal buffer.

A segmentation fault for example looks like this:

```
01-10 17:20:22.215 19308 20560 F libc : Fatal signal 6 (SIGABRT), code -1 (SI_QUEUE) in tid 20560 (MinetestNativeT), pid 19308 (netest.minetest)
01-10 17:20:22.287 20576 20576 F DEBUG : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
01-10 17:20:22.287 20576 20576 F DEBUG : Build fingerprint: '...'
01-10 17:20:22.287 20576 20576 F DEBUG : Revision: '4'
01-10 17:20:22.287 20576 20576 F DEBUG : ABI: 'arm64'
01-10 17:20:22.288 20576 20576 F DEBUG : Timestamp: 2024-01-10 17:20:22+0100
01-10 17:20:22.288 20576 20576 F DEBUG : pid: 19308, tid: 20560, name: MinetestNativeT >>> net.minetest.minetest <<<
01-10 17:20:22.288 20576 20576 F DEBUG : uid: 10385
01-10 17:20:22.288 20576 20576 F DEBUG : signal 6 (SIGABRT), code -1 (SI_QUEUE), fault addr --------
[ ... more information follows ... ]
```

If you want get rid of previous output you can do that with `adb logcat -c`.

## I edited builtin, shaders, ... but nothing changed. Help!

You're probably hitting two problems:
* the build system only generates assets once
* the app only re-extracts assets when the version changes

Force regenerating the assets: `./gradlew app:clean`

Erase the app's memory of which version was installed: `adb shell run-as net.minetest.minetest rm shared_prefs/MinetestSettings.xml`

If this doesn't work you can also uninstall it using `adb shell pm uninstall net.minetest.minetest`. You will obviously lose your data.

Then build and install as normal and your changes should be applied.
46 changes: 0 additions & 46 deletions doc/developing/misc.md
@@ -1,51 +1,5 @@
# Miscellaneous

## Sign the Android APK from CI

The [Github Actions Workflow](https://github.com/minetest/minetest/actions?query=workflow%3Aandroid+event%3Apush)
automatically produces an APK for each architecture.
Before installing them onto a device they however need to be signed.

This requires an installation of the Android SDK and `adb`.
```bash
.../android-sdk/build-tools/30.0.3/apksigner sign --ks ~/.android/debug.keystore \
app-arm64-v8a-release-unsigned.apk
# Enter 'android' (without quotes) when asked for a password
```

Note that the `debug.keystore` will not exist if you have never compiled an
Android app on your system (probably).

After that installing it will work:
```bash
adb install -r -d ./app-arm64-v8a-release-unsigned.apk
```

## How to get debug output from Minetest on Android

In case debug.txt isn't enough (e.g. when debugging a crash), you can get debug
output using logcat:

`adb logcat -s 'Minetest:*' '*:F'`

Note that you can do this even *after* the app has crashed,
since Android keeps an internal buffer.

A segmentation fault for example looks like this:

```
01-10 17:20:22.215 19308 20560 F libc : Fatal signal 6 (SIGABRT), code -1 (SI_QUEUE) in tid 20560 (MinetestNativeT), pid 19308 (netest.minetest)
01-10 17:20:22.287 20576 20576 F DEBUG : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
01-10 17:20:22.287 20576 20576 F DEBUG : Build fingerprint: '...'
01-10 17:20:22.287 20576 20576 F DEBUG : Revision: '4'
01-10 17:20:22.287 20576 20576 F DEBUG : ABI: 'arm64'
01-10 17:20:22.288 20576 20576 F DEBUG : Timestamp: 2024-01-10 17:20:22+0100
01-10 17:20:22.288 20576 20576 F DEBUG : pid: 19308, tid: 20560, name: MinetestNativeT >>> net.minetest.minetest <<<
01-10 17:20:22.288 20576 20576 F DEBUG : uid: 10385
01-10 17:20:22.288 20576 20576 F DEBUG : signal 6 (SIGABRT), code -1 (SI_QUEUE), fault addr --------
[ ... more information follows ... ]
```

## Profiling Minetest on Linux

We will be using a tool called "perf", which you can get by installing `perf` or `linux-perf` or `linux-tools-common`.
Expand Down

0 comments on commit 8ff0e1d

Please sign in to comment.