Browse Source

Update java launcher

hlzbot-dirty
mittorn 8 years ago
parent
commit
5616b6017d
  1. 2
      android/build-manual.sh
  2. 89
      android/src/in/celest/xash3d/InstallReceiver.java
  3. 57
      android/src/in/celest/xash3d/LauncherActivity.java

2
android/build-manual.sh

@ -7,7 +7,7 @@ mkdir bin
mkdir bin/classes mkdir bin/classes
mkdir assets/ mkdir assets/
$AAPT package -M AndroidManifest.xml -m -S res -I $ANDROID_JAR $AAPT package -M AndroidManifest.xml -m -S res -I $ANDROID_JAR
$JAVA_HOME/bin/javac -d bin/classes -s bin/classes -cp $ANDROID_JAR src/in/celest/xash3d/* $JAVA_HOME/bin/javac -d bin/classes -s bin/classes -cp $ANDROID_JAR src/in/celest/xash3d/*.java
$DX --dex --output=bin/classes.dex bin/classes/ $DX --dex --output=bin/classes.dex bin/classes/
$AAPT package -f -M AndroidManifest.xml -S res -I $ANDROID_JAR -F bin/$NAME.apk.unaligned $AAPT package -f -M AndroidManifest.xml -S res -I $ANDROID_JAR -F bin/$NAME.apk.unaligned
python2 makepak.py pak/ assets/extras.pak python2 makepak.py pak/ assets/extras.pak

89
android/src/in/celest/xash3d/InstallReceiver.java

@ -3,12 +3,97 @@ import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.util.Log; import android.util.Log;
import android.content.Intent;
import java.io.FileOutputStream;
import java.io.File;
import java.io.InputStream;
import java.lang.reflect.Method;
import android.content.SharedPreferences;
import android.util.Log;
public class InstallReceiver extends BroadcastReceiver { public class InstallReceiver extends BroadcastReceiver {
private static final String TAG = "MOD_LAUNCHER"; private static final String TAG = "MOD_LAUNCHER";
@Override @Override
public void onReceive(Context context, Intent arg1) { public void onReceive(Context context, Intent arg1) {
Log.d( TAG, "Install received, extracting PAK" ); String pkgname = arg1.getData().getEncodedSchemeSpecificPart();
LauncherActivity.extractPAK( context, true ); Log.d( TAG, "Install received, package " + pkgname );
if( context.getPackageName().equals(pkgname) )
extractPAK(context, true);
}
public static SharedPreferences mPref = null;
private static final int PAK_VERSION = 2;
private static int chmod(String path, int mode) {
int ret = -1;
try
{
ret = Runtime.getRuntime().exec("chmod " + Integer.toOctalString(mode) + " " + path).waitFor();
Log.d(TAG, "chmod " + Integer.toOctalString(mode) + " " + path + ": " + ret );
}
catch(Exception e)
{
ret = -1;
Log.d(TAG, "chmod: Runtime not worked: " + e.toString() );
}
try
{
Class fileUtils = Class.forName("android.os.FileUtils");
Method setPermissions = fileUtils.getMethod("setPermissions",
String.class, int.class, int.class, int.class);
ret = (Integer) setPermissions.invoke(null, path,
mode, -1, -1);
}
catch(Exception e)
{
ret = -1;
Log.d(TAG, "chmod: FileUtils not worked: " + e.toString() );
}
return ret;
}
private static void extractFile(Context context, String path) {
try
{
InputStream is = null;
FileOutputStream os = null;
is = context.getAssets().open(path);
File out = new File(context.getFilesDir().getPath()+'/'+path);
out.getParentFile().mkdirs();
chmod( out.getParent(), 0777 );
os = new FileOutputStream(out);
byte[] buffer = new byte[1024];
int length;
while ((length = is.read(buffer)) > 0) {
os.write(buffer, 0, length);
}
os.close();
is.close();
chmod( context.getFilesDir().getPath()+'/'+path, 0777 );
} catch( Exception e )
{
Log.e( TAG, "Failed to extract file:" + e.toString() );
e.printStackTrace();
}
}
public static synchronized void extractPAK(Context context, Boolean force) {
InputStream is = null;
FileOutputStream os = null;
try {
if( mPref == null )
mPref = context.getSharedPreferences("mod", 0);
synchronized( mPref )
{
if( mPref.getInt( "pakversion", 0 ) == PAK_VERSION && !force )
return;
extractFile(context, "extras.pak");
SharedPreferences.Editor editor = mPref.edit();
editor.putInt( "pakversion", PAK_VERSION );
editor.commit();
}
} catch( Exception e )
{
Log.e( TAG, "Failed to extract PAK:" + e.toString() );
}
} }
} }

57
android/src/in/celest/xash3d/LauncherActivity.java

@ -16,10 +16,6 @@ import android.widget.TextView;
import android.content.ComponentName; import android.content.ComponentName;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import java.lang.reflect.Method;
import java.io.FileOutputStream;
import java.io.File;
import java.io.InputStream;
import android.content.Context; import android.content.Context;
import android.util.Log; import android.util.Log;
@ -80,59 +76,6 @@ public class LauncherActivity extends Activity {
intent.putExtra("gamelibdir", getFilesDir().getAbsolutePath().replace("/files","/lib")); intent.putExtra("gamelibdir", getFilesDir().getAbsolutePath().replace("/files","/lib"));
intent.putExtra("pakfile", getFilesDir().getAbsolutePath() + "/extras.pak" ); intent.putExtra("pakfile", getFilesDir().getAbsolutePath() + "/extras.pak" );
startActivity(intent); startActivity(intent);
}
private static int chmod(String path, int mode) {
int ret = -1;
try
{
ret = Runtime.getRuntime().exec("chmod " + Integer.toOctalString(mode) + " " + path).waitFor();
Log.d(TAG, "chmod " + Integer.toOctalString(mode) + " " + path + ": " + ret );
}
catch(Exception e)
{
ret = -1;
Log.d(TAG, "chmod: Runtime not worked: " + e.toString() );
}
try
{
Class fileUtils = Class.forName("android.os.FileUtils");
Method setPermissions = fileUtils.getMethod("setPermissions",
String.class, int.class, int.class, int.class);
ret = (Integer) setPermissions.invoke(null, path,
mode, -1, -1);
}
catch(Exception e)
{
ret = -1;
Log.d(TAG, "chmod: FileUtils not worked: " + e.toString() );
}
return ret;
}
private static void extractFile(Context context, String path) {
try
{
InputStream is = null;
FileOutputStream os = null;
is = context.getAssets().open(path);
File out = new File(context.getFilesDir().getPath()+'/'+path);
out.getParentFile().mkdirs();
chmod( out.getParent(), 0777 );
os = new FileOutputStream(out);
byte[] buffer = new byte[1024];
int length;
while ((length = is.read(buffer)) > 0) {
os.write(buffer, 0, length);
}
os.close();
is.close();
chmod( context.getFilesDir().getPath()+'/'+path, 0777 );
} catch( Exception e )
{
Log.e( TAG, "Failed to extract file:" + e.toString() );
e.printStackTrace();
}
} }
public static void extractPAK(Context context, Boolean force) { public static void extractPAK(Context context, Boolean force) {

Loading…
Cancel
Save