Skip to content

Instantly share code, notes, and snippets.

@julioz
Created April 22, 2019 15:54
Show Gist options
  • Save julioz/ed8fd5007a6ac96bc9cdefb266796880 to your computer and use it in GitHub Desktop.
Save julioz/ed8fd5007a6ac96bc9cdefb266796880 to your computer and use it in GitHub Desktop.
createStrippedAndDebugInfo() {
cd ${REPO_PATH} # assuming we're in your repository's directory
ANDROID_NDK=<PATH_TO_NDK>
TMP_DIR_NAME=tmp_strip_symbols
AAR=`find -name '*.aar'` # find the path to the AAR containing the binaries
mkdir -p ${TMP_DIR_NAME}
try cd ${TMP_DIR_NAME}
try cp $AAR . # copy the AAR with symbolised binaries to the temp directory
try unzip $AAR -d .
mkdir -p obj
try cp -R jni/* obj/ # copy all symbolised binaries from the jni/ directory to the obj/ directory
JNI_ARCHS=(`find jni/ -type d -maxdepth 1 -mindepth 1 -exec basename {} \; | perl -ne 'print $1." " if /(.*)/g'`)
# Strip the binaries for each CPU architecture (ABI) under the jni/ directory
for jni_arch in ${JNI_ARCHS[@]};
do
echo "Stripping ${jni_arch}"
SO_FILE=`find jni/${jni_arch} -name '*.so'` # find the .so binary for the given ABI
# Make sure we use the correct `strip` and `nm` tools for each ABI case
case ${jni_arch} in
armeabi-v7a)
STRIP=`find ${ANDROID_NDK}/toolchains/arm-*/prebuilt/*/bin -name '*strip'`
NM=`find ${ANDROID_NDK}/toolchains/arm-*/prebuilt/*/bin -name '*-nm' | grep -v "gcc-nm$"`
;;
arm64-v8a)
STRIP=`find ${ANDROID_NDK}/toolchains/aarch64-*/prebuilt/*/bin -name '*strip'`
NM=`find ${ANDROID_NDK}/toolchains/aarch64-*/prebuilt/*/bin -name '*-nm' | grep -v "gcc-nm$"`
;;
x86_64)
STRIP=`find ${ANDROID_NDK}/toolchains/x86_64-*/prebuilt/*/bin -name '*strip'`
NM=`find ${ANDROID_NDK}/toolchains/x86_64-*/prebuilt/*/bin -name '*-nm' | grep -v "gcc-nm$"`
;;
x86)
STRIP=`find ${ANDROID_NDK}/toolchains/x86-*/prebuilt/*/bin -name '*strip'`
NM=`find ${ANDROID_NDK}/toolchains/x86-*/prebuilt/*/bin -name '*-nm' | grep -v "gcc-nm$"`
;;
# you can add more cases if you support different ABI combinations
*)
die "unknown architecture found in jni folder!"
;;
esac
# Exit the script if no debug symbols were found in the allegedly "simbolysed" script,
# to make sure we didn't have issues in previous build steps (for example, with Gradle scripts)
${NM} ${SO_FILE} | test $(wc -l) -eq 0 && die "No symbols present in the shared library"
echo "${STRIP} --strip-debug ${SO_FILE}"
${STRIP} --strip-unneeded ${SO_FILE} || die "Failed to strip symbols"
done
# Zip the new files back into another AAR
try cd <PATH_TO_TMP_DIR>
try zip -ru ${AAR} .
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment