diff --git a/dist-build/android-aar.sh b/dist-build/android-aar.sh
index e251700a..af223993 100755
--- a/dist-build/android-aar.sh
+++ b/dist-build/android-aar.sh
@@ -1,17 +1,18 @@
-#!/bin/sh
+#! /bin/sh
-#creates an AAR with libsodium in 4 configurations all combinations of static | shared | minimal | full
-#the x86 static library will not work due to text relocation rules and so all static x86 versions are just the shared library
-#to simplify linking each version of the library is given a different name sodium, sodium-static, sodium-minimal and sodium-minimal-static
+# Create an AAR with libsodium in all combinations of static | shared | minimal | full.
+#
+# The x86 static library will not work due to text relocation rules, so static x86 versions are limited to shared libraries.
+# To simplify linking, library variants have distinct names: sodium, sodium-static, sodium-minimal and sodium-minimal-static.
SODIUM_VERSION="1.0.18.0"
-NDK_VERSION=$(grep "Pkg.Revision = " <"$ANDROID_NDK_HOME/source.properties" | cut -f 2 -d '=' | cut -f 2 -d' ' | cut -f 1 -d'.')
+NDK_VERSION=$(grep "Pkg.Revision = " <"${ANDROID_NDK_HOME}/source.properties" | cut -f 2 -d '=' | cut -f 2 -d' ' | cut -f 1 -d'.')
DEST_PATH=$(mktemp -d)
cd "$(dirname "$0")/../" || exit
make_abi_json() {
- echo "{\"abi\":\"$NDK_ARCH\",\"api\":$SDK_VERSION,\"ndk\":$NDK_VERSION,\"stl\":\"none\"}" >"$1/abi.json"
+ echo "{\"abi\":\"${NDK_ARCH}\",\"api\":${SDK_VERSION},\"ndk\":${NDK_VERSION},\"stl\":\"none\"}" >"$1/abi.json"
}
make_prefab_json() {
@@ -20,65 +21,68 @@ make_prefab_json() {
make_manifest() {
echo "
-
-" >"$1/AndroidManifest.xml"
-
+
+" >"${1}/AndroidManifest.xml"
}
make_prefab_structure() {
mkdir "$DEST_PATH"
- for i in "prefab" "prefab/modules" "META-INF"; do
- mkdir "$DEST_PATH/$i"
+
+ for variant_dirs in "prefab" "prefab/modules" "META-INF"; do
+ mkdir "${DEST_PATH}/${variant_dirs}"
done
- make_prefab_json "$DEST_PATH/prefab"
- make_manifest "$DEST_PATH"
- cp "LICENSE" "$DEST_PATH/META-INF"
- for i in "prefab/modules/sodium" "prefab/modules/sodium-static" "prefab/modules/sodium-minimal" "prefab/modules/sodium-minimal-static"; do
- mkdir "$DEST_PATH/$i"
- if [ "$i" = "prefab/modules/sodium-minimal" ]; then
- echo "{\"library_name\":\"libsodium\"}" >"$DEST_PATH/$i/module.json"
+
+ make_prefab_json "${DEST_PATH}/prefab"
+ make_manifest "${DEST_PATH}"
+ cp "LICENSE" "${DEST_PATH}/META-INF"
+
+ for variant in \
+ "prefab/modules/sodium" "prefab/modules/sodium-static" \
+ "prefab/modules/sodium-minimal" "prefab/modules/sodium-minimal-static"; do
+ mkdir "${DEST_PATH}/${variant}"
+
+ if [ "$variant" = "prefab/modules/sodium-minimal" ]; then
+ echo "{\"library_name\":\"libsodium\"}" >"${DEST_PATH}/${variant}/module.json"
else
- echo "{}" >"$DEST_PATH/$i/module.json"
+ echo "{}" >"${DEST_PATH}/${variant}/module.json"
fi
- mkdir "$DEST_PATH/$i/libs"
- for j in "arm64-v8a" "armeabi-v7a" "x86" "x86_64"; do
- mkdir "$DEST_PATH/$i/libs/android.$j"
- mkdir "$DEST_PATH/$i/libs/android.$j/include"
- NDK_ARCH="$j"
- if [ $j = "arm64-v8a" ] || [ $j = "x86_64" ]; then
+
+ mkdir "${DEST_PATH}/${variant}/libs"
+
+ for arch in "arm64-v8a" "armeabi-v7a" "x86" "x86_64"; do
+ mkdir "$DEST_PATH/${variant}/libs/android.${arch}"
+ mkdir "$DEST_PATH/${variant}/libs/android.${arch}/include"
+ NDK_ARCH="$arch"
+ if [ $arch = "arm64-v8a" ] || [ $arch = "x86_64" ]; then
SDK_VERSION="21"
else
SDK_VERSION="19"
-
fi
- make_abi_json "$DEST_PATH/$i/libs/android.$j"
-
+ make_abi_json "$DEST_PATH/${variant}/libs/android.${arch}"
done
done
}
copy_libs() {
- SRC_DIR="libsodium-android-$1"
+ SRC_DIR="libsodium-android-${1}"
- SHARED_DEST_DIR="$DEST_PATH/prefab/modules/sodium$3/libs/android.$2"
- STATIC_DEST_DIR="$DEST_PATH/prefab/modules/sodium$3-static/libs/android.$2"
+ SHARED_DEST_DIR="${DEST_PATH}/prefab/modules/sodium${3}/libs/android.${2}"
+ STATIC_DEST_DIR="${DEST_PATH}/prefab/modules/sodium${3}-static/libs/android.${2}"
- cp -r "$SRC_DIR/include" "$SHARED_DEST_DIR"
- cp -r "$SRC_DIR/include" "$STATIC_DEST_DIR"
- cp "$SRC_DIR/lib/libsodium.so" "$SHARED_DEST_DIR/libsodium.so"
- cp "$SRC_DIR/lib/libsodium.a" "$STATIC_DEST_DIR/libsodium$3-static.a"
+ cp -r "${SRC_DIR}/include" "$SHARED_DEST_DIR"
+ cp -r "${SRC_DIR}/include" "$STATIC_DEST_DIR"
+ cp "${SRC_DIR}/lib/libsodium.so" "${SHARED_DEST_DIR}/libsodium.so"
+ cp "${SRC_DIR}/lib/libsodium.a" "${STATIC_DEST_DIR}/libsodium${3}-static.a"
rm -r "$SRC_DIR"
}
build_all() {
-
dist-build/android-armv7-a.sh
dist-build/android-armv8-a.sh
dist-build/android-x86_64.sh
dist-build/android-x86.sh
-
}
make_prefab_structure
@@ -100,37 +104,41 @@ copy_libs "armv8-a+crypto" "arm64-v8a"
copy_libs "i686" "x86"
copy_libs "westmere" "x86_64"
-AAR_PATH="$(pwd)/libsodium-$SODIUM_VERSION.aar"
+AAR_PATH="$(pwd)/libsodium-${SODIUM_VERSION}.aar"
cd "$DEST_PATH" || exit
rm "$AAR_PATH"
-zip -r "$AAR_PATH" META-INF prefab AndroidManifest.xml
+zip -9 -r "$AAR_PATH" META-INF prefab AndroidManifest.xml
cd .. || exit
rm -r "$DEST_PATH"
-clear
-echo "congrats you have built an AAR containing libsodium. To use it with
-gradle / cmake (defaults for Android Studio projects) simply:
-edit the app/build.gradle file to add:
+echo
+echo "Congrats you have built an AAR containing libsodium! To use it with
+gradle or cmake (as set by default for Android Studio projects):
+
+- Edit the app/build.gradle file to add:
android {
buildFeatures {
prefab true
}
}
-
- #and
+
+ and
+
dependencies {
- implementation fileTree(dir:'path/to/aar/',include:['libsodium-$SODIUM_VERSION.aar'])
+ implementation fileTree(dir:'path/to/aar/',include:['libsodium-$SODIUM_VERSION.aar'])
}
- #you can optionally store multiple AAR files in the same folder and include '*.aar'
-edit your module's CMakeLists.txt file to add:
-
+ Optionally, store multiple AAR files in the same folder and include '*.aar'
+
+- Edit your module's CMakeLists.txt file to add:
+
find_package(sodium REQUIRED CONFIG)
-
- # the specify sodium::sodium as an item in the relevant target_link_libraries statement
- # the first value specifies the AAR and is always sodium the second is the library
- # name which supports sodium for the full shared library sodium-static
- # for the full static library sodium-minimal for the minimal shared library
- # or sodium-minimal-static for the minimal static library"
+- Then, specify 'sodium::x' as an item in the relevant 'target_link_libraries' statement.
+ The first part is the AAR name and should be 'sodium'.
+ The second part ('x', to be replaced) should be set to:
+ - 'sodium' for the full shared library,
+ - 'sodium-static' for the full static library
+ - 'sodium-minimal' for the minimal shared library, or
+ - 'sodium-minimal-static' for the minimal static library."