From 965b9ff10e0cb456498f85daac581417cff820b9 Mon Sep 17 00:00:00 2001 From: khanhduytran0 Date: Sun, 23 Aug 2020 10:56:49 +0700 Subject: [PATCH] Changes --- .../net/kdt/pojavlaunch/BinaryExecutor.java | 17 +++- .../net/kdt/pojavlaunch/MainActivity.java | 81 ++++++++++-------- .../pojavlaunch/ShellProcessOperation.java | 6 ++ .../main/jniLibs/arm64-v8a/libbinexecutor.so | Bin 10064 -> 9992 bytes .../jniLibs/armeabi-v7a/libbinexecutor.so | Bin 18000 -> 18000 bytes app/src/main/jniLibs/x86/libbinexecutor.so | Bin 9704 -> 5564 bytes app/src/main/jniLibs/x86_64/libbinexecutor.so | Bin 10336 -> 10264 bytes 7 files changed, 69 insertions(+), 35 deletions(-) diff --git a/app/src/main/java/net/kdt/pojavlaunch/BinaryExecutor.java b/app/src/main/java/net/kdt/pojavlaunch/BinaryExecutor.java index 69d190ab8..9396f2e5c 100644 --- a/app/src/main/java/net/kdt/pojavlaunch/BinaryExecutor.java +++ b/app/src/main/java/net/kdt/pojavlaunch/BinaryExecutor.java @@ -3,7 +3,22 @@ package net.kdt.pojavlaunch; // This class load and execute PIE binary using dlopen and dlsym("main") public class BinaryExecutor { - public static native int executeBinary(String ldLibraryPath, String[] args); + public static void initJavaRuntime() { + dlopen(Tools.homeJreDir + "/lib/jli/libjli.so"); + dlopen(Tools.homeJreDir + "/lib/server/libjvm.so"); + dlopen(Tools.homeJreDir + "/lib/libverify.so"); + dlopen(Tools.homeJreDir + "/lib/libjava.so"); + dlopen(Tools.homeJreDir + "/lib/libnet.so"); + dlopen(Tools.homeJreDir + "/lib/libnio.so"); + dlopen(Tools.homeJreDir + "/lib/libawt.so"); + dlopen(Tools.homeJreDir + "/lib/libawt_headless.so"); + + chdir(Tools.MAIN_PATH); + } + + public static native int chdir(String path); + public static native boolean dlopen(String libPath); + public static native int executeBinary(String[] args); static { System.loadLibrary("binexecutor"); diff --git a/app/src/main/java/net/kdt/pojavlaunch/MainActivity.java b/app/src/main/java/net/kdt/pojavlaunch/MainActivity.java index 66873835f..c2f5a4097 100644 --- a/app/src/main/java/net/kdt/pojavlaunch/MainActivity.java +++ b/app/src/main/java/net/kdt/pojavlaunch/MainActivity.java @@ -203,7 +203,6 @@ public class MainActivity extends AppCompatActivity implements OnTouchListener, setTitle("Minecraft " + mProfile.getVersion()); - initEnvs(); //System.loadLibrary("gl4es"); /* if (mVersionInfo.arguments != null) { @@ -882,21 +881,6 @@ public class MainActivity extends AppCompatActivity implements OnTouchListener, } } - public void initEnvs() { - try { - // Os.setenv("LIBGL_MIPMAP", "3", true); - - System.out.println("ldlib before = " + System.getenv("LD_LIBRARY_PATH")); - - Os.setenv("JAVA_HOME", Tools.homeJreDir, true); - Os.setenv("LIBGL_MIPMAP", "3", true); - - System.out.println("ldlib after = " + System.getenv("LD_LIBRARY_PATH")); - } catch (Exception e) { - Tools.showError(MainActivity.this, e, true); - } - } - private boolean isPointerCaptureSupported() { return Build.VERSION.SDK_INT >= 26; } @@ -998,11 +982,28 @@ public class MainActivity extends AppCompatActivity implements OnTouchListener, Os.dup2(fd, OsConstants.STDERR_FILENO); Os.dup2(fd, OsConstants.STDOUT_FILENO); } + + public void initEnvs() { + try { + // Os.setenv("LIBGL_MIPMAP", "3", true); + + System.out.println("ldlib before = " + System.getenv("LD_LIBRARY_PATH")); + + Os.setenv("HOME", Tools.MAIN_PATH, true); + Os.setenv("JAVA_HOME", Tools.homeJreDir, true); + Os.setenv("LIBGL_MIPMAP", "3", true); + + System.out.println("ldlib after = " + System.getenv("LD_LIBRARY_PATH")); + } catch (Exception e) { + Tools.showError(MainActivity.this, e, true); + } + } public static String launchClassPath; public static String launchLibrarySearchPath; - private void runCraft() throws Throwable - { + private void runCraft() throws Throwable { + initEnvs(); + String[] launchArgs = getMCArgs(); // Setup OptiFine @@ -1023,12 +1024,25 @@ public class MainActivity extends AppCompatActivity implements OnTouchListener, System.out.println(); redirectStdio(); + BinaryExecutor.initJavaRuntime(); + + BinaryExecutor.dlopen(Tools.homeJreDir + "/bin/java"); List javaArgList = new ArrayList(); javaArgList.add(Tools.homeJreDir + "/bin/java"); // javaArgList.add("-Xms512m"); javaArgList.add("-Xmx512m"); + String libPath = "lib" + (Build.CPU_ABI.contains("64") ? "64" : ""); + javaArgList.add("-Djava.library.path=" + + "/system/" + libPath + ":" + + "/vendor/" + libPath + ":" + + "/vendor/" + libPath + "/hw:" + + // TODO lwjgl2 vs lwjgl3 native path + getApplicationInfo().nativeLibraryDir + ); + + javaArgList.add("-Djava.home=" + Tools.homeJreDir); javaArgList.add("-Duser.home=" + Tools.MAIN_PATH); // javaArgList.add("-Dorg.lwjgl.system.jemalloc.libname=libjemalloc.so"); @@ -1044,22 +1058,21 @@ public class MainActivity extends AppCompatActivity implements OnTouchListener, javaArgList.add(mVersionInfo.mainClass); javaArgList.addAll(Arrays.asList(launchArgs)); - try { - String libPath = "lib" + (Build.CPU_ABI.contains("64") ? "64" : ""); - BinaryExecutor.executeBinary( - "/system/" + libPath + ":" + - "/vendor/" + libPath + ":" + - "/vendor/" + libPath + "/hw:" + - getApplicationInfo().nativeLibraryDir + ":" + - Tools.homeJreDir + "/lib:" + - Tools.homeJreDir + "/lib/jli:" + - Tools.homeJreDir + "/lib/server", - - javaArgList.toArray(new String[0]) - ); - } catch (Throwable th) { - Tools.showError(this, th, true); - } +/* + ShellProcessOperation sp = new ShellProcessOperation(new ShellProcessOperation.OnPrintListener(){ + + @Override + public void onPrintLine(String text) { + appendlnToLog(text, false); + } + }); + sp.initInputStream(this); + sp.writeToProcess("export LD_LIBRARY_PATH=" + Tools.homeJreDir + "/lib/jli:" + Tools.homeJreDir + "/lib/server:" + Tools.homeJreDir + "/lib"); + sp.writeToProcess(javaArgList.toArray(new String[0])); +*/ + + BinaryExecutor.executeBinary(javaArgList.toArray(new String[0])); + /* "-Dorg.apache.logging.log4j.level=INFO", "-Dorg.apache.logging.log4j.simplelog.level=INFO", diff --git a/app/src/main/java/net/kdt/pojavlaunch/ShellProcessOperation.java b/app/src/main/java/net/kdt/pojavlaunch/ShellProcessOperation.java index 818e67e11..d295d6ec5 100644 --- a/app/src/main/java/net/kdt/pojavlaunch/ShellProcessOperation.java +++ b/app/src/main/java/net/kdt/pojavlaunch/ShellProcessOperation.java @@ -20,6 +20,12 @@ public class ShellProcessOperation ); //"/system/bin/sh -c \"" + command + "\""); } + public void writeToProcess(String[] cmdArr) throws IOException { + StringBuilder sb = new StringBuilder(); + for (String cmd : cmdArr) {sb.append(cmd + " ");} + writeToProcess(sb.toString()); + } + public void writeToProcess(String cmd) throws IOException { DataOutputStream os = new DataOutputStream(process.getOutputStream()); os.writeBytes(cmd + "\n"); diff --git a/app/src/main/jniLibs/arm64-v8a/libbinexecutor.so b/app/src/main/jniLibs/arm64-v8a/libbinexecutor.so index 37ca16e3ce50cb37ce955e233fffc3aea44cb2e6..d5d67f6623e460fa71bf16d8320cf514cc738ad5 100644 GIT binary patch literal 9992 zcmeGiTWlOx_3n&`m*OT)(%7L%>vbC{$0BQc{aUw(t~YUNz!VcXI6p9qcgEgH#xu_B z*oy6xMv#wupeox0;*SQbsz7$d!ymO8DMhu~ex!e!`G@f#pe>F^^D7g3?9m-1 zo#&Bk_vM zWL+CmIVs!f5zS_wmq%pDP;KduVoO8j zL3u=%hmAy1ii5f}+Hpip4BMt9C6bC}-LsW+8><8}n=W3(ukI=<= z8-kX&A9n+h9f0SGfbtuFQI6osg*7?7cSOFS&Cv7a>zDYn&S_l}pXl>-?)U5B)cwUw3IpVU|s{q%Y<3l{2C=mj@hU>}6QVb4WuCP6jtVnugc>Y#j71i!3`Y z2D2Z4-tva+D@(nB%=Iq`nbmPIv-$>0!~Ze4zk<$nF^~=ZB%Wh|C+C($Ry+TVXHNYl zpFfjd#}0o4@j)( z%gWq3md*V77an<_$6!MYZ9r(qH6o7gN z;2)mNcu8he3^>mRbE^JvLmG1relnKBn&3E?3;J900nY*IUQ05piz};eo&`P=lvP7L zRzN26IN^EU(sSyu)zRAza@anm9sk{t^t@P^?F8O@Da$<#ct&6^qYtXNQ}3DxuXjbZ zosaLvum$HzHrN((=Gf}^9>{YyI^ zZ#TAA)^t?~*=ERnbA>*YdK?;q*P&de%f>+6ej_E@TB=`Dl`hRV)Zx5+oL@(AP}U6G zs{-4^Cu#uWzS(^vpWg#`5wH&U#A-f&8t_%XuL8#Z7ZCzu`&i)U!+~vORSvxaez!v_ z0lP`$^prhR{ypJr$*FaxgWtLDyJcr!#{xh-9RDcjIsY?s`}9x=0QJ!SRnSwA@h|i+ zz8Z`VCI~y=8}H2e3G^I#R?QFP^>_)0>ugxEAaoR0G&ho&z>rg_loJhoS!*`YFe6_n_62NLw#}z4)07O zWHq)lw=^~+B0EC~JhcnKol!~yL0h;!91YbZZF?y7cwHU8UkVSH=76rI%wa2`h7;ys zoo$*r+%IWHovx1z?i#YpgKEMKwM7%r=H{koTXVEE+S=3?ksBk;YOCDb(9+k|rbHW~ z&24Romj0cgnzdNEy1w#7*KcaX*vVKpl}y=|E%&joVcKeVz!(nq4QslxOH-IbCFN9- zg_ThQue2O&TdstsaT_6l%u;n36?tz+w^wwi2PL`R{6Yn|+AeG~S7r$KszJHQ_I4x(xQAROb4sKyjOXR{vY zU@gg>_A|nrT#@Qc_LTqExP6@K(f&wy#$%7)Z20XHz{8r*{_WpaCPC%}dOr|Og3xO} z#T^hn?b{$J4;m8>{Lwzb8GG;}69B^dU2^T0o*&^6kYJzcSLk~i8o=-WxX=C~_fPmd z8FEbZBldI9@vcAr_d*k-$g$u5i@@IijmkvtWBQ(l>P*9sf5JZn0p?HkbT565er}z1!dkw?Bjz%6Jd%|yl4DIVZI!-s_ cGNyfe)J5=OirtmCztbTXzwKp0pX`YJ4}78CW&i*H literal 10064 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�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 QK$&SIpB@c=C-d$90zQwwjQ{`u diff --git a/app/src/main/jniLibs/x86/libbinexecutor.so b/app/src/main/jniLibs/x86/libbinexecutor.so index b1175d6c21db7ba056e2643eba53fcf8a3aaed26..441575ff8262e32d76a56711277d22f03567d531 100644 GIT binary patch literal 5564 zcmeHLZ){W76~88iy2XIkWh_9|K2eXsHk|*71DXnH657g4NlF|lw!OXBFR{V#%buT8 zs8CB~vdwj^rQN3WLqE__Q9e|n-Oz?qG-U!oD@_}d=%#AZKq^pYjiw+m+HI_Fzu$Yl z!7tB3|{<a6xQO$4w&{7oS7lY-(K4 zE<}rJZLLk=#+LR)=`N&1-)eyxV8_=6#MR8j6YpIQ-v98M&+qv1Yd^WR?#X8-s^>8V z+3rPWvt&TYf3=E_RPnp2_&rs;R>d!^SdjMDRPpuX6?alVT(>)`_}@Zw88@Ja@q5Jz z(N-llAwLAU3QGAA>fa^Ai)H=+=x+o6LYWt;8r!d_nx*egS|ajj=ffhE9Eyc92I){T zt?$=kS<5gv5>FXpdYXcGio82_IGNT`$)|LPb<;FVF{-6fMhtA`z$kPwmKNKm#uEF~ zVJ(>wk7?tYn$|6KU))m1jJ?`;O3S8W3AGb;%mdx!^)MlxG#9O1c5Si7-KcbTN%*L_ z+gME*BkGu$Ok2WTK4zrHb<q2=@+2+5SV}1Z7E;_s4oq6m17Y{Za`^ByIzP~1 zOB~5((dSvA0I?Ocyu^tI9Y@YHhjKPoUNa}>xksN)mFej+{nG>R9l=~CML<_b5lo2` zOU#fW;8{`xdxI2)J|;zAw@4XiMYDg#tk_4n9-DoX8A`A_ec47kN-q->PhW6&Mw{T^ z^pwNbk>_Rl4Tryvyh8qn!?T;%NPg1cgX9~?A98q#5@GUV4*wPM+sJ~ES}uJ6ckT?kz^tN9{TV8A$7<8#ruPNmecH= zzg+%fxmacVio8FURwMqbudocU77OPQOkdRQt)s!Npr6BTTB7!3Ir|t76jr+FkKRuI zc_z!#Tl(OZ>rPj&)|ow+|A_kt^ULv<-h~D-`5;%!%`$yZP)dKjJ+bstN5$&MpDX6B zG0g?0IojKYEFW|A3U|SUC}!3U+Pz`;dx{k$W2Mwr*cr(Grf=}}mg@@EIf7`#*tyDW zxYo5jar5a&{(9rhd?e^+xaD0`UNRfNbh#B*xrrE@OGF_O4CK9UvewY`_jFv(GBu1b zXzvOJ;pudgo{o$84>{3;C!!u#EJJZ0V9FOVTL6KlqE?^M(j)Z)>5OJ2Gs8(e9!aM6 zbvsX3=jteqYRNSBkvyY4PxTAWL7!)x-|PJz&QP94Jh65oNN{?oP_ zKpWuuZcxU+v$p|j9|v_NetP*d1OF!(;QP}Q-g6ECeD}M6_Z~cF#3KM69pZTu2hRh( zI}#Rnerw>dEco8WnnURroC_0T7WK*ZOTP55u4t6+oKIl!IsVl&V49Shf+1_uqaB^8OP()XaSG1H5k+X z+W5UJ+fCS6h5%Os8-O;T2Z#d0z&Id3V3mz+Ev+r>?aj)NmcfZ^q!qKdt+lPWG1jz6 ziSZ~_@FkE*LeLRv2!)l63CkMGY^kp=e>;Rm3}YmvXN;^F(?c<1wB9m|6uugg>H1V^ ze01}eY3$WwmeLW9g8_g@Pj7?mbjiJUS@FJ8+WGvIthD0cBSb9i$n2hWAvT?^o z(%H~ZHkpcV#@Bl&ejv?{HHTWJ2vM5QG6}a=4tyS?VivW^G8L0dJw*dj_ogWCJ z-z>dk1{T%0=lQL~eI|cPd8uNi+CO0=AJe=k2OW`cN@w<9LgHo z0aiZbqw{nIM8*zqFArgW6cuV(5D{9NZFnQxK}yGvxwkXROuhjh(iGNIsu+x z1kW_;@%JU#quybFIb!)gEBd$Fq`{m5V|~J+|)y)Z_gd!@)-kpf4L` z#E;9Aal8#3qJ+L|T$Ak;fcn&{{0$DQ)1=-BaMYtq&ToM@Jf)0^vVR(Ve#cXfXX+{F zF%Pm)k9ZqkPN?Vnb_hMW|1jj}aNh3#xh|g_7iheq$#s8^v1+}B1@tbJ_2y(q?9VIo fXoFy`SZ}hOf*$vkY;s+>rX0TrJzFxMl(YRCqqJr! literal 9704 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 literal 10336 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