13. June 2018

Android Studio NDK could not start mips64el-linux-android-strip

If you’re using Android Studio to build C++ application with NDK you might encounter following error during build:

org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:transformNativeLibsWithStripDebugSymbolForDebug'.
Caused by: java.io.IOException: Cannot run program ".../Android/Sdk/ndk-bundle/toolchains/mips64el-linux-android-4.9/prebuilt/linux-x86_64/bin/mips64el-linux-android-strip": 
error=2, No such file or directory

The problem is caused by the upgrade of NDK in Android Studio to NDK v17. This version has a different structure of tools. It’s not compatible with Android Experimental Plugin v0.11.

The directory which should contain binary of tools contains just file NOTICE-MIPS64:

This mips64el-linux-android-4.9 directory exists to make the NDK compatible with the Android
SDK's Gradle plugin, version 3.0.1 and earlier, which expects the NDK
to have a MIPS64 toolchain directory.

The solution is to download NDK v16 from NDK older releases. Extract it and replace former ndk-bundle directory.

Commands for macOS or Linux users:

cd ~/Android
unzip ~/Downloads/android-ndk-r16b-linux-x86_64.zip
mv ndk-bundle ndk-bundle-v17
mv android-ndk-r16b ndk-bundle

If you’re Windows user the location of NDK is typically in your profile AppData\Local\Android. Do not forget to unblock the ZIP after downloading (right click, Properties, Unblock, Ok)

Commands for Windows users:

cd ~\AppData\Local\Android
unzip ~\Downloads\android-ndk-r16b-windows-x86_64.zip
mv ndk-bundle ndk-bundle-v17
mv android-ndk-r16b ndk-bundle

Start Android Studio. It should prompt you to update NDK. Do not confirm this request, it will replace NDK with v17. You should see the following screen in SDK Manager:

You can find related sample source code at GitHub in sdl2-android-example repository. Further articles about SDL2 and Android are available under the tag SDL2.

10. May 2018

SDL2_gfx for Android – Graphic primitives

In previous article, we were talking about drawing pictures in JPEG format. Let’s look how to draw some graphic primitives like a line. SDL2_gfx is small library which has support for graphic primitives and some surface functions.

The initial steps to add SDL2_gfx to Android project is the same like in case of SDL2_jpeg.

Register library in settings.gradle:

include ':SDL2_gfx'

The library should be stored in SDL2_gfx directory with build.gradle.

Now update our C application.

Here is simple example which draws a line:

thickLineColor(renderer, 0, 300, 300, 300, 20, 0xFF00FFFF);

You can find the source code at GitHub in sdl2-android-example repository. Further articles about SDL2 and android are available under the tag SDL2.

Special thanks for this extension of SDL2 Android example goes to jojomickymack who suggested how to add support for SDL2_gfx to Android project. Thank you.

6. May 2018

Online UTF-8 repairer

Here is the simple online tool which is able to translate garbled strings in UTF-8 encoding to readable text.

E.g. “Dobrý den” will be translated to the readable string “Dobrý den”

The source code is at GitHub.

12. February 2018

Incompatible library version: requires version 19.0.0 or later, but .dylib provides version 18.0.0

I was trying to compile simple test application with FreeType2 on macOS just by a command line. Application compiled without problem.

The application was not able to start and displayed following error:

Compilation of FreeType
dyld: Library not loaded: /usr/local/lib/libfreetype.6.dylib
  Referenced from: /Users/georgik/projects/freetype-2.6.5/./fttest
  Reason: Incompatible library version: fttest requires version 19.0.0 or later, but libfreetype.6.dylib provides version 18.0.0

There is one handy tool on macOS which helps in cases like this one: otool.

otool -L ./ft-test
  /usr/local/lib/libfreetype.6.dylib (compatibility version 19.0.0, current version 19.5.0)
  /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.0.0)
  /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 495.0.0

The problem was caused by two versions of libfreetype on the macOS. One library was stored in /usr/local/lib and the other was stored in my project directory.

How to fix the issue? There are two options:

  • Remove unwanted library which is causing ambiguity
  • Set proper paths to DYLD_LIBRARY_PATH before starting the application

4. February 2018

How to find out version of Windows

Different version of Windows contains different features. E.g. switching UI to grayscale is available in Windows 10 in version 1709.

If you want to find out version of Windows, press Windows key and type command winver.

Press enter and following window should be displayed:

  • Quick search

  • Links

  • Twitter

    Follow @jurajmichalek on twitter.

  • Comments

  • Tags

  • Topics