ndkports
Pre-built Android AARs for popular C/C++ libraries, cross-compiled for all ABIs and packaged for Prefab.
Hosted at maven.doomhowl.com — browse available artifacts in the Reposilite web UI.
Available libraries
| Library | Maven coordinate | Prefab module | Header-only |
|---|---|---|---|
| Boost 1.87.0 | org.boost:boost:1.87.0-SNAPSHOT |
boost (header-only umbrella), plus compiled modules filesystem, thread, atomic, chrono, container, context, coroutine, fiber, date_time, regex (header-only), serialization, program_options, random, iostreams, log, log_setup, json, url, charconv, timer, type_erasure, wave, graph, stacktrace_noop, unit_test_framework, prg_exec_monitor, test_exec_monitor |
partial |
| Lua 5.4.5 | com.walterschell:lua:5.4.5-SNAPSHOT |
lua_shared |
|
| sol2 3.3.0 | com.thephd:sol2:3.3.0-SNAPSHOT |
sol2 |
yes |
| Raylib 5.6 | com.raysan5:raylib:5.6-SNAPSHOT |
raylib |
|
| Raylib 5.6.1 (Doomhowl) | com.doomhowl:raylib:5.6.1-SNAPSHOT |
raylib |
|
| Raygui 5.6.1 (Doomhowl) | com.doomhowl:raygui:5.6.1-SNAPSHOT |
raygui |
|
| LunaSVG 3.1.0 | com.sammycage:lunasvg:3.1.0-SNAPSHOT |
lunasvg, plutovg |
|
| FreeType 2.14.3 | com.doomhowl:freetype:2.14.3-SNAPSHOT |
freetype |
|
| RmlUi 6.2 (Lua 5.4) | com.doomhowl:rmlui:6.2-SNAPSHOT |
rmlui, rmlui_debugger, rmlui_lua |
|
| OpenSSL 3.2.1 | com.doomhowl:openssl:3.2.1-SNAPSHOT |
ssl, crypto |
|
| curl 7.85.0 | com.doomhowl:curl:7.85.0-SNAPSHOT |
curl |
|
| CPR 1.14.2 | com.libcpr:cpr:1.14.2-SNAPSHOT |
cpr |
|
| Socket.IO 3.2.1 | com.socketio:sioclient:3.2.1-SNAPSHOT |
sioclient, sioclient_tls |
|
| Protobuf 3.21.12 | com.google.protobuf:protobuf:3.21.12-SNAPSHOT |
protobuf |
|
| GameNetworkingSockets 1.6.0 | com.valvesoftware:GameNetworkingSockets:1.6.0-SNAPSHOT |
GameNetworkingSockets |
|
| TouchScrollPhysics 1.0.0 | com.bramtechs:TouchScrollPhysics:1.0.0-SNAPSHOT |
TouchScrollPhysics (static) |
|
| magic_enum 0.9.8 | com.neargye:magic_enum:0.9.8-SNAPSHOT |
magic_enum |
yes |
| xxHash 0.8.3 | com.cyan4973:xxhash:0.8.3-SNAPSHOT |
xxhash |
|
| SDL3_image 3.4.4 | org.libsdl:SDL3_image:3.4.4-SNAPSHOT |
SDL3_image |
|
| bgfx (bgfx.cmake 1.153.9398-566) | com.doomhowl:bgfx:1.153.9398-SNAPSHOT |
bgfx, bx, bimg, bimg_decode, bimg_encode |
|
| kelcoro 0.96.0 | com.doomhowl:kelcoro:0.96.0-SNAPSHOT |
kelcoro |
yes |
All libraries are built for armeabi-v7a, arm64-v8a, x86, and x86_64. Minimum SDK is 21 (24 for CPR).
Usage
Gradle
settings.gradle.kts
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
maven("https://maven.doomhowl.com/releases")
}
}
settings.gradle
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
maven { url 'https://maven.doomhowl.com/releases' }
}
}
build.gradle.kts
android {
ndkVersion = "26.1.10909125"
defaultConfig {
minSdk = 21
}
buildFeatures {
prefab = true
}
}
dependencies {
implementation("com.thephd:sol2:3.3.0-SNAPSHOT")
}
build.gradle
android {
ndkVersion '26.1.10909125'
defaultConfig {
minSdk 21
}
buildFeatures {
prefab true
}
}
dependencies {
implementation 'com.thephd:sol2:3.3.0-SNAPSHOT'
}
The sol2 package transitively provides the Lua 5.4.5 dependency and exports
the lua_shared Prefab module.
CMakeLists.txt
cmake_minimum_required(VERSION 3.22.1)
find_package(sol2 REQUIRED CONFIG)
add_library(myapp SHARED myapp.cpp)
target_link_libraries(myapp sol2::sol2)
For header-only libraries like Boost:
find_package(boost REQUIRED CONFIG)
add_library(myapp SHARED myapp.cpp)
target_link_libraries(myapp boost::boost)
Boost's compiled libraries use the same module names as desktop Boost's own CMake config package, so consumer code looks the same as it would off-device:
find_package(Boost REQUIRED CONFIG)
add_library(myapp SHARED myapp.cpp)
target_link_libraries(myapp Boost::filesystem Boost::json)
The module name you pass to find_package is the Prefab module column from the table above.
Building locally
Requirements:
- Android NDK 26+
- CMake 3.22+
- ADB (optional, for on-device tests)
Create local.properties:
sdk.dir=/path/to/Android/Sdk
ndkPath=/path/to/Android/Sdk/ndk/26.1.10909125
cmakeBinary=/path/to/cmake
Publish a port to the local repository (build/docs/):
./gradlew :lua:publish
To build a different port, replace :lua: with the project name (e.g. :raylib:, :boost:, :doomhowl:raygui:).
To publish to the hosted Reposilite instance, add credentials to ~/.gradle/gradle.properties:
reposiliteUsername=<token>
reposilitePassword=<secret>
Then run:
./gradlew publishAllPublicationsToReposiliteRepository