SDL: copy executable binaries to lib dir in apk, according to https://issuetracker.google.com/issues/128554619

This commit is contained in:
Sergii Pylypenko
2019-10-15 17:57:55 +03:00
parent 01dc04fe17
commit 7c88857742
6 changed files with 50 additions and 15 deletions

View File

@@ -167,9 +167,9 @@ cd project && env PATH=$NDKBUILDPATH BUILD_NUM_CPUS=$NCPU ndk-build -j$NCPU V=1
} || exit 1 ; \
mkdir -p app/build/outputs/apk/release ; \
../copyAssets.sh pack-binaries app/build/outputs/apk/debug/app-debug.apk && \
rm -f app/build/outputs/apk/release/app-release.apk && \
zipalign 4 app/build/outputs/apk/debug/app-debug.apk app/build/outputs/apk/release/app-release.apk &&
apksigner sign --ks ~/.android/debug.keystore --ks-key-alias androiddebugkey --ks-pass pass:android app/build/outputs/apk/release/app-release.apk || \
mv -f app/build/outputs/apk/debug/app-debug.apk app/build/outputs/apk/release/app-release.apk || exit 1 ; \
apksigner sign --ks ~/.android/debug.keystore --ks-key-alias androiddebugkey --ks-pass pass:android app/build/outputs/apk/release/app-release.apk || exit 1 ; \
fi ; } && \
{ if $sign_apk; then cd .. && ./sign.sh && cd project ; else true ; fi ; } && \
{ $install_apk && [ -n "`adb devices | tail -n +2`" ] && \

View File

@@ -3,12 +3,19 @@
ARCHES="arm64-v8a armeabi-v7a x86 x86_64"
if [ "$1" = "pack-binaries" ]; then
echo "Copying binaries.zip to .apk file"
COPIED=1
for ARCH in $ARCHES; do
[ -e lib/$ARCH/binaries.zip ] && zip "$2" lib/$ARCH/binaries.zip && COPIED=0
done
exit $COPIED
[ -e jni/application/src/AndroidData/lib ] || exit 0
[ -e jni/application/src/AndroidData/binaries*.zip ] && {
echo "Error: binaries.zip no longer supported in Android 10"
echo "Copy your executable binaries to AndroidData/lib/arm64-v8a"
echo "Then execute them using \$LIBDIR or getenv(\"LIBDIR\")"
exit 0
}
APK="`pwd`/$2"
echo "Copying binaries to .apk file"
cd jni/application/src/AndroidData/ || exit 1
zip -r "$APK" lib || exit 1
cd ../../../../
exit 0
fi
echo "Copying app data files from project/jni/application/src/AndroidData to project/assets"
@@ -16,10 +23,7 @@ mkdir -p project/assets
rm -f -r project/assets/*
if [ -d "project/jni/application/src/AndroidData" ] ; then
cp -L -r project/jni/application/src/AndroidData/* project/assets/
rm -rf project/assets/lib
fi
for ARCH in $ARCHES; do
mv project/assets/binaries-$ARCH.zip project/libs/$ARCH/binaries.zip 2>/dev/null
done
exit 0

View File

@@ -10,6 +10,7 @@
android:allowBackup="true"
android:banner="@drawable/banner"
android:isGame="true"
android:extractNativeLibs="true"
>
<activity android:name=".MainActivity"
android:label="@string/app_name"

View File

@@ -645,6 +645,7 @@ public class Settings
// TODO: get current user name and set envvar USER, the API is not availalbe on Android 1.6 so I don't bother with this
nativeSetEnv( "APPDIR", p.getFilesDir().getAbsolutePath() );
nativeSetEnv( "SECURE_STORAGE_DIR", p.getFilesDir().getAbsolutePath() );
nativeSetEnv( "LIBDIR", p.getApplicationInfo().nativeLibraryDir );
nativeSetEnv( "DATADIR", Globals.DataDir );
nativeSetEnv( "UNSECURE_STORAGE_DIR", Globals.DataDir );
SdcardAppPath.get().setEnv(p);

View File

@@ -78,8 +78,7 @@ rm -rf $CURDIR/tmp-$1
mkdir -p $CURDIR/tmp-$1
cd $CURDIR/tmp-$1
cp -f $CURDIR/xserver/data/busybox-$1 ./busybox
mkdir -p usr/bin
for f in xhost xkbcomp xloadimage xsel; do cp -f $CURDIR/xserver/android/$1/$f ./usr/bin/$f ; done
for f in xhost xkbcomp xloadimage xsel; do cp -f $CURDIR/xserver/android/$1/$f ./$f ; done
# Statically-linked prebuilt executables, generated using Debian chroot.
if false; then # Disable PulseAudio for now
@@ -97,6 +96,8 @@ cp -f $CURDIR/pulseaudio/android-pulseaudio.conf pulse/pulseaudio.conf
fi # Disable PulseAudio for now
rm -f ../AndroidData/binaries-$1.zip
zip -r ../AndroidData/binaries-$1.zip .
rm -rf ../AndroidData/lib
mkdir -p ../AndroidData/lib/$1
cp -a . ../AndroidData/lib/$1
exit 0

View File

@@ -280,8 +280,36 @@ static void * unpackFilesThread(void * unused)
return (void *)1;
}
static void symlinkBusybox(void)
{
char fname[PATH_MAX*2];
char fname2[PATH_MAX];
sprintf(fname, "%s/busybox", getenv("APPDIR"));
sprintf(fname2, "%s/busybox", getenv("LIBDIR"));
remove(fname);
symlink(fname2, fname);
__android_log_print(ANDROID_LOG_INFO, "XSDL", "ln -s %s %s", fname2, fname);
strcpy( fname, getenv("APPDIR") );
strcat( fname, "/busybox" );
strcat( fname, " rm -rf " );
strcat( fname, getenv("APPDIR") );
strcat( fname, "/usr/bin" );
__android_log_print(ANDROID_LOG_INFO, "XSDL", "%s", fname);
system( fname );
sprintf(fname, "%s/usr/bin", getenv("APPDIR"));
symlink(getenv("LIBDIR"), fname);
__android_log_print(ANDROID_LOG_INFO, "XSDL", "ln -s %s %s", getenv("LIBDIR"), fname);
}
void XSDL_unpackFiles(int _freeSpaceRequiredMb)
{
symlinkBusybox();
pthread_t thread_id;
void * status;
memset(unpackLog, 0, sizeof(unpackLog));