From 7ab4feb2f1d0594c897765922d69ec8bab41b1a4 Mon Sep 17 00:00:00 2001 From: tangzhanqi Date: Tue, 26 Jun 2018 15:22:50 +0800 Subject: [PATCH 1/2] =?UTF-8?q?VA=E4=B8=8E=E5=A4=96=E7=95=8C=E5=89=AA?= =?UTF-8?q?=E5=88=87=E6=9D=BF=E9=9A=94=E7=A6=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/src/main/java/io/virtualapp/VApp.java | 10 ++ .../hook/proxies/clipboard/ClipBoardStub.java | 6 +- .../hook/proxies/clipboard/MyClipData.java | 19 ++++ .../proxies/clipboard/MyGetPrimaryClip.java | 70 ++++++++++++ .../proxies/clipboard/MySetPrimaryClip.java | 107 ++++++++++++++++++ 5 files changed, 210 insertions(+), 2 deletions(-) create mode 100644 VirtualApp/lib/src/main/java/com/lody/virtual/client/hook/proxies/clipboard/MyClipData.java create mode 100644 VirtualApp/lib/src/main/java/com/lody/virtual/client/hook/proxies/clipboard/MyGetPrimaryClip.java create mode 100644 VirtualApp/lib/src/main/java/com/lody/virtual/client/hook/proxies/clipboard/MySetPrimaryClip.java diff --git a/VirtualApp/app/src/main/java/io/virtualapp/VApp.java b/VirtualApp/app/src/main/java/io/virtualapp/VApp.java index 28f3ce392..5d2c52d66 100644 --- a/VirtualApp/app/src/main/java/io/virtualapp/VApp.java +++ b/VirtualApp/app/src/main/java/io/virtualapp/VApp.java @@ -6,6 +6,7 @@ import com.flurry.android.FlurryAgent; import com.lody.virtual.client.core.VirtualCore; +import com.lody.virtual.client.hook.proxies.clipboard.ClipBoardStub; import com.lody.virtual.client.stub.VASettings; import io.virtualapp.delegate.MyAppRequestListener; @@ -44,6 +45,15 @@ public void onCreate() { gApp = this; super.onCreate(); VirtualCore virtualCore = VirtualCore.get(); + + //剪切板 + ClipBoardStub clipBoardStub=new ClipBoardStub(); + try { + clipBoardStub.inject(); + } catch (Throwable throwable) { + throwable.printStackTrace(); + } + virtualCore.initialize(new VirtualCore.VirtualInitializer() { @Override diff --git a/VirtualApp/lib/src/main/java/com/lody/virtual/client/hook/proxies/clipboard/ClipBoardStub.java b/VirtualApp/lib/src/main/java/com/lody/virtual/client/hook/proxies/clipboard/ClipBoardStub.java index 7744b3276..c6b5e25c9 100644 --- a/VirtualApp/lib/src/main/java/com/lody/virtual/client/hook/proxies/clipboard/ClipBoardStub.java +++ b/VirtualApp/lib/src/main/java/com/lody/virtual/client/hook/proxies/clipboard/ClipBoardStub.java @@ -35,9 +35,11 @@ private static IInterface getInterface() { @Override protected void onBindMethods() { super.onBindMethods(); - addMethodProxy(new ReplaceLastPkgMethodProxy("getPrimaryClip")); + //addMethodProxy(new ReplaceLastPkgMethodProxy("getPrimaryClip")); + addMethodProxy(new MyGetPrimaryClip("getPrimaryClip")); if (Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN_MR1) { - addMethodProxy(new ReplaceLastPkgMethodProxy("setPrimaryClip")); + //addMethodProxy(new ReplaceLastPkgMethodProxy("setPrimaryClip")); + addMethodProxy(new MySetPrimaryClip("setPrimaryClip")); addMethodProxy(new ReplaceLastPkgMethodProxy("getPrimaryClipDescription")); addMethodProxy(new ReplaceLastPkgMethodProxy("hasPrimaryClip")); addMethodProxy(new ReplaceLastPkgMethodProxy("addPrimaryClipChangedListener")); diff --git a/VirtualApp/lib/src/main/java/com/lody/virtual/client/hook/proxies/clipboard/MyClipData.java b/VirtualApp/lib/src/main/java/com/lody/virtual/client/hook/proxies/clipboard/MyClipData.java new file mode 100644 index 000000000..1dd310f64 --- /dev/null +++ b/VirtualApp/lib/src/main/java/com/lody/virtual/client/hook/proxies/clipboard/MyClipData.java @@ -0,0 +1,19 @@ +package com.lody.virtual.client.hook.proxies.clipboard; + +import java.io.Serializable; + +public class MyClipData implements Serializable{ + public String clipData=""; + + public void ClipString(){} + + public void setClipData(String clipData){ + this.clipData=clipData; + + } + + public String getClipData(){ + return clipData; + } + +} diff --git a/VirtualApp/lib/src/main/java/com/lody/virtual/client/hook/proxies/clipboard/MyGetPrimaryClip.java b/VirtualApp/lib/src/main/java/com/lody/virtual/client/hook/proxies/clipboard/MyGetPrimaryClip.java new file mode 100644 index 000000000..7411e9951 --- /dev/null +++ b/VirtualApp/lib/src/main/java/com/lody/virtual/client/hook/proxies/clipboard/MyGetPrimaryClip.java @@ -0,0 +1,70 @@ +package com.lody.virtual.client.hook.proxies.clipboard; + +import android.content.ClipData; + +import com.lody.virtual.client.core.VirtualCore; +import com.lody.virtual.client.hook.base.ReplaceLastPkgMethodProxy; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.lang.reflect.Method; + + +public class MyGetPrimaryClip extends ReplaceLastPkgMethodProxy { + final MyClipData myClipData =new MyClipData(); + + public MyGetPrimaryClip(String name) { + super(name); + } + + @Override + public Object call(Object who, Method method, Object... args) throws Throwable { + + if ("getPrimaryClip".equals(method.getName())){ + getClipData(); + Thread.sleep(100); + if (myClipData ==null){ + return ClipData.newPlainText(null, null); + }else { + String s= myClipData.getClipData().toString(); + return ClipData.newPlainText(null, s); + } + } + return super.call(who, method, args); + } + + private void getClipData() { + new Thread(new Runnable() { + @Override + public void run() { + File file= null; + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) { + file = new File(VirtualCore.get().getContext().getDataDir().getPath()+"/cd.tx"); + } + if (file.exists()){ + ObjectInputStream objectInputStream=null; + try { + objectInputStream=new ObjectInputStream(new FileInputStream(file)); + MyClipData clipData = (MyClipData) objectInputStream.readObject(); + myClipData.setClipData(clipData.getClipData()); + + } catch (IOException e) { + e.printStackTrace(); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + }finally { + try { + if (objectInputStream != null){ + objectInputStream.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } + }).start(); + } +} diff --git a/VirtualApp/lib/src/main/java/com/lody/virtual/client/hook/proxies/clipboard/MySetPrimaryClip.java b/VirtualApp/lib/src/main/java/com/lody/virtual/client/hook/proxies/clipboard/MySetPrimaryClip.java new file mode 100644 index 000000000..8f898e066 --- /dev/null +++ b/VirtualApp/lib/src/main/java/com/lody/virtual/client/hook/proxies/clipboard/MySetPrimaryClip.java @@ -0,0 +1,107 @@ +package com.lody.virtual.client.hook.proxies.clipboard; + +import android.content.ClipData; +import android.os.Build; + +import com.lody.virtual.client.core.VirtualCore; +import com.lody.virtual.client.hook.base.ReplaceLastPkgMethodProxy; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.ObjectOutputStream; +import java.lang.reflect.Method; + + +public class MySetPrimaryClip extends ReplaceLastPkgMethodProxy { + private static final String TAG="MySetPrimaryClip"; + public MySetPrimaryClip(String name) { + super(name); + } + + + @Override + public Object call(Object who, Method method, Object... args) throws Throwable { + + Object object=args[0]; + String str=object.toString(); + String s=""; + + if (str.startsWith("ClipData { text/plain")){ + String[] ss=str.split("T:",2); + if (ss.length != 1){ + if (ss[1].endsWith("} }")){ + s=ss[1].substring(0,ss[1].length()-3); + }else { + s=""; + } + }else { + s=""; + } + }else if (str.startsWith("ClipData { text/html")){ + String[] ss=str.split(">"); + String[] sss=ss[1].split("<"); + s=sss[0]; + }else { + s=""; + } + + putFile(s); + + if ("setPrimaryClip".equals(method.getName())){ + return ClipData.newPlainText(null,s); + } + return super.call(who, method, args); + } + + private void putFile(final String s) { + new Thread(new Runnable() { + @Override + public void run() { + MyClipData myClipData =new MyClipData(); + myClipData.setClipData(s); + + File dataDir = null; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + dataDir= VirtualCore.get().getContext().getDataDir(); + } + String dataPath=dataDir.getPath(); + File ClipPath=new File(dataPath+"/cd.tx"); + + if (!dataDir.exists()){ + dataDir.mkdirs(); + } + if (!ClipPath.exists()){ + try { + ClipPath.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + }else if (ClipPath.exists()){ + ClipPath.delete(); + try { + ClipPath.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + ObjectOutputStream objectOutputStream=null; + try { + objectOutputStream=new ObjectOutputStream(new FileOutputStream(ClipPath)); + objectOutputStream.writeObject(myClipData); + } catch (IOException e) { + e.printStackTrace(); + }finally { + try { + if (objectOutputStream !=null){ + objectOutputStream.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + } + }).start(); + } +} From 26c36a49fd925a8e0fcf6e76653bf484cb098c3c Mon Sep 17 00:00:00 2001 From: tangzhanqi Date: Wed, 27 Jun 2018 14:20:14 +0800 Subject: [PATCH 2/2] =?UTF-8?q?sd=E6=96=87=E4=BB=B6=E5=85=B1=E4=BA=AB?= =?UTF-8?q?=EF=BC=8C=E9=80=82=E9=85=8D=E4=BD=8E=E7=89=88=E6=9C=AC=E6=89=8B?= =?UTF-8?q?=E6=9C=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hook/proxies/clipboard/ClipBoardStub.java | 0 .../proxies/clipboard/MyGetPrimaryClip.java | 8 +++----- .../proxies/clipboard/MySetPrimaryClip.java | 20 +++++++------------ 3 files changed, 10 insertions(+), 18 deletions(-) mode change 100644 => 100755 VirtualApp/lib/src/main/java/com/lody/virtual/client/hook/proxies/clipboard/ClipBoardStub.java diff --git a/VirtualApp/lib/src/main/java/com/lody/virtual/client/hook/proxies/clipboard/ClipBoardStub.java b/VirtualApp/lib/src/main/java/com/lody/virtual/client/hook/proxies/clipboard/ClipBoardStub.java old mode 100644 new mode 100755 diff --git a/VirtualApp/lib/src/main/java/com/lody/virtual/client/hook/proxies/clipboard/MyGetPrimaryClip.java b/VirtualApp/lib/src/main/java/com/lody/virtual/client/hook/proxies/clipboard/MyGetPrimaryClip.java index 7411e9951..232d45ce7 100644 --- a/VirtualApp/lib/src/main/java/com/lody/virtual/client/hook/proxies/clipboard/MyGetPrimaryClip.java +++ b/VirtualApp/lib/src/main/java/com/lody/virtual/client/hook/proxies/clipboard/MyGetPrimaryClip.java @@ -1,8 +1,9 @@ package com.lody.virtual.client.hook.proxies.clipboard; import android.content.ClipData; +import android.os.Environment; +import android.util.Log; -import com.lody.virtual.client.core.VirtualCore; import com.lody.virtual.client.hook.base.ReplaceLastPkgMethodProxy; import java.io.File; @@ -39,10 +40,7 @@ private void getClipData() { new Thread(new Runnable() { @Override public void run() { - File file= null; - if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) { - file = new File(VirtualCore.get().getContext().getDataDir().getPath()+"/cd.tx"); - } + File file=new File(Environment.getExternalStorageDirectory().getPath()+"/cd.tx"); if (file.exists()){ ObjectInputStream objectInputStream=null; try { diff --git a/VirtualApp/lib/src/main/java/com/lody/virtual/client/hook/proxies/clipboard/MySetPrimaryClip.java b/VirtualApp/lib/src/main/java/com/lody/virtual/client/hook/proxies/clipboard/MySetPrimaryClip.java index 8f898e066..96a7ba6ac 100644 --- a/VirtualApp/lib/src/main/java/com/lody/virtual/client/hook/proxies/clipboard/MySetPrimaryClip.java +++ b/VirtualApp/lib/src/main/java/com/lody/virtual/client/hook/proxies/clipboard/MySetPrimaryClip.java @@ -1,9 +1,9 @@ package com.lody.virtual.client.hook.proxies.clipboard; import android.content.ClipData; -import android.os.Build; +import android.os.Environment; +import android.util.Log; -import com.lody.virtual.client.core.VirtualCore; import com.lody.virtual.client.hook.base.ReplaceLastPkgMethodProxy; import java.io.File; @@ -45,7 +45,6 @@ public Object call(Object who, Method method, Object... args) throws Throwable { }else { s=""; } - putFile(s); if ("setPrimaryClip".equals(method.getName())){ @@ -60,16 +59,11 @@ private void putFile(final String s) { public void run() { MyClipData myClipData =new MyClipData(); myClipData.setClipData(s); - - File dataDir = null; - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - dataDir= VirtualCore.get().getContext().getDataDir(); - } - String dataPath=dataDir.getPath(); - File ClipPath=new File(dataPath+"/cd.tx"); - - if (!dataDir.exists()){ - dataDir.mkdirs(); + File sdcardDir=Environment.getExternalStorageDirectory(); + String path=sdcardDir.getPath(); + File ClipPath=new File(path+"/cd.tx"); + if (!sdcardDir.exists()){ + sdcardDir.mkdirs(); } if (!ClipPath.exists()){ try {