SDL: put binaries.zip to lib/<ARCH>/ so Play Store will (maybe, not tested) strip binaries for unsupported architectures
This commit is contained in:
16
build.sh
16
build.sh
@@ -147,7 +147,6 @@ cd project && env PATH=$NDKBUILDPATH BUILD_NUM_CPUS=$NCPU ndk-build -j$NCPU V=1
|
|||||||
cd .. && ./copyAssets.sh && cd project && \
|
cd .. && ./copyAssets.sh && cd project && \
|
||||||
{ if $build_release ; then \
|
{ if $build_release ; then \
|
||||||
$quick_rebuild && { \
|
$quick_rebuild && { \
|
||||||
ln -s -f libs lib ; \
|
|
||||||
zip -u -r app/build/outputs/apk/release/app-release-unsigned.apk lib assets || exit 1 ; \
|
zip -u -r app/build/outputs/apk/release/app-release-unsigned.apk lib assets || exit 1 ; \
|
||||||
} || ./gradlew assembleRelease || exit 1 ; \
|
} || ./gradlew assembleRelease || exit 1 ; \
|
||||||
[ '!' -x jni/application/src/AndroidPostBuild.sh ] || {
|
[ '!' -x jni/application/src/AndroidPostBuild.sh ] || {
|
||||||
@@ -155,13 +154,22 @@ cd project && env PATH=$NDKBUILDPATH BUILD_NUM_CPUS=$NCPU ndk-build -j$NCPU V=1
|
|||||||
./AndroidPostBuild.sh `pwd`/../../../app/build/outputs/apk/release/app-release-unsigned.apk || exit 1 ; \
|
./AndroidPostBuild.sh `pwd`/../../../app/build/outputs/apk/release/app-release-unsigned.apk || exit 1 ; \
|
||||||
cd ../../.. ; \
|
cd ../../.. ; \
|
||||||
} || exit 1 ; \
|
} || exit 1 ; \
|
||||||
|
../copyAssets.sh pack-binaries app/build/outputs/apk/release/app-release-unsigned.apk ; \
|
||||||
rm -f app/build/outputs/apk/release/app-release.apk ; \
|
rm -f app/build/outputs/apk/release/app-release.apk ; \
|
||||||
zipalign 4 app/build/outputs/apk/release/app-release-unsigned.apk app/build/outputs/apk/release/app-release.apk || exit 1 ; \
|
zipalign 4 app/build/outputs/apk/release/app-release-unsigned.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 ; \
|
apksigner sign --ks ~/.android/debug.keystore --ks-key-alias androiddebugkey --ks-pass pass:android app/build/outputs/apk/release/app-release.apk || exit 1 ; \
|
||||||
else \
|
else \
|
||||||
./gradlew assembleDebug && \
|
./gradlew assembleDebug || exit 1 ; \
|
||||||
mv -f app/build/outputs/apk/debug/app-debug.apk app/build/outputs/apk/release/app-release.apk \
|
[ '!' -x jni/application/src/AndroidPostBuild.sh ] || {
|
||||||
|| exit 1 ; \
|
cd jni/application/src ; \
|
||||||
|
./AndroidPostBuild.sh `pwd`/../../../app/build/outputs/apk/debug/app-debug.apk || exit 1 ; \
|
||||||
|
cd ../../.. ; \
|
||||||
|
} || exit 1 ; \
|
||||||
|
mkdir -p app/build/outputs/apk/release ; \
|
||||||
|
../copyAssets.sh pack-binaries app/build/outputs/apk/debug/app-debug.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 ; \
|
||||||
fi ; } && \
|
fi ; } && \
|
||||||
{ if $sign_apk; then cd .. && ./sign.sh && cd project ; else true ; fi ; } && \
|
{ if $sign_apk; then cd .. && ./sign.sh && cd project ; else true ; fi ; } && \
|
||||||
{ $install_apk && [ -n "`adb devices | tail -n +2`" ] && \
|
{ $install_apk && [ -n "`adb devices | tail -n +2`" ] && \
|
||||||
|
|||||||
@@ -1073,6 +1073,9 @@ fi
|
|||||||
|
|
||||||
if [ -e project/jni/application/src/project.patch ]; then patch -p1 --dry-run -f -R < project/jni/application/src/project.patch > /dev/null 2>&1 || patch -p1 --no-backup-if-mismatch < project/jni/application/src/project.patch || exit 1 ; fi
|
if [ -e project/jni/application/src/project.patch ]; then patch -p1 --dry-run -f -R < project/jni/application/src/project.patch > /dev/null 2>&1 || patch -p1 --no-backup-if-mismatch < project/jni/application/src/project.patch || exit 1 ; fi
|
||||||
|
|
||||||
|
rm -f project/lib
|
||||||
|
ln -s -f libs project/lib
|
||||||
|
|
||||||
echo Cleaning up dependencies
|
echo Cleaning up dependencies
|
||||||
|
|
||||||
rm -rf project/libs/*/* project/gen
|
rm -rf project/libs/*/* project/gen
|
||||||
|
|||||||
@@ -1,16 +1,25 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
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
|
||||||
|
fi
|
||||||
|
|
||||||
echo "Copying app data files from project/jni/application/src/AndroidData to project/assets"
|
echo "Copying app data files from project/jni/application/src/AndroidData to project/assets"
|
||||||
mkdir -p project/assets
|
mkdir -p project/assets
|
||||||
rm -f -r project/assets/*
|
rm -f -r project/assets/*
|
||||||
if [ -d "project/jni/application/src/AndroidData" ] ; then
|
if [ -d "project/jni/application/src/AndroidData" ] ; then
|
||||||
cp -L -r project/jni/application/src/AndroidData/* project/assets/
|
cp -L -r project/jni/application/src/AndroidData/* project/assets/
|
||||||
exit 0 # Do not split assets, this was needed only for Andorid 2.3 with it's stupid limitations
|
|
||||||
for F in project/assets/*; do
|
|
||||||
if [ `cat $F | wc -c` -gt 1000000 ] ; then
|
|
||||||
echo "The file $F is bigger than 1 megabyte - splitting it into smaller chunks"
|
|
||||||
split -b 1000000 -a 3 -d $F $F && rm $F || { echo "Error: 'split' command not installed" ; exit 1 ; }
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
for ARCH in $ARCHES; do
|
||||||
|
mv project/assets/binaries-$ARCH.zip project/libs/$ARCH/binaries.zip 2>/dev/null
|
||||||
|
done
|
||||||
|
|
||||||
exit 0
|
exit 0
|
||||||
|
|||||||
@@ -97,6 +97,8 @@ import android.app.UiModeManager;
|
|||||||
import android.Manifest;
|
import android.Manifest;
|
||||||
import android.content.pm.PermissionInfo;
|
import android.content.pm.PermissionInfo;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.zip.ZipFile;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
|
||||||
public class MainActivity extends Activity
|
public class MainActivity extends Activity
|
||||||
@@ -1309,38 +1311,56 @@ public class MainActivity extends Activity
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ZipFile myApk = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
myApk = new ZipFile(getPackageResourcePath());
|
||||||
|
}
|
||||||
|
catch( IOException eeeeeeeee ) {}
|
||||||
|
|
||||||
String [] binaryZipNames = { "binaries-" + android.os.Build.CPU_ABI + ".zip", "binaries-" + android.os.Build.CPU_ABI2 + ".zip", "binaries.zip" };
|
String [] binaryZipNames = { "binaries-" + android.os.Build.CPU_ABI + ".zip", "binaries-" + android.os.Build.CPU_ABI2 + ".zip", "binaries.zip" };
|
||||||
if ( android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN )
|
if ( android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP )
|
||||||
binaryZipNames = new String[] { "binaries-" + android.os.Build.CPU_ABI + "-pie.zip", "binaries-" + android.os.Build.CPU_ABI2 + "-pie.zip", "binaries-" + android.os.Build.CPU_ABI + ".zip", "binaries-" + android.os.Build.CPU_ABI2 + ".zip", "binaries.zip" };
|
{
|
||||||
for(String binaryZip: binaryZipNames)
|
ArrayList<String> a = new ArrayList<String>();
|
||||||
|
for( String arch: android.os.Build.SUPPORTED_ABIS )
|
||||||
|
{
|
||||||
|
a.add("binaries-" + arch + ".zip");
|
||||||
|
}
|
||||||
|
a.add("binaries.zip");
|
||||||
|
binaryZipNames = a.toArray(new String[0]);
|
||||||
|
}
|
||||||
|
for( String binaryZip: binaryZipNames )
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
Log.i("SDL", "libSDL: Trying to extract binaries from assets " + binaryZip);
|
|
||||||
|
|
||||||
InputStream in = null;
|
InputStream in = null;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
for( int i = 0; ; i++ )
|
//Log.i("SDL", "libSDL: Trying to extract binaries from assets/" + binaryZip);
|
||||||
{
|
if( in == null )
|
||||||
InputStream in2 = getAssets().open(binaryZip + String.format("%02d", i));
|
in = getAssets().open(binaryZip);
|
||||||
if( in == null )
|
Log.i("SDL", "libSDL: Found binaries at assets/" + binaryZip);
|
||||||
in = in2;
|
|
||||||
else
|
|
||||||
in = new SequenceInputStream( in, in2 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
catch( IOException ee )
|
catch( Exception eee ) {}
|
||||||
|
|
||||||
|
if( binaryZip.equals("binaries.zip") )
|
||||||
{
|
{
|
||||||
try
|
for( String arch: android.os.Build.SUPPORTED_ABIS )
|
||||||
{
|
{
|
||||||
if( in == null )
|
try
|
||||||
in = getAssets().open(binaryZip);
|
{
|
||||||
|
if( in == null && myApk != null )
|
||||||
|
{
|
||||||
|
//Log.i("SDL", "libSDL: Trying to extract binaries from lib/" + arch + "/" + binaryZip);
|
||||||
|
in = myApk.getInputStream(myApk.getEntry("lib/" + arch + "/" + binaryZip));
|
||||||
|
Log.i("SDL", "libSDL: Found binaries at lib/" + arch + "/" + binaryZip);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch( Exception eeee ) {}
|
||||||
}
|
}
|
||||||
catch( IOException eee ) {}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if( in == null )
|
if( in == null )
|
||||||
throw new RuntimeException("libSDL: Extracting binaries failed, the .apk file packaged incorrectly");
|
throw new RuntimeException("libSDL: Extracting binaries failed");
|
||||||
|
|
||||||
ZipInputStream zip = new ZipInputStream(in);
|
ZipInputStream zip = new ZipInputStream(in);
|
||||||
|
|
||||||
@@ -1354,10 +1374,8 @@ public class MainActivity extends Activity
|
|||||||
{
|
{
|
||||||
ZipEntry entry = null;
|
ZipEntry entry = null;
|
||||||
entry = zip.getNextEntry();
|
entry = zip.getNextEntry();
|
||||||
/*
|
//if( entry != null )
|
||||||
if( entry != null )
|
// Log.i("SDL", "Extracting binary " + entry.getName());
|
||||||
Log.i("SDL", "Extracting lib " + entry.getName());
|
|
||||||
*/
|
|
||||||
if( entry == null )
|
if( entry == null )
|
||||||
{
|
{
|
||||||
Log.i("SDL", "Extracting binaries finished");
|
Log.i("SDL", "Extracting binaries finished");
|
||||||
@@ -1373,13 +1391,16 @@ public class MainActivity extends Activity
|
|||||||
|
|
||||||
OutputStream out = null;
|
OutputStream out = null;
|
||||||
String path = libDir.getAbsolutePath() + "/" + entry.getName();
|
String path = libDir.getAbsolutePath() + "/" + entry.getName();
|
||||||
try {
|
try
|
||||||
|
{
|
||||||
File outDir = new File( path.substring(0, path.lastIndexOf("/") ));
|
File outDir = new File( path.substring(0, path.lastIndexOf("/") ));
|
||||||
if( !(outDir.exists() && outDir.isDirectory()) )
|
if( !(outDir.exists() && outDir.isDirectory()) )
|
||||||
outDir.mkdirs();
|
outDir.mkdirs();
|
||||||
} catch( SecurityException eeeeeee ) { };
|
}
|
||||||
|
catch( SecurityException eeeeeee ) { };
|
||||||
|
|
||||||
try {
|
try
|
||||||
|
{
|
||||||
CheckedInputStream check = new CheckedInputStream( new FileInputStream(path), new CRC32() );
|
CheckedInputStream check = new CheckedInputStream( new FileInputStream(path), new CRC32() );
|
||||||
while( check.read(buf, 0, buf.length) > 0 ) {};
|
while( check.read(buf, 0, buf.length) > 0 ) {};
|
||||||
check.close();
|
check.close();
|
||||||
@@ -1417,6 +1438,12 @@ public class MainActivity extends Activity
|
|||||||
//Log.i("SDL", "libSDL: Error: " + eee.toString());
|
//Log.i("SDL", "libSDL: Error: " + eee.toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (myApk != null)
|
||||||
|
myApk.close();
|
||||||
|
}
|
||||||
|
catch( IOException eeeeeeeeee ) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
public static String GetMappedLibraryName(final String s)
|
public static String GetMappedLibraryName(final String s)
|
||||||
|
|||||||
Reference in New Issue
Block a user