├── README.md
├── ReforceApk
├── .gitignore
├── .idea
│ ├── gradle.xml
│ ├── misc.xml
│ └── runConfigurations.xml
├── app
│ ├── .gitignore
│ ├── build.gradle
│ ├── proguard-rules.pro
│ └── src
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ ├── java
│ │ └── com
│ │ │ └── reforce
│ │ │ └── shell
│ │ │ ├── ApplicationProxy.java
│ │ │ ├── Constant.java
│ │ │ ├── DexFile.java
│ │ │ ├── LogUtils.java
│ │ │ ├── MainActivity.java
│ │ │ ├── RefInvoke.java
│ │ │ └── SecurityUtils.java
│ │ └── res
│ │ ├── drawable
│ │ └── ic_launcher_background.xml
│ │ ├── layout
│ │ └── activity_main.xml
│ │ └── values
│ │ ├── colors.xml
│ │ ├── strings.xml
│ │ └── styles.xml
├── build.gradle
├── gradle.properties
├── gradle
│ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── settings.gradle
├── demo
├── .gitignore
├── app
│ ├── .gitignore
│ ├── build.gradle
│ ├── proguard-rules.pro
│ └── src
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ ├── java
│ │ └── com
│ │ │ ├── test
│ │ │ ├── Test1.java
│ │ │ ├── Test10.java
│ │ │ ├── Test100.java
│ │ │ ├── Test101.java
│ │ │ ├── Test102.java
│ │ │ ├── Test103.java
│ │ │ ├── Test104.java
│ │ │ ├── Test105.java
│ │ │ ├── Test106.java
│ │ │ ├── Test107.java
│ │ │ ├── Test108.java
│ │ │ ├── Test109.java
│ │ │ ├── Test11.java
│ │ │ ├── Test110.java
│ │ │ ├── Test111.java
│ │ │ ├── Test112.java
│ │ │ ├── Test113.java
│ │ │ ├── Test114.java
│ │ │ ├── Test115.java
│ │ │ ├── Test116.java
│ │ │ ├── Test117.java
│ │ │ ├── Test118.java
│ │ │ ├── Test119.java
│ │ │ ├── Test12.java
│ │ │ ├── Test120.java
│ │ │ ├── Test121.java
│ │ │ ├── Test122.java
│ │ │ ├── Test123.java
│ │ │ ├── Test124.java
│ │ │ ├── Test125.java
│ │ │ ├── Test126.java
│ │ │ ├── Test127.java
│ │ │ ├── Test128.java
│ │ │ ├── Test129.java
│ │ │ ├── Test13.java
│ │ │ ├── Test130.java
│ │ │ ├── Test131.java
│ │ │ ├── Test132.java
│ │ │ ├── Test133.java
│ │ │ ├── Test134.java
│ │ │ ├── Test135.java
│ │ │ ├── Test136.java
│ │ │ ├── Test137.java
│ │ │ ├── Test138.java
│ │ │ ├── Test139.java
│ │ │ ├── Test14.java
│ │ │ ├── Test140.java
│ │ │ ├── Test141.java
│ │ │ ├── Test142.java
│ │ │ ├── Test143.java
│ │ │ ├── Test144.java
│ │ │ ├── Test145.java
│ │ │ ├── Test146.java
│ │ │ ├── Test147.java
│ │ │ ├── Test148.java
│ │ │ ├── Test149.java
│ │ │ ├── Test15.java
│ │ │ ├── Test150.java
│ │ │ ├── Test151.java
│ │ │ ├── Test152.java
│ │ │ ├── Test153.java
│ │ │ ├── Test154.java
│ │ │ ├── Test155.java
│ │ │ ├── Test156.java
│ │ │ ├── Test157.java
│ │ │ ├── Test158.java
│ │ │ ├── Test159.java
│ │ │ ├── Test16.java
│ │ │ ├── Test160.java
│ │ │ ├── Test161.java
│ │ │ ├── Test162.java
│ │ │ ├── Test163.java
│ │ │ ├── Test164.java
│ │ │ ├── Test165.java
│ │ │ ├── Test166.java
│ │ │ ├── Test167.java
│ │ │ ├── Test168.java
│ │ │ ├── Test169.java
│ │ │ ├── Test17.java
│ │ │ ├── Test170.java
│ │ │ ├── Test171.java
│ │ │ ├── Test172.java
│ │ │ ├── Test173.java
│ │ │ ├── Test174.java
│ │ │ ├── Test175.java
│ │ │ ├── Test176.java
│ │ │ ├── Test177.java
│ │ │ ├── Test178.java
│ │ │ ├── Test179.java
│ │ │ ├── Test18.java
│ │ │ ├── Test180.java
│ │ │ ├── Test181.java
│ │ │ ├── Test182.java
│ │ │ ├── Test183.java
│ │ │ ├── Test184.java
│ │ │ ├── Test185.java
│ │ │ ├── Test186.java
│ │ │ ├── Test187.java
│ │ │ ├── Test188.java
│ │ │ ├── Test189.java
│ │ │ ├── Test19.java
│ │ │ ├── Test190.java
│ │ │ ├── Test191.java
│ │ │ ├── Test192.java
│ │ │ ├── Test193.java
│ │ │ ├── Test194.java
│ │ │ ├── Test195.java
│ │ │ ├── Test196.java
│ │ │ ├── Test197.java
│ │ │ ├── Test198.java
│ │ │ ├── Test199.java
│ │ │ ├── Test2.java
│ │ │ ├── Test20.java
│ │ │ ├── Test200.java
│ │ │ ├── Test201.java
│ │ │ ├── Test202.java
│ │ │ ├── Test203.java
│ │ │ ├── Test204.java
│ │ │ ├── Test205.java
│ │ │ ├── Test206.java
│ │ │ ├── Test207.java
│ │ │ ├── Test208.java
│ │ │ ├── Test209.java
│ │ │ ├── Test21.java
│ │ │ ├── Test210.java
│ │ │ ├── Test211.java
│ │ │ ├── Test212.java
│ │ │ ├── Test213.java
│ │ │ ├── Test214.java
│ │ │ ├── Test215.java
│ │ │ ├── Test216.java
│ │ │ ├── Test217.java
│ │ │ ├── Test218.java
│ │ │ ├── Test219.java
│ │ │ ├── Test22.java
│ │ │ ├── Test220.java
│ │ │ ├── Test221.java
│ │ │ ├── Test222.java
│ │ │ ├── Test223.java
│ │ │ ├── Test224.java
│ │ │ ├── Test225.java
│ │ │ ├── Test226.java
│ │ │ ├── Test227.java
│ │ │ ├── Test228.java
│ │ │ ├── Test229.java
│ │ │ ├── Test23.java
│ │ │ ├── Test230.java
│ │ │ ├── Test231.java
│ │ │ ├── Test232.java
│ │ │ ├── Test233.java
│ │ │ ├── Test234.java
│ │ │ ├── Test235.java
│ │ │ ├── Test236.java
│ │ │ ├── Test237.java
│ │ │ ├── Test238.java
│ │ │ ├── Test239.java
│ │ │ ├── Test24.java
│ │ │ ├── Test240.java
│ │ │ ├── Test241.java
│ │ │ ├── Test242.java
│ │ │ ├── Test243.java
│ │ │ ├── Test244.java
│ │ │ ├── Test245.java
│ │ │ ├── Test246.java
│ │ │ ├── Test247.java
│ │ │ ├── Test248.java
│ │ │ ├── Test249.java
│ │ │ ├── Test25.java
│ │ │ ├── Test250.java
│ │ │ ├── Test251.java
│ │ │ ├── Test252.java
│ │ │ ├── Test253.java
│ │ │ ├── Test254.java
│ │ │ ├── Test255.java
│ │ │ ├── Test256.java
│ │ │ ├── Test257.java
│ │ │ ├── Test258.java
│ │ │ ├── Test259.java
│ │ │ ├── Test26.java
│ │ │ ├── Test260.java
│ │ │ ├── Test261.java
│ │ │ ├── Test262.java
│ │ │ ├── Test263.java
│ │ │ ├── Test264.java
│ │ │ ├── Test265.java
│ │ │ ├── Test266.java
│ │ │ ├── Test267.java
│ │ │ ├── Test268.java
│ │ │ ├── Test269.java
│ │ │ ├── Test27.java
│ │ │ ├── Test270.java
│ │ │ ├── Test271.java
│ │ │ ├── Test272.java
│ │ │ ├── Test273.java
│ │ │ ├── Test274.java
│ │ │ ├── Test275.java
│ │ │ ├── Test276.java
│ │ │ ├── Test277.java
│ │ │ ├── Test278.java
│ │ │ ├── Test279.java
│ │ │ ├── Test28.java
│ │ │ ├── Test280.java
│ │ │ ├── Test281.java
│ │ │ ├── Test282.java
│ │ │ ├── Test283.java
│ │ │ ├── Test284.java
│ │ │ ├── Test285.java
│ │ │ ├── Test286.java
│ │ │ ├── Test287.java
│ │ │ ├── Test288.java
│ │ │ ├── Test289.java
│ │ │ ├── Test29.java
│ │ │ ├── Test290.java
│ │ │ ├── Test291.java
│ │ │ ├── Test292.java
│ │ │ ├── Test293.java
│ │ │ ├── Test294.java
│ │ │ ├── Test295.java
│ │ │ ├── Test296.java
│ │ │ ├── Test297.java
│ │ │ ├── Test298.java
│ │ │ ├── Test299.java
│ │ │ ├── Test3.java
│ │ │ ├── Test30.java
│ │ │ ├── Test31.java
│ │ │ ├── Test32.java
│ │ │ ├── Test33.java
│ │ │ ├── Test34.java
│ │ │ ├── Test35.java
│ │ │ ├── Test36.java
│ │ │ ├── Test37.java
│ │ │ ├── Test38.java
│ │ │ ├── Test39.java
│ │ │ ├── Test4.java
│ │ │ ├── Test40.java
│ │ │ ├── Test41.java
│ │ │ ├── Test42.java
│ │ │ ├── Test43.java
│ │ │ ├── Test44.java
│ │ │ ├── Test45.java
│ │ │ ├── Test46.java
│ │ │ ├── Test47.java
│ │ │ ├── Test48.java
│ │ │ ├── Test49.java
│ │ │ ├── Test5.java
│ │ │ ├── Test50.java
│ │ │ ├── Test51.java
│ │ │ ├── Test52.java
│ │ │ ├── Test53.java
│ │ │ ├── Test54.java
│ │ │ ├── Test55.java
│ │ │ ├── Test56.java
│ │ │ ├── Test57.java
│ │ │ ├── Test58.java
│ │ │ ├── Test59.java
│ │ │ ├── Test6.java
│ │ │ ├── Test60.java
│ │ │ ├── Test61.java
│ │ │ ├── Test62.java
│ │ │ ├── Test63.java
│ │ │ ├── Test64.java
│ │ │ ├── Test65.java
│ │ │ ├── Test66.java
│ │ │ ├── Test67.java
│ │ │ ├── Test68.java
│ │ │ ├── Test69.java
│ │ │ ├── Test7.java
│ │ │ ├── Test70.java
│ │ │ ├── Test71.java
│ │ │ ├── Test72.java
│ │ │ ├── Test73.java
│ │ │ ├── Test74.java
│ │ │ ├── Test75.java
│ │ │ ├── Test76.java
│ │ │ ├── Test77.java
│ │ │ ├── Test78.java
│ │ │ ├── Test79.java
│ │ │ ├── Test8.java
│ │ │ ├── Test80.java
│ │ │ ├── Test81.java
│ │ │ ├── Test82.java
│ │ │ ├── Test83.java
│ │ │ ├── Test84.java
│ │ │ ├── Test85.java
│ │ │ ├── Test86.java
│ │ │ ├── Test87.java
│ │ │ ├── Test88.java
│ │ │ ├── Test89.java
│ │ │ ├── Test9.java
│ │ │ ├── Test90.java
│ │ │ ├── Test91.java
│ │ │ ├── Test92.java
│ │ │ ├── Test93.java
│ │ │ ├── Test94.java
│ │ │ ├── Test95.java
│ │ │ ├── Test96.java
│ │ │ ├── Test97.java
│ │ │ ├── Test98.java
│ │ │ └── Test99.java
│ │ │ └── xiyou
│ │ │ └── demo
│ │ │ ├── MainActivity.java
│ │ │ └── MyApplication.java
│ │ └── res
│ │ ├── drawable
│ │ ├── a.jpg
│ │ ├── app_icon.png
│ │ ├── b.jpg
│ │ ├── c.jpg
│ │ ├── e.jpg
│ │ ├── f.jpg
│ │ ├── g.jpg
│ │ ├── h.jpg
│ │ └── i.jpg
│ │ └── layout
│ │ └── activity_main.xml
├── build.gradle
├── gradle.properties
├── gradle
│ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── settings.gradle
├── img
├── dex_structure.png
└── effect.jpg
├── shell_util
├── .idea
│ ├── compiler.xml
│ ├── description.html
│ ├── encodings.xml
│ ├── libraries
│ │ └── fastjson_1_2_29.xml
│ ├── misc.xml
│ ├── modules.xml
│ ├── vcs.xml
│ └── workspace.xml
├── libs
│ └── fastjson-1.2.29.jar
├── out
│ └── production
│ │ └── shell_util
│ │ └── com
│ │ ├── test
│ │ └── Main.class
│ │ └── utils
│ │ ├── AndroidXmlUtils.class
│ │ ├── ApkShellUtils.class
│ │ ├── ApkToolUtils.class
│ │ ├── CmdExecutor$StreamGobbler.class
│ │ ├── CmdExecutor.class
│ │ ├── Constant.class
│ │ ├── DexFile.class
│ │ ├── FileUtils.class
│ │ ├── SecurityUtils.class
│ │ ├── SignUtils$Keystore.class
│ │ └── SignUtils.class
├── shell_util.iml
├── src
│ └── com
│ │ ├── test
│ │ └── Main.java
│ │ └── utils
│ │ ├── AndroidXmlUtils.java
│ │ ├── ApkShellUtils.java
│ │ ├── ApkToolUtils.java
│ │ ├── CmdExecutor.java
│ │ ├── Constant.java
│ │ ├── DexFile.java
│ │ ├── FileUtils.java
│ │ ├── SecurityUtils.java
│ │ └── SignUtils.java
└── tools
│ ├── apktool
│ └── apktool.jar
│ └── keystore
│ └── test.keystore
└── 项目介绍.txt
/README.md:
--------------------------------------------------------------------------------
1 | # Android apk加固(加壳)整理 #
2 |
3 | **一、Dex加壳由来**
4 |
5 | 最近在学习apk加密,在网上看了一篇《[Android中的Apk的加固(加壳)原理解析和实现](https://blog.csdn.net/jiangwei0910410003/article/details/48415225)》,我发现原文把整个apk都写入到dex文件中,如果apk小还好,当原APK大于200M,客户端解壳很费劲,打开后应用就卡住了,如果只是把原apk的dex加壳不就很容易解开了嘛。我不是原创,只是按照我自己的思路将大神的加固稍作调整,并且将整个项目整理如下。
6 |
7 | **二、Dex结构**
8 | 
9 | 如图所示,新的dex由解壳dex、dex集合、dex集合描述和描述长度组成
10 |
11 | **三、核心代码**
12 |
13 |
14 | - 加壳
15 |
16 | /**
17 | * 给apk加壳
18 | * @param primaryApkPath 原apk
19 | * @param unShellApkPath 解壳apk
20 | * @param outApkPath 加壳后新APK
21 | * @throws Exception
22 | */
23 | public static void apkShell(String primaryApkPath,String unShellApkPath,String outApkPath) throws Exception{
24 | if(!FileUtils.isExit(primaryApkPath, unShellApkPath)){
25 | throw new RuntimeException("check params");
26 | }
27 | //解压原apk
28 | String unPrimaryApkDstPath = primaryApkPath.replace(".apk", "");
29 | ApkToolUtils.decompile(primaryApkPath, unPrimaryApkDstPath);
30 | String primaryManifestPath = unPrimaryApkDstPath + File.separator + "AndroidManifest.xml";
31 |
32 | //解压解壳apk
33 | String unShellApkDstPath = unShellApkPath.replace(".apk", "");
34 | ApkToolUtils.decompile(unShellApkPath, unShellApkDstPath);
35 | String unShellManifestPath = unShellApkDstPath + File.separator + "AndroidManifest.xml";
36 | String unShellDexPath = unShellApkDstPath + File.separator + "classes.dex";
37 | File unShellFile = new File(unShellDexPath);
38 |
39 |
40 | File unApkDir = new File(unPrimaryApkDstPath);
41 | ArrayList<File> dexArray = new ArrayList<File>();
42 | for(File file : unApkDir.listFiles()){//读取解壳后的dex
43 | if(file.getName().endsWith(".dex")){
44 | dexArray.add(file);
45 | }
46 | }
47 | String shellDexPath = unPrimaryApkDstPath + File.separator + "classes.dex";
48 | shellDex(dexArray, unShellFile, shellDexPath);//生产新的dex(加壳)
49 |
50 | String mateInfPath = unPrimaryApkDstPath + File.separator +"META-INF";//删除meta-inf,重新签名后会生成
51 | FileUtils.delete(mateInfPath);
52 |
53 | for(File file : dexArray){//清理多余dex文件
54 | if(file.getName().equals("classes.dex")){
55 | continue;
56 | }
57 | FileUtils.delete(file.getAbsolutePath());
58 | }
59 |
60 | String unShellApplicationName = AndroidXmlUtils.readApplicationName(unShellManifestPath);//解壳ApplicationName
61 | String primaryApplicationName = AndroidXmlUtils.readApplicationName(primaryManifestPath);//原applicationName
62 | AndroidXmlUtils.changeApplicationName(primaryManifestPath, unShellApplicationName);//改变原Applicationname为解壳ApplicationName
63 | if(primaryApplicationName != null){//将原ApplicationName写入mateData中,解壳application中会读取并替换应用Application
64 | AndroidXmlUtils.addMateData(primaryManifestPath, "APPLICATION_CLASS_NAME", primaryApplicationName);
65 | }
66 | //回编,回编系统最好是linux
67 | ApkToolUtils.compile(unPrimaryApkDstPath,outApkPath);
68 | //v1签名
69 | SignUtils.V1(outApkPath, SignUtils.getDefaultKeystore());
70 | //清理目录
71 | FileUtils.delete(unPrimaryApkDstPath);
72 | FileUtils.delete(unShellApkDstPath);
73 | }
74 |
75 | /**
76 | * 给dex加壳
77 | * @param primaryDexs 原dex集合
78 | * @param unShellDex 解壳dex
79 | * @param shellDexPath 生成新的dex路径
80 | * @throws IOException
81 | * @throws NoSuchAlgorithmException
82 | * @throws InvalidKeyException
83 | * @throws BadPaddingException
84 | * @throws NoSuchPaddingException
85 | * @throws IllegalBlockSizeException
86 | */
87 | private static void shellDex(ArrayList<File> primaryDexs, File unShellDex, String shellDexPath) throws IOException, NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, NoSuchPaddingException, IllegalBlockSizeException {
88 | int primaryDexLen = 0;
89 | ArrayList<DexFile> dexFileInfos = new ArrayList<>(primaryDexs.size());
90 | for(File file : primaryDexs){//计算所有primary的长度
91 | DexFile dexFile = new DexFile(file.getName(),encryptionAES(readFileBytes(file)));
92 | dexFileInfos.add(dexFile);
93 | primaryDexLen += dexFile.getDexLength();
94 | }
95 | byte[] unShellDexFileByte = readFileBytes(unShellDex);
96 | int unShellDexLen = unShellDexFileByte.length;//解壳dex长度
97 |
98 | String dexFileComment = JSON.toJSONString(dexFileInfos);//原dexs描述
99 | int dexFileCommentLen = dexFileComment.getBytes().length;//dexs描述长度
100 |
101 | int totalLen = primaryDexLen+dexFileCommentLen + unShellDexLen+4;//新dex总长度
102 | byte[] shellDex = new byte[totalLen];
103 |
104 | System.arraycopy(unShellDexFileByte,0,shellDex,0,unShellDexLen);//先拷贝解壳dex
105 |
106 | int currentCopyIndex = unShellDexLen;
107 | for(DexFile dexFile : dexFileInfos){//拷贝原dexs
108 | System.arraycopy(dexFile.getData(),0,shellDex,currentCopyIndex,dexFile.getDexLength());
109 | currentCopyIndex += dexFile.getDexLength();
110 | }
111 |
112 | System.arraycopy(dexFileComment.getBytes(),0,shellDex,currentCopyIndex,dexFileCommentLen);//加入dexs描述
113 |
114 | System.arraycopy(intToByte(dexFileCommentLen),0,shellDex,totalLen-4,4);//描述长度
115 | fixFileSizeHeader(shellDex);//修改dex头 file_size值
116 | fixSHA1Header(shellDex);//修改dex头 sha1值
117 | fixCheckSumHeader(shellDex);//修改dex头,CheckSum 校验码
118 |
119 | // 把内容写到 newDexFile
120 | File file = new File(shellDexPath);
121 | if (!file.exists()) {
122 | file.createNewFile();
123 | }
124 |
125 | FileOutputStream localFileOutputStream = new FileOutputStream(shellDexPath);
126 | localFileOutputStream.write(shellDex);
127 | localFileOutputStream.flush();
128 | localFileOutputStream.close();
129 | }
130 |
131 | 加壳工程是一个java工程,解压apk使用了apktool,apktool这个工具最好是在linux下使用,xml操作使用了W3C java自带的,不咋个好用,为了项目简单没用其他的jar包。加壳项目中对byte数组的加密使用了aes,也可以用其他方法去实现。
132 |
133 |
134 |
135 | - 解壳
136 |
137 |
138 | /**
139 | * 从壳的dex文件中分离出原来的dex文件
140 | * @param data
141 | * @param primaryDexDir
142 | * @throws IOException
143 | */
144 | public void splitPrimaryDexFromShellDex(byte[] data, String primaryDexDir) throws IOException, InvalidKeyException, BadPaddingException, NoSuchAlgorithmException, IllegalBlockSizeException, NoSuchPaddingException {
145 | int shellDexLen = data.length;
146 | byte[] dexFileCommentLenByte = new byte[4];//dex信息长度
147 | System.arraycopy(data, shellDexLen-4, dexFileCommentLenByte, 0, 4);
148 | ByteArrayInputStream bais = new ByteArrayInputStream(dexFileCommentLenByte);
149 | DataInputStream in = new DataInputStream(bais);
150 | int dexFileCommentLen = in.readInt();
151 |
152 | byte[] dexFileCommentByte = new byte[dexFileCommentLen];//dex信息正文
153 | System.arraycopy(data,shellDexLen-4-dexFileCommentLen,dexFileCommentByte,0,dexFileCommentLen);
154 | String dexFileComment = new String(dexFileCommentByte);
155 | LogUtils.d("dex comment:"+dexFileComment);
156 | ArrayList<DexFile> dexFileArrayList = (ArrayList<DexFile>) JSON.parseArray(dexFileComment,DexFile.class);
157 | int currentReadEndIndex = shellDexLen - 4 - dexFileCommentLen;//当前已经读取到的内容的下标
158 | for(int i = dexFileArrayList.size()-1; i>=0; i--){//取出所有的dex,并写入到payload_dex目录下
159 | DexFile dexFile = dexFileArrayList.get(i);
160 | byte[] primaryDexData = new byte[dexFile.getDexLength()];
161 | System.arraycopy(data,currentReadEndIndex-dexFile.getDexLength(),primaryDexData,0,dexFile.getDexLength());
162 | primaryDexData = decryAES(primaryDexData);//界面
163 | File primaryDexFile = new File(primaryDexDir,dexFile.getDexName());
164 | if(!primaryDexFile.exists()) primaryDexFile.createNewFile();
165 | FileOutputStream localFileOutputStream = new FileOutputStream(primaryDexFile);
166 | localFileOutputStream.write(primaryDexData);
167 | localFileOutputStream.close();
168 |
169 | currentReadEndIndex -= dexFile.getDexLength();
170 | }
171 | }
172 |
173 | //代码片段,DexClassLoder加载多个dex
174 | //找到dex并通过DexClassLoader去加载
175 | StringBuffer dexPaths = new StringBuffer();
176 | for(File file:dex.listFiles()){
177 | dexPaths.append(file.getAbsolutePath());
178 | dexPaths.append(File.pathSeparator);
179 | }
180 | dexPaths.delete(dexPaths.length()-1,dexPaths.length());
181 | LogUtils.d(dexPaths.toString());
182 | DexClassLoader classLoader = new DexClassLoader(dexPaths.toString(), odex.getAbsolutePath(),getApplicationInfo().nativeLibraryDir,(ClassLoader) RefInvoke.getFieldOjbect(
183 | "android.app.LoadedApk", wr.get(), "mClassLoader"));//android4.4后ART会对dex做优化,第一次加载时间较长,后面就很快了
184 |
185 | 将原项目dex从壳dex中获取出来,然后在onCreate中将dex拼接后使用DexClassLoder加载,nativeLibrary咋们只对dex做了加壳所以可以直接使用Application的nativeLibraryDir。
186 | 其它核心代码,application替换这类的,可以在原文中查看。
187 |
188 | **四、效果**
189 | 
190 | 从左往右分别为原demo工程的apk,为了实现多dex加了很多费代码,加壳后的apk,解壳apk。可以看出加壳后项目demo工程的dex被隐藏,显示的是解壳工程的代码
191 |
192 | **五、待优化**
193 |
194 | 1. 将客户端的解密放入native层;
195 | 2. 将解密后的dex文件隐藏;
196 |
197 |
198 | 解密后的文件依旧存于应用的私有存储空间中,ROOT了的手机和模拟器很容易就可以拿到解密后的dex,所以这种加壳方法只是将代码从apk中隐藏。
199 | 如果有好的解决方法,或者好的加壳方法望告知!
200 |
201 |
--------------------------------------------------------------------------------
/ReforceApk/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | /local.properties
4 | /.idea/caches
5 | /.idea/libraries
6 | /.idea/modules.xml
7 | /.idea/workspace.xml
8 | /.idea/navEditor.xml
9 | /.idea/assetWizardSettings.xml
10 | .DS_Store
11 | /build
12 | /captures
13 | .externalNativeBuild
14 |
--------------------------------------------------------------------------------
/ReforceApk/.idea/gradle.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
17 |
18 |
--------------------------------------------------------------------------------
/ReforceApk/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ReforceApk/.idea/runConfigurations.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/ReforceApk/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/ReforceApk/app/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.application'
2 |
3 | android {
4 | compileSdkVersion 21
5 | buildToolsVersion '25.0.2'
6 | defaultConfig {
7 | applicationId "com.reforce.shell"
8 | minSdkVersion 11
9 | targetSdkVersion 21
10 | versionCode 1
11 | versionName "1.0"
12 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
13 | }
14 | buildTypes {
15 | release {
16 | minifyEnabled false
17 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
18 | }
19 | }
20 | }
21 |
22 | dependencies {
23 | implementation fileTree(dir: 'libs', include: ['*.jar'])
24 | compile 'com.alibaba:fastjson:1.2.10'
25 | }
26 |
--------------------------------------------------------------------------------
/ReforceApk/app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
22 |
--------------------------------------------------------------------------------
/ReforceApk/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
10 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/ReforceApk/app/src/main/java/com/reforce/shell/ApplicationProxy.java:
--------------------------------------------------------------------------------
1 | package com.reforce.shell;
2 |
3 | import android.app.Application;
4 | import android.app.Instrumentation;
5 | import android.content.Context;
6 | import android.content.pm.ApplicationInfo;
7 | import android.content.pm.PackageManager;
8 | import android.os.Build;
9 | import android.os.Bundle;
10 | import android.util.ArrayMap;
11 |
12 | import com.alibaba.fastjson.JSON;
13 |
14 | import java.io.BufferedInputStream;
15 | import java.io.ByteArrayInputStream;
16 | import java.io.ByteArrayOutputStream;
17 | import java.io.DataInputStream;
18 | import java.io.File;
19 | import java.io.FileInputStream;
20 | import java.io.FileOutputStream;
21 | import java.io.IOException;
22 | import java.lang.ref.WeakReference;
23 | import java.security.InvalidKeyException;
24 | import java.security.NoSuchAlgorithmException;
25 | import java.util.ArrayList;
26 | import java.util.HashMap;
27 | import java.util.Iterator;
28 | import java.util.zip.ZipEntry;
29 | import java.util.zip.ZipInputStream;
30 |
31 | import javax.crypto.BadPaddingException;
32 | import javax.crypto.IllegalBlockSizeException;
33 | import javax.crypto.NoSuchPaddingException;
34 |
35 | import dalvik.system.DexClassLoader;
36 |
37 | /**
38 | * @author zl
39 | * @time 2019/2/22 0022.
40 | */
41 | public class ApplicationProxy extends Application {
42 | @Override
43 | protected void attachBaseContext(Context base) {
44 | super.attachBaseContext(base);
45 | try {
46 | File odex = getDir("payload_odex",MODE_PRIVATE);//android art虚拟机会对dex做优化
47 | File dex = getDir("payload_dex",MODE_PRIVATE);
48 | if(dex.listFiles().length == 0){
49 | byte[] dexData = readDexFromApk();
50 | splitPrimaryDexFromShellDex(dexData,dex.getAbsolutePath());
51 | }
52 | Object currentActivityThread = RefInvoke.invokeStaticMethod("android.app.ActivityThread", "currentActivityThread", new Class[] {}, new Object[] {});
53 | String packageName = getPackageName();
54 | WeakReference wr;
55 | if(Build.VERSION.SDK_INT < 19){
56 | HashMap mPackages = (HashMap) RefInvoke.getFieldOjbect(
57 | "android.app.ActivityThread", currentActivityThread,
58 | "mPackages");
59 | wr = (WeakReference) mPackages.get(packageName);
60 | } else {
61 | ArrayMap mPackages = (ArrayMap) RefInvoke.getFieldOjbect(
62 | "android.app.ActivityThread", currentActivityThread,
63 | "mPackages");
64 | wr = (WeakReference) mPackages.get(packageName);
65 | }
66 | //找到dex并通过DexClassLoader去加载
67 | StringBuffer dexPaths = new StringBuffer();
68 | for(File file:dex.listFiles()){
69 | dexPaths.append(file.getAbsolutePath());
70 | dexPaths.append(File.pathSeparator);
71 | }
72 | dexPaths.delete(dexPaths.length()-1,dexPaths.length());
73 | LogUtils.d(dexPaths.toString());
74 | DexClassLoader classLoader = new DexClassLoader(dexPaths.toString(), odex.getAbsolutePath(),getApplicationInfo().nativeLibraryDir,(ClassLoader) RefInvoke.getFieldOjbect(
75 | "android.app.LoadedApk", wr.get(), "mClassLoader"));
76 | RefInvoke.setFieldOjbect("android.app.LoadedApk", "mClassLoader",
77 | wr.get(), classLoader);
78 | } catch (Exception e) {
79 | e.printStackTrace();
80 | }
81 |
82 | }
83 |
84 | /**
85 | * 从apk中读取dex文件
86 | * @return
87 | * @throws IOException
88 | */
89 | public byte[] readDexFromApk() throws IOException {
90 | ByteArrayOutputStream dexByteArrayOutputSteam = new ByteArrayOutputStream();
91 | System.out.println(getApplicationInfo().sourceDir);
92 | ZipInputStream localZipInputStream = new ZipInputStream(new BufferedInputStream(new FileInputStream(getApplicationInfo().sourceDir)));
93 | while(true){
94 | ZipEntry localZipEntry = localZipInputStream.getNextEntry();
95 | if(localZipEntry == null){
96 | localZipInputStream.close();
97 | break;
98 | }
99 | if(localZipEntry.getName().equals("classes.dex")){
100 | byte[] arrayOfByte = new byte[1024];
101 | while (true){
102 | int i = localZipInputStream.read(arrayOfByte);
103 | if(i == -1) break;
104 | dexByteArrayOutputSteam.write(arrayOfByte,0,i);
105 | }
106 | }
107 | }
108 | localZipInputStream.close();
109 | return dexByteArrayOutputSteam.toByteArray();
110 | }
111 |
112 | /**
113 | * 从壳的dex文件中分离出原来的dex文件
114 | * @param data
115 | * @param primaryDexDir
116 | * @throws IOException
117 | */
118 | public void splitPrimaryDexFromShellDex(byte[] data, String primaryDexDir) throws IOException, InvalidKeyException, BadPaddingException, NoSuchAlgorithmException, IllegalBlockSizeException, NoSuchPaddingException {
119 | int shellDexLen = data.length;
120 | byte[] dexFileCommentLenByte = new byte[4];//dex信息长度
121 | System.arraycopy(data, shellDexLen-4, dexFileCommentLenByte, 0, 4);
122 | ByteArrayInputStream bais = new ByteArrayInputStream(dexFileCommentLenByte);
123 | DataInputStream in = new DataInputStream(bais);
124 | int dexFileCommentLen = in.readInt();
125 |
126 | byte[] dexFileCommentByte = new byte[dexFileCommentLen];//dex信息正文
127 | System.arraycopy(data,shellDexLen-4-dexFileCommentLen,dexFileCommentByte,0,dexFileCommentLen);
128 | String dexFileComment = new String(dexFileCommentByte);
129 | LogUtils.d("dex comment:"+dexFileComment);
130 | ArrayList dexFileArrayList = (ArrayList) JSON.parseArray(dexFileComment,DexFile.class);
131 | int currentReadEndIndex = shellDexLen - 4 - dexFileCommentLen;//当前已经读取到的内容的下标
132 | for(int i = dexFileArrayList.size()-1; i>=0; i--){//取出所有的dex,并写入到payload_dex目录下
133 | DexFile dexFile = dexFileArrayList.get(i);
134 | byte[] primaryDexData = new byte[dexFile.getDexLength()];
135 | System.arraycopy(data,currentReadEndIndex-dexFile.getDexLength(),primaryDexData,0,dexFile.getDexLength());
136 | primaryDexData = decryAES(primaryDexData);//界面
137 | File primaryDexFile = new File(primaryDexDir,dexFile.getDexName());
138 | if(!primaryDexFile.exists()) primaryDexFile.createNewFile();
139 | FileOutputStream localFileOutputStream = new FileOutputStream(primaryDexFile);
140 | localFileOutputStream.write(primaryDexData);
141 | localFileOutputStream.close();
142 |
143 | currentReadEndIndex -= dexFile.getDexLength();
144 | }
145 | }
146 |
147 | public byte[] decryAES(byte[] data) throws IllegalBlockSizeException, InvalidKeyException, BadPaddingException, NoSuchAlgorithmException, NoSuchPaddingException {
148 | return SecurityUtils.AESDecrypt(Constant.AES_PRIVATE_KEY,Constant.AES_IV,Constant.AES_TYPE,data);
149 | }
150 |
151 | @SuppressWarnings({ "unchecked", "rawtypes" })
152 | @Override
153 | public void onCreate() {
154 | String appClassName = null;
155 | try {
156 | ApplicationInfo ai = getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);
157 | Bundle bundle = ai.metaData;
158 | if(bundle != null && bundle.containsKey("APPLICATION_CLASS_NAME")){
159 | appClassName = bundle.getString("APPLICATION_CLASS_NAME");
160 | }else{
161 | super.onCreate();
162 | return;
163 | }
164 | LogUtils.d("appClassName:"+appClassName);
165 | // 有值的话调用该Applicaiton
166 | Object currentActivityThread = RefInvoke.invokeStaticMethod(
167 | "android.app.ActivityThread", "currentActivityThread",
168 | new Class[] {}, new Object[] {});
169 | Object mBoundApplication = RefInvoke.getFieldOjbect(
170 | "android.app.ActivityThread", currentActivityThread,
171 | "mBoundApplication");
172 | Object loadedApkInfo = RefInvoke.getFieldOjbect(
173 | "android.app.ActivityThread$AppBindData",
174 | mBoundApplication, "info");
175 | // 把当前进程的mApplication 设置成了null
176 | RefInvoke.setFieldOjbect("android.app.LoadedApk", "mApplication",
177 | loadedApkInfo, null);
178 | Object oldApplication = RefInvoke.getFieldOjbect(
179 | "android.app.ActivityThread", currentActivityThread,
180 | "mInitialApplication");
181 | // http://www.codeceo.com/article/android-context.html
182 | ArrayList mAllApplications = (ArrayList) RefInvoke
183 | .getFieldOjbect("android.app.ActivityThread",
184 | currentActivityThread, "mAllApplications");
185 | mAllApplications.remove(oldApplication);// 删除oldApplication
186 |
187 | ApplicationInfo appinfo_In_LoadedApk = (ApplicationInfo) RefInvoke
188 | .getFieldOjbect("android.app.LoadedApk", loadedApkInfo,
189 | "mApplicationInfo");
190 | ApplicationInfo appinfo_In_AppBindData = (ApplicationInfo) RefInvoke
191 | .getFieldOjbect("android.app.ActivityThread$AppBindData",
192 | mBoundApplication, "appInfo");
193 | appinfo_In_LoadedApk.className = appClassName;
194 | appinfo_In_AppBindData.className = appClassName;
195 | Application app = (Application) RefInvoke.invokeMethod(
196 | "android.app.LoadedApk", "makeApplication", loadedApkInfo,
197 | new Class[] { boolean.class, Instrumentation.class },
198 | new Object[] { false, null });// 执行
199 | // makeApplication(false,null)
200 | RefInvoke.setFieldOjbect("android.app.ActivityThread",
201 | "mInitialApplication", currentActivityThread, app);
202 |
203 | Iterator it;
204 | if(Build.VERSION.SDK_INT < 19){
205 | // 解决了类型强转错误的问题,原因:
206 | // 4.4以下系统 mProviderMap 的类型是 HashMap
207 | // 4.4以上系统 mProviderMap 的类型是 ArrayMap
208 | HashMap mProviderMap = (HashMap) RefInvoke.getFieldOjbect(
209 | "android.app.ActivityThread", currentActivityThread,
210 | "mProviderMap");
211 | it = mProviderMap.values().iterator();
212 | }else{
213 | ArrayMap mProviderMap = (ArrayMap) RefInvoke.getFieldOjbect(
214 | "android.app.ActivityThread", currentActivityThread,
215 | "mProviderMap");
216 | it = mProviderMap.values().iterator();
217 | }
218 | while (it.hasNext()) {
219 | Object providerClientRecord = it.next();
220 | Object localProvider = RefInvoke.getFieldOjbect(
221 | "android.app.ActivityThread$ProviderClientRecord",
222 | providerClientRecord, "mLocalProvider");
223 | RefInvoke.setFieldOjbect("android.content.ContentProvider",
224 | "mContext", localProvider, app);
225 | }
226 | app.onCreate();
227 | } catch (PackageManager.NameNotFoundException e) {
228 | e.printStackTrace();
229 | super.onCreate();
230 | }
231 | }
232 | }
233 |
--------------------------------------------------------------------------------
/ReforceApk/app/src/main/java/com/reforce/shell/Constant.java:
--------------------------------------------------------------------------------
1 | package com.reforce.shell;
2 |
3 | /**
4 | * Created by zoulong on 2019/2/26 0026.
5 | */
6 | public class Constant {
7 | public static final String AES_IV = "1234567898765432";//16位
8 | public static final String AES_TYPE = "AES/ECB/PKCS5Padding";//填充类型
9 | //私钥
10 | public static final String AES_PRIVATE_KEY="1111222233334444";//AES固定格式为128/192/256 bits.即:16/24/32bytes。DES固定格式为128bits,即8bytes。
11 | }
12 |
--------------------------------------------------------------------------------
/ReforceApk/app/src/main/java/com/reforce/shell/DexFile.java:
--------------------------------------------------------------------------------
1 | package com.reforce.shell;
2 |
3 | /**
4 | * Created by zoulong on 2019/2/25 0025.
5 | */
6 | public class DexFile {
7 | private String dexName;
8 | private int dexLength;
9 |
10 | public DexFile() {
11 | }
12 |
13 | public DexFile(String dexName, int dexLength) {
14 | this.dexName = dexName;
15 | this.dexLength = dexLength;
16 | }
17 |
18 | public String getDexName() {
19 | return dexName;
20 | }
21 |
22 | public void setDexName(String dexName) {
23 | this.dexName = dexName;
24 | }
25 |
26 | public int getDexLength() {
27 | return dexLength;
28 | }
29 |
30 | public void setDexLength(int dexLength) {
31 | this.dexLength = dexLength;
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/ReforceApk/app/src/main/java/com/reforce/shell/LogUtils.java:
--------------------------------------------------------------------------------
1 | package com.reforce.shell;
2 |
3 | import android.util.Log;
4 |
5 | import java.util.Iterator;
6 | import java.util.LinkedHashMap;
7 | import java.util.Map;
8 |
9 | /**
10 | * @author zl
11 | * @time 2019/1/7 0007.
12 | */
13 |
14 | public class LogUtils {
15 | private final static String Tag = "PreviewProject";
16 | private final static Map bufferLogs = new LinkedHashMap<>();
17 | public static void d(Object msg){
18 | Log.d(Tag,msg.toString());
19 | }
20 |
21 | private static StringBuffer getBufferLog(int tag){
22 | if(bufferLogs.get(tag) != null) return bufferLogs.get(tag);
23 | StringBuffer sb = new StringBuffer();
24 | bufferLogs.put(tag,sb);
25 | return sb;
26 | }
27 |
28 | public static void clearBufferD(int tag){
29 | StringBuffer sb = getBufferLog(tag);
30 | d(sb.toString());
31 | bufferLogs.remove(tag);
32 | }
33 |
34 | public static void clearBufferD(){
35 | Iterator> it = bufferLogs.entrySet().iterator();
36 | while (it.hasNext()){
37 | Map.Entry entry = it.next();
38 | d("tag:"+entry.getKey()+" value:"+entry.getValue());
39 | }
40 | }
41 |
42 | public static void bufferD(int tag, Object msg){
43 | StringBuffer sb = getBufferLog(tag);
44 | if(sb.length() != 0)
45 | sb.append(" , "+msg);
46 | else
47 | sb.append(msg);
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/ReforceApk/app/src/main/java/com/reforce/shell/MainActivity.java:
--------------------------------------------------------------------------------
1 | package com.reforce.shell;
2 |
3 | import android.app.Activity;
4 | import android.os.Bundle;
5 |
6 | public class MainActivity extends Activity {
7 |
8 | @Override
9 | protected void onCreate(Bundle savedInstanceState) {
10 | super.onCreate(savedInstanceState);
11 | setContentView(R.layout.activity_main);
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/ReforceApk/app/src/main/java/com/reforce/shell/RefInvoke.java:
--------------------------------------------------------------------------------
1 | package com.reforce.shell;
2 |
3 | import java.lang.reflect.InvocationTargetException;
4 | import java.lang.reflect.Method;
5 | import java.lang.reflect.Field;
6 |
7 | public class RefInvoke {
8 | /**
9 | * 反射执行类的静态函数(public)
10 | *
11 | * @param class_name
12 | * 类名
13 | * @param method_name
14 | * 函数名
15 | * @param pareTyple
16 | * 函数的参数类型
17 | * @param pareVaules
18 | * 调用函数时传入的参数
19 | * @return
20 | */
21 | @SuppressWarnings({ "unchecked", "rawtypes" })
22 | public static Object invokeStaticMethod(String class_name,
23 | String method_name, Class[] pareTyple, Object[] pareVaules) {
24 |
25 | try {
26 | Class obj_class = Class.forName(class_name);
27 | Method method = obj_class.getMethod(method_name, pareTyple);
28 | return method.invoke(null, pareVaules);
29 | } catch (SecurityException e) {
30 | e.printStackTrace();
31 | } catch (IllegalArgumentException e) {
32 | e.printStackTrace();
33 | } catch (IllegalAccessException e) {
34 | e.printStackTrace();
35 | } catch (NoSuchMethodException e) {
36 | e.printStackTrace();
37 | } catch (InvocationTargetException e) {
38 | e.printStackTrace();
39 | } catch (ClassNotFoundException e) {
40 | e.printStackTrace();
41 | }
42 | return null;
43 |
44 | }
45 |
46 | /**
47 | * 反射执行类的函数(public)
48 | *
49 | * @param class_name
50 | * @param method_name
51 | * @param obj
52 | * @param pareTyple
53 | * @param pareVaules
54 | * @return
55 | */
56 | @SuppressWarnings({ "rawtypes", "unchecked" })
57 | public static Object invokeMethod(String class_name, String method_name,
58 | Object obj, Class[] pareTyple, Object[] pareVaules) {
59 |
60 | try {
61 | Class obj_class = Class.forName(class_name);
62 | Method method = obj_class.getMethod(method_name, pareTyple);
63 | return method.invoke(obj, pareVaules);
64 | } catch (SecurityException e) {
65 | e.printStackTrace();
66 | } catch (IllegalArgumentException e) {
67 | e.printStackTrace();
68 | } catch (IllegalAccessException e) {
69 | e.printStackTrace();
70 | } catch (NoSuchMethodException e) {
71 | e.printStackTrace();
72 | } catch (InvocationTargetException e) {
73 | e.printStackTrace();
74 | } catch (ClassNotFoundException e) {
75 | e.printStackTrace();
76 | }
77 | return null;
78 |
79 | }
80 |
81 | /**
82 | * 反射得到类的属性(包括私有和保护)
83 | *
84 | * @param class_name
85 | * @param obj
86 | * @param filedName
87 | * @return
88 | */
89 | @SuppressWarnings("rawtypes")
90 | public static Object getFieldOjbect(String class_name, Object obj,
91 | String filedName) {
92 | try {
93 | Class obj_class = Class.forName(class_name);
94 | Field field = obj_class.getDeclaredField(filedName);
95 | field.setAccessible(true);
96 | return field.get(obj);
97 | } catch (SecurityException e) {
98 | e.printStackTrace();
99 | } catch (NoSuchFieldException e) {
100 | e.printStackTrace();
101 | } catch (IllegalArgumentException e) {
102 | e.printStackTrace();
103 | } catch (IllegalAccessException e) {
104 | e.printStackTrace();
105 | } catch (ClassNotFoundException e) {
106 | e.printStackTrace();
107 | }
108 | return null;
109 |
110 | }
111 |
112 | /**
113 | * 反射得到类的静态属性(包括私有和保护)
114 | *
115 | * @param class_name
116 | * @param filedName
117 | * @return
118 | */
119 | @SuppressWarnings("rawtypes")
120 | public static Object getStaticFieldOjbect(String class_name,
121 | String filedName) {
122 |
123 | try {
124 | Class obj_class = Class.forName(class_name);
125 | Field field = obj_class.getDeclaredField(filedName);
126 | field.setAccessible(true);
127 | return field.get(null);
128 | } catch (SecurityException e) {
129 | e.printStackTrace();
130 | } catch (NoSuchFieldException e) {
131 | e.printStackTrace();
132 | } catch (IllegalArgumentException e) {
133 | e.printStackTrace();
134 | } catch (IllegalAccessException e) {
135 | e.printStackTrace();
136 | } catch (ClassNotFoundException e) {
137 | e.printStackTrace();
138 | }
139 | return null;
140 |
141 | }
142 |
143 | /**
144 | * 设置类的属性(包括私有和保护)
145 | *
146 | * @param classname
147 | * @param filedName
148 | * @param obj
149 | * @param filedVaule
150 | */
151 | @SuppressWarnings("rawtypes")
152 | public static void setFieldOjbect(String classname, String filedName,
153 | Object obj, Object filedVaule) {
154 | try {
155 | Class obj_class = Class.forName(classname);
156 | Field field = obj_class.getDeclaredField(filedName);
157 | field.setAccessible(true);
158 | field.set(obj, filedVaule);
159 | } catch (SecurityException e) {
160 | e.printStackTrace();
161 | } catch (NoSuchFieldException e) {
162 | e.printStackTrace();
163 | } catch (IllegalArgumentException e) {
164 | e.printStackTrace();
165 | } catch (IllegalAccessException e) {
166 | e.printStackTrace();
167 | } catch (ClassNotFoundException e) {
168 | e.printStackTrace();
169 | }
170 | }
171 |
172 | /**
173 | * 设置类的静态属性(包括私有和保护)
174 | *
175 | * @param class_name
176 | * @param filedName
177 | * @param filedVaule
178 | */
179 | @SuppressWarnings("rawtypes")
180 | public static void setStaticOjbect(String class_name, String filedName,
181 | Object filedVaule) {
182 | try {
183 | Class obj_class = Class.forName(class_name);
184 | Field field = obj_class.getDeclaredField(filedName);
185 | field.setAccessible(true);
186 | field.set(null, filedVaule);
187 | } catch (SecurityException e) {
188 | e.printStackTrace();
189 | } catch (NoSuchFieldException e) {
190 | e.printStackTrace();
191 | } catch (IllegalArgumentException e) {
192 | e.printStackTrace();
193 | } catch (IllegalAccessException e) {
194 | e.printStackTrace();
195 | } catch (ClassNotFoundException e) {
196 | e.printStackTrace();
197 | }
198 | }
199 |
200 | }
201 |
--------------------------------------------------------------------------------
/ReforceApk/app/src/main/java/com/reforce/shell/SecurityUtils.java:
--------------------------------------------------------------------------------
1 | package com.reforce.shell;
2 |
3 | import java.security.InvalidKeyException;
4 | import java.security.NoSuchAlgorithmException;
5 | import java.security.SecureRandom;
6 |
7 | import javax.crypto.BadPaddingException;
8 | import javax.crypto.Cipher;
9 | import javax.crypto.IllegalBlockSizeException;
10 | import javax.crypto.KeyGenerator;
11 | import javax.crypto.NoSuchPaddingException;
12 | import javax.crypto.SecretKey;
13 | import javax.crypto.spec.IvParameterSpec;
14 | import javax.crypto.spec.SecretKeySpec;
15 |
16 | /**
17 | * @author zl
18 | * @time 2019/2/26 0026.
19 | */
20 | public class SecurityUtils {
21 | /*
22 | * 加密
23 | * 1.构造密钥生成器
24 | * 2.根据ecnodeRules规则初始化密钥生成器
25 | * 3.产生密钥
26 | * 4.创建和初始化密码器
27 | * 5.内容加密
28 | * 6.返回字符串
29 | */
30 | public static byte[] AESEncryption(String privateKey,String iv,String AES_TYPE,byte[] data) throws NoSuchPaddingException, NoSuchAlgorithmException, BadPaddingException, IllegalBlockSizeException, InvalidKeyException {
31 | IvParameterSpec zeroIv = new IvParameterSpec(iv.getBytes());
32 | //两个参数,第一个为私钥字节数组, 第二个为加密方式 AES或者DES
33 | SecretKeySpec key = new SecretKeySpec(privateKey.getBytes(), "AES");
34 | //实例化加密类,参数为加密方式,要写全
35 | Cipher cipher = Cipher.getInstance(AES_TYPE); //PKCS5Padding比PKCS7Padding效率高,PKCS7Padding可支持IOS加解密
36 | //初始化,此方法可以采用三种方式,按加密算法要求来添加。(1)无第三个参数(2)第三个参数为SecureRandom random = new SecureRandom();中random对象,随机数。(AES不可采用这种方法)(3)采用此代码中的IVParameterSpec
37 | //加密时使用:ENCRYPT_MODE; 解密时使用:DECRYPT_MODE;
38 | cipher.init(Cipher.ENCRYPT_MODE, key); //CBC类型的可以在第三个参数传递偏移量zeroIv,ECB没有偏移量
39 | //加密操作,返回加密后的字节数组,然后需要编码。主要编解码方式有Base64, HEX, UUE,7bit等等。此处看服务器需要什么编码方式
40 | byte[] encryptedData = cipher.doFinal(data);
41 | return encryptedData;
42 | }
43 | /*
44 | * 解密
45 | * 解密过程:
46 | * 1.同加密1-4步
47 | * 2.将加密后的字符串反纺成byte[]数组
48 | * 3.将加密内容解密
49 | */
50 | public static byte[] AESDecrypt(String privateKey,String iv,String AES_TYPE,byte[] data) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException {
51 | IvParameterSpec zeroIv = new IvParameterSpec(iv.getBytes());
52 | SecretKeySpec key = new SecretKeySpec(privateKey.getBytes(), "AES");
53 | Cipher cipher = Cipher.getInstance(AES_TYPE);
54 | //与加密时不同MODE:Cipher.DECRYPT_MODE
55 | cipher.init(Cipher.DECRYPT_MODE, key); //CBC类型的可以在第三个参数传递偏移量zeroIv,ECB没有偏移量
56 | byte[] decryptedData = cipher.doFinal(data);
57 | return decryptedData;
58 | }
59 |
60 | }
61 |
--------------------------------------------------------------------------------
/ReforceApk/app/src/main/res/drawable/ic_launcher_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
15 |
20 |
25 |
30 |
35 |
40 |
45 |
50 |
55 |
60 |
65 |
70 |
75 |
80 |
85 |
90 |
95 |
100 |
105 |
110 |
115 |
120 |
125 |
130 |
135 |
140 |
145 |
150 |
155 |
160 |
165 |
170 |
171 |
--------------------------------------------------------------------------------
/ReforceApk/app/src/main/res/layout/activity_main.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
14 |
15 |
--------------------------------------------------------------------------------
/ReforceApk/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #008577
4 | #00574B
5 | #D81B60
6 |
7 |
--------------------------------------------------------------------------------
/ReforceApk/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | ReforceApk
3 |
4 |
--------------------------------------------------------------------------------
/ReforceApk/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/ReforceApk/build.gradle:
--------------------------------------------------------------------------------
1 | // Top-level build file where you can add configuration options common to all sub-projects/modules.
2 |
3 | buildscript {
4 | repositories {
5 | google()
6 | jcenter()
7 |
8 | }
9 | dependencies {
10 | classpath 'com.android.tools.build:gradle:3.3.1'
11 |
12 | // NOTE: Do not place your application dependencies here; they belong
13 | // in the individual module build.gradle files
14 | }
15 | }
16 |
17 | allprojects {
18 | repositories {
19 | google()
20 | jcenter()
21 |
22 | }
23 | }
24 |
25 | task clean(type: Delete) {
26 | delete rootProject.buildDir
27 | }
28 |
--------------------------------------------------------------------------------
/ReforceApk/gradle.properties:
--------------------------------------------------------------------------------
1 | # Project-wide Gradle settings.
2 | # IDE (e.g. Android Studio) users:
3 | # Gradle settings configured through the IDE *will override*
4 | # any settings specified in this file.
5 | # For more details on how to configure your build environment visit
6 | # http://www.gradle.org/docs/current/userguide/build_environment.html
7 | # Specifies the JVM arguments used for the daemon process.
8 | # The setting is particularly useful for tweaking memory settings.
9 | org.gradle.jvmargs=-Xmx1536m
10 | # When configured, Gradle will run in incubating parallel mode.
11 | # This option should only be used with decoupled projects. More details, visit
12 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
13 | # org.gradle.parallel=true
14 |
15 |
16 |
--------------------------------------------------------------------------------
/ReforceApk/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ray-tianfeng/dex-shell/7623c3b16d4c36bf0cb941255603891a259826fd/ReforceApk/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/ReforceApk/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Thu Feb 21 16:34:53 GMT+08:00 2019
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip
7 |
--------------------------------------------------------------------------------
/ReforceApk/gradlew:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env sh
2 |
3 | ##############################################################################
4 | ##
5 | ## Gradle start up script for UN*X
6 | ##
7 | ##############################################################################
8 |
9 | # Attempt to set APP_HOME
10 | # Resolve links: $0 may be a link
11 | PRG="$0"
12 | # Need this for relative symlinks.
13 | while [ -h "$PRG" ] ; do
14 | ls=`ls -ld "$PRG"`
15 | link=`expr "$ls" : '.*-> \(.*\)$'`
16 | if expr "$link" : '/.*' > /dev/null; then
17 | PRG="$link"
18 | else
19 | PRG=`dirname "$PRG"`"/$link"
20 | fi
21 | done
22 | SAVED="`pwd`"
23 | cd "`dirname \"$PRG\"`/" >/dev/null
24 | APP_HOME="`pwd -P`"
25 | cd "$SAVED" >/dev/null
26 |
27 | APP_NAME="Gradle"
28 | APP_BASE_NAME=`basename "$0"`
29 |
30 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
31 | DEFAULT_JVM_OPTS=""
32 |
33 | # Use the maximum available, or set MAX_FD != -1 to use that value.
34 | MAX_FD="maximum"
35 |
36 | warn () {
37 | echo "$*"
38 | }
39 |
40 | die () {
41 | echo
42 | echo "$*"
43 | echo
44 | exit 1
45 | }
46 |
47 | # OS specific support (must be 'true' or 'false').
48 | cygwin=false
49 | msys=false
50 | darwin=false
51 | nonstop=false
52 | case "`uname`" in
53 | CYGWIN* )
54 | cygwin=true
55 | ;;
56 | Darwin* )
57 | darwin=true
58 | ;;
59 | MINGW* )
60 | msys=true
61 | ;;
62 | NONSTOP* )
63 | nonstop=true
64 | ;;
65 | esac
66 |
67 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
68 |
69 | # Determine the Java command to use to start the JVM.
70 | if [ -n "$JAVA_HOME" ] ; then
71 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
72 | # IBM's JDK on AIX uses strange locations for the executables
73 | JAVACMD="$JAVA_HOME/jre/sh/java"
74 | else
75 | JAVACMD="$JAVA_HOME/bin/java"
76 | fi
77 | if [ ! -x "$JAVACMD" ] ; then
78 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
79 |
80 | Please set the JAVA_HOME variable in your environment to match the
81 | location of your Java installation."
82 | fi
83 | else
84 | JAVACMD="java"
85 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
86 |
87 | Please set the JAVA_HOME variable in your environment to match the
88 | location of your Java installation."
89 | fi
90 |
91 | # Increase the maximum file descriptors if we can.
92 | if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
93 | MAX_FD_LIMIT=`ulimit -H -n`
94 | if [ $? -eq 0 ] ; then
95 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
96 | MAX_FD="$MAX_FD_LIMIT"
97 | fi
98 | ulimit -n $MAX_FD
99 | if [ $? -ne 0 ] ; then
100 | warn "Could not set maximum file descriptor limit: $MAX_FD"
101 | fi
102 | else
103 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
104 | fi
105 | fi
106 |
107 | # For Darwin, add options to specify how the application appears in the dock
108 | if $darwin; then
109 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
110 | fi
111 |
112 | # For Cygwin, switch paths to Windows format before running java
113 | if $cygwin ; then
114 | APP_HOME=`cygpath --path --mixed "$APP_HOME"`
115 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
116 | JAVACMD=`cygpath --unix "$JAVACMD"`
117 |
118 | # We build the pattern for arguments to be converted via cygpath
119 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
120 | SEP=""
121 | for dir in $ROOTDIRSRAW ; do
122 | ROOTDIRS="$ROOTDIRS$SEP$dir"
123 | SEP="|"
124 | done
125 | OURCYGPATTERN="(^($ROOTDIRS))"
126 | # Add a user-defined pattern to the cygpath arguments
127 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then
128 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
129 | fi
130 | # Now convert the arguments - kludge to limit ourselves to /bin/sh
131 | i=0
132 | for arg in "$@" ; do
133 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
134 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
135 |
136 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
137 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
138 | else
139 | eval `echo args$i`="\"$arg\""
140 | fi
141 | i=$((i+1))
142 | done
143 | case $i in
144 | (0) set -- ;;
145 | (1) set -- "$args0" ;;
146 | (2) set -- "$args0" "$args1" ;;
147 | (3) set -- "$args0" "$args1" "$args2" ;;
148 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
149 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
150 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
151 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
152 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
153 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
154 | esac
155 | fi
156 |
157 | # Escape application args
158 | save () {
159 | for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
160 | echo " "
161 | }
162 | APP_ARGS=$(save "$@")
163 |
164 | # Collect all arguments for the java command, following the shell quoting and substitution rules
165 | eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
166 |
167 | # by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
168 | if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
169 | cd "$(dirname "$0")"
170 | fi
171 |
172 | exec "$JAVACMD" "$@"
173 |
--------------------------------------------------------------------------------
/ReforceApk/gradlew.bat:
--------------------------------------------------------------------------------
1 | @if "%DEBUG%" == "" @echo off
2 | @rem ##########################################################################
3 | @rem
4 | @rem Gradle startup script for Windows
5 | @rem
6 | @rem ##########################################################################
7 |
8 | @rem Set local scope for the variables with windows NT shell
9 | if "%OS%"=="Windows_NT" setlocal
10 |
11 | set DIRNAME=%~dp0
12 | if "%DIRNAME%" == "" set DIRNAME=.
13 | set APP_BASE_NAME=%~n0
14 | set APP_HOME=%DIRNAME%
15 |
16 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
17 | set DEFAULT_JVM_OPTS=
18 |
19 | @rem Find java.exe
20 | if defined JAVA_HOME goto findJavaFromJavaHome
21 |
22 | set JAVA_EXE=java.exe
23 | %JAVA_EXE% -version >NUL 2>&1
24 | if "%ERRORLEVEL%" == "0" goto init
25 |
26 | echo.
27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
28 | echo.
29 | echo Please set the JAVA_HOME variable in your environment to match the
30 | echo location of your Java installation.
31 |
32 | goto fail
33 |
34 | :findJavaFromJavaHome
35 | set JAVA_HOME=%JAVA_HOME:"=%
36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
37 |
38 | if exist "%JAVA_EXE%" goto init
39 |
40 | echo.
41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
42 | echo.
43 | echo Please set the JAVA_HOME variable in your environment to match the
44 | echo location of your Java installation.
45 |
46 | goto fail
47 |
48 | :init
49 | @rem Get command-line arguments, handling Windows variants
50 |
51 | if not "%OS%" == "Windows_NT" goto win9xME_args
52 |
53 | :win9xME_args
54 | @rem Slurp the command line arguments.
55 | set CMD_LINE_ARGS=
56 | set _SKIP=2
57 |
58 | :win9xME_args_slurp
59 | if "x%~1" == "x" goto execute
60 |
61 | set CMD_LINE_ARGS=%*
62 |
63 | :execute
64 | @rem Setup the command line
65 |
66 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
67 |
68 | @rem Execute Gradle
69 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
70 |
71 | :end
72 | @rem End local scope for the variables with windows NT shell
73 | if "%ERRORLEVEL%"=="0" goto mainEnd
74 |
75 | :fail
76 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
77 | rem the _cmd.exe /c_ return code!
78 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
79 | exit /b 1
80 |
81 | :mainEnd
82 | if "%OS%"=="Windows_NT" endlocal
83 |
84 | :omega
85 |
--------------------------------------------------------------------------------
/ReforceApk/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
2 |
--------------------------------------------------------------------------------
/demo/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | /local.properties
4 | /.idea/workspace.xml
5 | /.idea/libraries
6 | .DS_Store
7 | /build
8 | /captures
9 | .externalNativeBuild
10 |
--------------------------------------------------------------------------------
/demo/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/demo/app/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.application'
2 |
3 | android {
4 | compileSdkVersion 26
5 | buildToolsVersion "26.0.2"
6 | defaultConfig {
7 | applicationId "com.mokylin.sxqlb.huawei"
8 | minSdkVersion 14
9 | targetSdkVersion 26
10 | versionCode 1
11 | versionName "0.0.1"
12 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
13 | multiDexEnabled true
14 | }
15 | signingConfigs {
16 | xiyou {
17 | keyAlias 'xiyou.keystore'
18 | keyPassword 'www.52xiyou.com'
19 | storeFile file('F:/keystore/xiyou/xiyou.keystore')
20 | storePassword 'www.52xiyou.com'
21 | v2SigningEnabled false
22 | }
23 | key1 {
24 | keyAlias 'key1'
25 | keyPassword 'passworld123258'
26 | storeFile file('F:/keystore/xiyoukey1/key1.keystore')
27 | storePassword 'passworld123258'
28 | v2SigningEnabled false
29 | }
30 | mssj {
31 | keyAlias 'mssj'
32 | keyPassword 'ywmssj'
33 | storeFile file('F:/keystore/mssj/mssj.keystore')
34 | storePassword 'ywmssj'
35 | v2SigningEnabled false
36 | }
37 | zzzw {
38 | keyAlias 'zzzw'
39 | keyPassword 'gdtzzzw'
40 | storeFile file('F:/keystore/zzzw/zzzw.keystore')
41 | storePassword 'gdtzzzw'
42 | v2SigningEnabled false
43 | }
44 | }
45 | buildTypes {
46 | release {
47 | minifyEnabled false
48 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
49 | signingConfig signingConfigs.xiyou
50 | }
51 | debug {
52 | signingConfig signingConfigs.xiyou
53 | }
54 | }
55 | productFlavors {
56 | }
57 | }
58 |
59 | dependencies {
60 | compile fileTree(include: ['*.jar'], dir: 'libs')
61 | }
62 |
--------------------------------------------------------------------------------
/demo/app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # By default, the flags in this file are appended to flags specified
3 | # in D:\workeSoft\androidStudio\sdk/tools/proguard/proguard-android.txt
4 | # You can edit the include path and order by changing the proguardFiles
5 | # directive in build.gradle.
6 | #
7 | # For more details, see
8 | # http://developer.android.com/guide/developing/tools/proguard.html
9 |
10 | # Add any project specific keep options here:
11 |
12 | # If your project uses WebView with JS, uncomment the following
13 | # and specify the fully qualified class name to the JavaScript interface
14 | # class:
15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16 | # public *;
17 | #}
18 |
19 | # Uncomment this to preserve the line number information for
20 | # debugging stack traces.
21 | #-keepattributes SourceFile,LineNumberTable
22 |
23 | # If you keep the line number information, uncomment this to
24 | # hide the original source file name.
25 | #-renamesourcefileattribute SourceFile
26 |
--------------------------------------------------------------------------------
/demo/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
19 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/demo/app/src/main/java/com/test/Test1.java:
--------------------------------------------------------------------------------
1 | package com.test;
2 |
3 | /**
4 | * @author zl
5 | * @time 2019/2/25 0025.
6 | */
7 | public class Test1 {
8 | public void test0(){}
9 | public void test1(){}
10 | public void test2(){}
11 | public void test3(){}
12 | public void test4(){}
13 | public void test5(){}
14 | public void test6(){}
15 | public void test7(){}
16 | public void test8(){}
17 | public void test9(){}
18 | public void test10(){}
19 | public void test11(){}
20 | public void test12(){}
21 | public void test13(){}
22 | public void test14(){}
23 | public void test15(){}
24 | public void test16(){}
25 | public void test17(){}
26 | public void test18(){}
27 | public void test19(){}
28 | public void test20(){}
29 | public void test21(){}
30 | public void test22(){}
31 | public void test23(){}
32 | public void test24(){}
33 | public void test25(){}
34 | public void test26(){}
35 | public void test27(){}
36 | public void test28(){}
37 | public void test29(){}
38 | public void test30(){}
39 | public void test31(){}
40 | public void test32(){}
41 | public void test33(){}
42 | public void test34(){}
43 | public void test35(){}
44 | public void test36(){}
45 | public void test37(){}
46 | public void test38(){}
47 | public void test39(){}
48 | public void test40(){}
49 | public void test41(){}
50 | public void test42(){}
51 | public void test43(){}
52 | public void test44(){}
53 | public void test45(){}
54 | public void test46(){}
55 | public void test47(){}
56 | public void test48(){}
57 | public void test49(){}
58 | public void test50(){}
59 | public void test51(){}
60 | public void test52(){}
61 | public void test53(){}
62 | public void test54(){}
63 | public void test55(){}
64 | public void test56(){}
65 | public void test57(){}
66 | public void test58(){}
67 | public void test59(){}
68 | public void test60(){}
69 | public void test61(){}
70 | public void test62(){}
71 | public void test63(){}
72 | public void test64(){}
73 | public void test65(){}
74 | public void test66(){}
75 | public void test67(){}
76 | public void test68(){}
77 | public void test69(){}
78 | public void test70(){}
79 | public void test71(){}
80 | public void test72(){}
81 | public void test73(){}
82 | public void test74(){}
83 | public void test75(){}
84 | public void test76(){}
85 | public void test77(){}
86 | public void test78(){}
87 | public void test79(){}
88 | public void test80(){}
89 | public void test81(){}
90 | public void test82(){}
91 | public void test83(){}
92 | public void test84(){}
93 | public void test85(){}
94 | public void test86(){}
95 | public void test87(){}
96 | public void test88(){}
97 | public void test89(){}
98 | public void test90(){}
99 | public void test91(){}
100 | public void test92(){}
101 | public void test93(){}
102 | public void test94(){}
103 | public void test95(){}
104 | public void test96(){}
105 | public void test97(){}
106 | public void test98(){}
107 | public void test99(){}
108 | public void test100(){}
109 | public void test101(){}
110 | public void test102(){}
111 | public void test103(){}
112 | public void test104(){}
113 | public void test105(){}
114 | public void test106(){}
115 | public void test107(){}
116 | public void test108(){}
117 | public void test109(){}
118 | public void test110(){}
119 | public void test111(){}
120 | public void test112(){}
121 | public void test113(){}
122 | public void test114(){}
123 | public void test115(){}
124 | public void test116(){}
125 | public void test117(){}
126 | public void test118(){}
127 | public void test119(){}
128 | public void test120(){}
129 | public void test121(){}
130 | public void test122(){}
131 | public void test123(){}
132 | public void test124(){}
133 | public void test125(){}
134 | public void test126(){}
135 | public void test127(){}
136 | public void test128(){}
137 | public void test129(){}
138 | public void test130(){}
139 | public void test131(){}
140 | public void test132(){}
141 | public void test133(){}
142 | public void test134(){}
143 | public void test135(){}
144 | public void test136(){}
145 | public void test137(){}
146 | public void test138(){}
147 | public void test139(){}
148 | public void test140(){}
149 | public void test141(){}
150 | public void test142(){}
151 | public void test143(){}
152 | public void test144(){}
153 | public void test145(){}
154 | public void test146(){}
155 | public void test147(){}
156 | public void test148(){}
157 | public void test149(){}
158 | public void test150(){}
159 | public void test151(){}
160 | public void test152(){}
161 | public void test153(){}
162 | public void test154(){}
163 | public void test155(){}
164 | public void test156(){}
165 | public void test157(){}
166 | public void test158(){}
167 | public void test159(){}
168 | public void test160(){}
169 | public void test161(){}
170 | public void test162(){}
171 | public void test163(){}
172 | public void test164(){}
173 | public void test165(){}
174 | public void test166(){}
175 | public void test167(){}
176 | public void test168(){}
177 | public void test169(){}
178 | public void test170(){}
179 | public void test171(){}
180 | public void test172(){}
181 | public void test173(){}
182 | public void test174(){}
183 | public void test175(){}
184 | public void test176(){}
185 | public void test177(){}
186 | public void test178(){}
187 | public void test179(){}
188 | public void test180(){}
189 | public void test181(){}
190 | public void test182(){}
191 | public void test183(){}
192 | public void test184(){}
193 | public void test185(){}
194 | public void test186(){}
195 | public void test187(){}
196 | public void test188(){}
197 | public void test189(){}
198 | public void test190(){}
199 | public void test191(){}
200 | public void test192(){}
201 | public void test193(){}
202 | public void test194(){}
203 | public void test195(){}
204 | public void test196(){}
205 | public void test197(){}
206 | public void test198(){}
207 | public void test199(){}
208 | public void test200(){}
209 | public void test201(){}
210 | public void test202(){}
211 | public void test203(){}
212 | public void test204(){}
213 | public void test205(){}
214 | public void test206(){}
215 | public void test207(){}
216 | public void test208(){}
217 | public void test209(){}
218 | public void test210(){}
219 | public void test211(){}
220 | public void test212(){}
221 | public void test213(){}
222 | public void test214(){}
223 | public void test215(){}
224 | public void test216(){}
225 | public void test217(){}
226 | public void test218(){}
227 | public void test219(){}
228 | public void test220(){}
229 | public void test221(){}
230 | public void test222(){}
231 | public void test223(){}
232 | public void test224(){}
233 | public void test225(){}
234 | public void test226(){}
235 | public void test227(){}
236 | public void test228(){}
237 | public void test229(){}
238 | public void test230(){}
239 | public void test231(){}
240 | public void test232(){}
241 | public void test233(){}
242 | public void test234(){}
243 | public void test235(){}
244 | public void test236(){}
245 | public void test237(){}
246 | public void test238(){}
247 | public void test239(){}
248 | public void test240(){}
249 | public void test241(){}
250 | public void test242(){}
251 | public void test243(){}
252 | public void test244(){}
253 | public void test245(){}
254 | public void test246(){}
255 | public void test247(){}
256 | public void test248(){}
257 | public void test249(){}
258 | public void test250(){}
259 | public void test251(){}
260 | public void test252(){}
261 | public void test253(){}
262 | public void test254(){}
263 | public void test255(){}
264 | public void test256(){}
265 | public void test257(){}
266 | public void test258(){}
267 | public void test259(){}
268 | public void test260(){}
269 | public void test261(){}
270 | public void test262(){}
271 | public void test263(){}
272 | public void test264(){}
273 | public void test265(){}
274 | public void test266(){}
275 | public void test267(){}
276 | public void test268(){}
277 | public void test269(){}
278 | public void test270(){}
279 | public void test271(){}
280 | public void test272(){}
281 | public void test273(){}
282 | public void test274(){}
283 | public void test275(){}
284 | public void test276(){}
285 | public void test277(){}
286 | public void test278(){}
287 | public void test279(){}
288 | public void test280(){}
289 | public void test281(){}
290 | public void test282(){}
291 | public void test283(){}
292 | public void test284(){}
293 | public void test285(){}
294 | public void test286(){}
295 | public void test287(){}
296 | public void test288(){}
297 | public void test289(){}
298 | public void test290(){}
299 | public void test291(){}
300 | public void test292(){}
301 | public void test293(){}
302 | public void test294(){}
303 | public void test295(){}
304 | public void test296(){}
305 | public void test297(){}
306 | public void test298(){}
307 | public void test299(){}
308 | public void test300(){}
309 | public void test301(){}
310 | public void test302(){}
311 | public void test303(){}
312 | public void test304(){}
313 | public void test305(){}
314 | public void test306(){}
315 | public void test307(){}
316 | public void test308(){}
317 | public void test309(){}
318 | public void test310(){}
319 | public void test311(){}
320 | public void test312(){}
321 | public void test313(){}
322 | public void test314(){}
323 | public void test315(){}
324 | public void test316(){}
325 | public void test317(){}
326 | public void test318(){}
327 | public void test319(){}
328 | public void test320(){}
329 | public void test321(){}
330 | public void test322(){}
331 | public void test323(){}
332 | public void test324(){}
333 | public void test325(){}
334 | public void test326(){}
335 | public void test327(){}
336 | public void test328(){}
337 | public void test329(){}
338 | public void test330(){}
339 | public void test331(){}
340 | public void test332(){}
341 | public void test333(){}
342 | public void test334(){}
343 | public void test335(){}
344 | public void test336(){}
345 | public void test337(){}
346 | public void test338(){}
347 | public void test339(){}
348 | public void test340(){}
349 | public void test341(){}
350 | public void test342(){}
351 | public void test343(){}
352 | public void test344(){}
353 | public void test345(){}
354 | public void test346(){}
355 | public void test347(){}
356 | public void test348(){}
357 | public void test349(){}
358 | public void test350(){}
359 | public void test351(){}
360 | public void test352(){}
361 | public void test353(){}
362 | public void test354(){}
363 | public void test355(){}
364 | public void test356(){}
365 | public void test357(){}
366 | public void test358(){}
367 | public void test359(){}
368 | public void test360(){}
369 | public void test361(){}
370 | public void test362(){}
371 | public void test363(){}
372 | public void test364(){}
373 | public void test365(){}
374 | public void test366(){}
375 | public void test367(){}
376 | public void test368(){}
377 | public void test369(){}
378 | public void test370(){}
379 | public void test371(){}
380 | public void test372(){}
381 | public void test373(){}
382 | public void test374(){}
383 | public void test375(){}
384 | public void test376(){}
385 | public void test377(){}
386 | public void test378(){}
387 | public void test379(){}
388 | public void test380(){}
389 | public void test381(){}
390 | public void test382(){}
391 | public void test383(){}
392 | public void test384(){}
393 | public void test385(){}
394 | public void test386(){}
395 | public void test387(){}
396 | public void test388(){}
397 | public void test389(){}
398 | public void test390(){}
399 | public void test391(){}
400 | public void test392(){}
401 | public void test393(){}
402 | public void test394(){}
403 | public void test395(){}
404 | public void test396(){}
405 | public void test397(){}
406 | public void test398(){}
407 | public void test399(){}
408 | public void test400(){}
409 | public void test401(){}
410 | public void test402(){}
411 | public void test403(){}
412 | public void test404(){}
413 | public void test405(){}
414 | public void test406(){}
415 | public void test407(){}
416 | public void test408(){}
417 | public void test409(){}
418 | public void test410(){}
419 | public void test411(){}
420 | public void test412(){}
421 | public void test413(){}
422 | public void test414(){}
423 | public void test415(){}
424 | public void test416(){}
425 | public void test417(){}
426 | public void test418(){}
427 | public void test419(){}
428 | public void test420(){}
429 | public void test421(){}
430 | public void test422(){}
431 | public void test423(){}
432 | public void test424(){}
433 | public void test425(){}
434 | public void test426(){}
435 | public void test427(){}
436 | public void test428(){}
437 | public void test429(){}
438 | public void test430(){}
439 | public void test431(){}
440 | public void test432(){}
441 | public void test433(){}
442 | public void test434(){}
443 | public void test435(){}
444 | public void test436(){}
445 | public void test437(){}
446 | public void test438(){}
447 | public void test439(){}
448 | public void test440(){}
449 | public void test441(){}
450 | public void test442(){}
451 | public void test443(){}
452 | public void test444(){}
453 | public void test445(){}
454 | public void test446(){}
455 | public void test447(){}
456 | public void test448(){}
457 | public void test449(){}
458 | public void test450(){}
459 | public void test451(){}
460 | public void test452(){}
461 | public void test453(){}
462 | public void test454(){}
463 | public void test455(){}
464 | public void test456(){}
465 | public void test457(){}
466 | public void test458(){}
467 | public void test459(){}
468 | public void test460(){}
469 | public void test461(){}
470 | public void test462(){}
471 | public void test463(){}
472 | public void test464(){}
473 | public void test465(){}
474 | public void test466(){}
475 | public void test467(){}
476 | public void test468(){}
477 | public void test469(){}
478 | public void test470(){}
479 | public void test471(){}
480 | public void test472(){}
481 | public void test473(){}
482 | public void test474(){}
483 | public void test475(){}
484 | public void test476(){}
485 | public void test477(){}
486 | public void test478(){}
487 | public void test479(){}
488 | public void test480(){}
489 | public void test481(){}
490 | public void test482(){}
491 | public void test483(){}
492 | public void test484(){}
493 | public void test485(){}
494 | public void test486(){}
495 | public void test487(){}
496 | public void test488(){}
497 | public void test489(){}
498 | public void test490(){}
499 | public void test491(){}
500 | public void test492(){}
501 | public void test493(){}
502 | public void test494(){}
503 | public void test495(){}
504 | public void test496(){}
505 | public void test497(){}
506 | public void test498(){}
507 | public void test499(){}
508 | }
509 |
--------------------------------------------------------------------------------
/demo/app/src/main/java/com/test/Test10.java:
--------------------------------------------------------------------------------
1 | package com.test;
2 |
3 | /**
4 | * @author zl
5 | * @time 2019/2/25 0025.
6 | */
7 | public class Test10 {
8 | public void test0(){}
9 | public void test1(){}
10 | public void test2(){}
11 | public void test3(){}
12 | public void test4(){}
13 | public void test5(){}
14 | public void test6(){}
15 | public void test7(){}
16 | public void test8(){}
17 | public void test9(){}
18 | public void test10(){}
19 | public void test11(){}
20 | public void test12(){}
21 | public void test13(){}
22 | public void test14(){}
23 | public void test15(){}
24 | public void test16(){}
25 | public void test17(){}
26 | public void test18(){}
27 | public void test19(){}
28 | public void test20(){}
29 | public void test21(){}
30 | public void test22(){}
31 | public void test23(){}
32 | public void test24(){}
33 | public void test25(){}
34 | public void test26(){}
35 | public void test27(){}
36 | public void test28(){}
37 | public void test29(){}
38 | public void test30(){}
39 | public void test31(){}
40 | public void test32(){}
41 | public void test33(){}
42 | public void test34(){}
43 | public void test35(){}
44 | public void test36(){}
45 | public void test37(){}
46 | public void test38(){}
47 | public void test39(){}
48 | public void test40(){}
49 | public void test41(){}
50 | public void test42(){}
51 | public void test43(){}
52 | public void test44(){}
53 | public void test45(){}
54 | public void test46(){}
55 | public void test47(){}
56 | public void test48(){}
57 | public void test49(){}
58 | public void test50(){}
59 | public void test51(){}
60 | public void test52(){}
61 | public void test53(){}
62 | public void test54(){}
63 | public void test55(){}
64 | public void test56(){}
65 | public void test57(){}
66 | public void test58(){}
67 | public void test59(){}
68 | public void test60(){}
69 | public void test61(){}
70 | public void test62(){}
71 | public void test63(){}
72 | public void test64(){}
73 | public void test65(){}
74 | public void test66(){}
75 | public void test67(){}
76 | public void test68(){}
77 | public void test69(){}
78 | public void test70(){}
79 | public void test71(){}
80 | public void test72(){}
81 | public void test73(){}
82 | public void test74(){}
83 | public void test75(){}
84 | public void test76(){}
85 | public void test77(){}
86 | public void test78(){}
87 | public void test79(){}
88 | public void test80(){}
89 | public void test81(){}
90 | public void test82(){}
91 | public void test83(){}
92 | public void test84(){}
93 | public void test85(){}
94 | public void test86(){}
95 | public void test87(){}
96 | public void test88(){}
97 | public void test89(){}
98 | public void test90(){}
99 | public void test91(){}
100 | public void test92(){}
101 | public void test93(){}
102 | public void test94(){}
103 | public void test95(){}
104 | public void test96(){}
105 | public void test97(){}
106 | public void test98(){}
107 | public void test99(){}
108 | public void test100(){}
109 | public void test101(){}
110 | public void test102(){}
111 | public void test103(){}
112 | public void test104(){}
113 | public void test105(){}
114 | public void test106(){}
115 | public void test107(){}
116 | public void test108(){}
117 | public void test109(){}
118 | public void test110(){}
119 | public void test111(){}
120 | public void test112(){}
121 | public void test113(){}
122 | public void test114(){}
123 | public void test115(){}
124 | public void test116(){}
125 | public void test117(){}
126 | public void test118(){}
127 | public void test119(){}
128 | public void test120(){}
129 | public void test121(){}
130 | public void test122(){}
131 | public void test123(){}
132 | public void test124(){}
133 | public void test125(){}
134 | public void test126(){}
135 | public void test127(){}
136 | public void test128(){}
137 | public void test129(){}
138 | public void test130(){}
139 | public void test131(){}
140 | public void test132(){}
141 | public void test133(){}
142 | public void test134(){}
143 | public void test135(){}
144 | public void test136(){}
145 | public void test137(){}
146 | public void test138(){}
147 | public void test139(){}
148 | public void test140(){}
149 | public void test141(){}
150 | public void test142(){}
151 | public void test143(){}
152 | public void test144(){}
153 | public void test145(){}
154 | public void test146(){}
155 | public void test147(){}
156 | public void test148(){}
157 | public void test149(){}
158 | public void test150(){}
159 | public void test151(){}
160 | public void test152(){}
161 | public void test153(){}
162 | public void test154(){}
163 | public void test155(){}
164 | public void test156(){}
165 | public void test157(){}
166 | public void test158(){}
167 | public void test159(){}
168 | public void test160(){}
169 | public void test161(){}
170 | public void test162(){}
171 | public void test163(){}
172 | public void test164(){}
173 | public void test165(){}
174 | public void test166(){}
175 | public void test167(){}
176 | public void test168(){}
177 | public void test169(){}
178 | public void test170(){}
179 | public void test171(){}
180 | public void test172(){}
181 | public void test173(){}
182 | public void test174(){}
183 | public void test175(){}
184 | public void test176(){}
185 | public void test177(){}
186 | public void test178(){}
187 | public void test179(){}
188 | public void test180(){}
189 | public void test181(){}
190 | public void test182(){}
191 | public void test183(){}
192 | public void test184(){}
193 | public void test185(){}
194 | public void test186(){}
195 | public void test187(){}
196 | public void test188(){}
197 | public void test189(){}
198 | public void test190(){}
199 | public void test191(){}
200 | public void test192(){}
201 | public void test193(){}
202 | public void test194(){}
203 | public void test195(){}
204 | public void test196(){}
205 | public void test197(){}
206 | public void test198(){}
207 | public void test199(){}
208 | public void test200(){}
209 | public void test201(){}
210 | public void test202(){}
211 | public void test203(){}
212 | public void test204(){}
213 | public void test205(){}
214 | public void test206(){}
215 | public void test207(){}
216 | public void test208(){}
217 | public void test209(){}
218 | public void test210(){}
219 | public void test211(){}
220 | public void test212(){}
221 | public void test213(){}
222 | public void test214(){}
223 | public void test215(){}
224 | public void test216(){}
225 | public void test217(){}
226 | public void test218(){}
227 | public void test219(){}
228 | public void test220(){}
229 | public void test221(){}
230 | public void test222(){}
231 | public void test223(){}
232 | public void test224(){}
233 | public void test225(){}
234 | public void test226(){}
235 | public void test227(){}
236 | public void test228(){}
237 | public void test229(){}
238 | public void test230(){}
239 | public void test231(){}
240 | public void test232(){}
241 | public void test233(){}
242 | public void test234(){}
243 | public void test235(){}
244 | public void test236(){}
245 | public void test237(){}
246 | public void test238(){}
247 | public void test239(){}
248 | public void test240(){}
249 | public void test241(){}
250 | public void test242(){}
251 | public void test243(){}
252 | public void test244(){}
253 | public void test245(){}
254 | public void test246(){}
255 | public void test247(){}
256 | public void test248(){}
257 | public void test249(){}
258 | public void test250(){}
259 | public void test251(){}
260 | public void test252(){}
261 | public void test253(){}
262 | public void test254(){}
263 | public void test255(){}
264 | public void test256(){}
265 | public void test257(){}
266 | public void test258(){}
267 | public void test259(){}
268 | public void test260(){}
269 | public void test261(){}
270 | public void test262(){}
271 | public void test263(){}
272 | public void test264(){}
273 | public void test265(){}
274 | public void test266(){}
275 | public void test267(){}
276 | public void test268(){}
277 | public void test269(){}
278 | public void test270(){}
279 | public void test271(){}
280 | public void test272(){}
281 | public void test273(){}
282 | public void test274(){}
283 | public void test275(){}
284 | public void test276(){}
285 | public void test277(){}
286 | public void test278(){}
287 | public void test279(){}
288 | public void test280(){}
289 | public void test281(){}
290 | public void test282(){}
291 | public void test283(){}
292 | public void test284(){}
293 | public void test285(){}
294 | public void test286(){}
295 | public void test287(){}
296 | public void test288(){}
297 | public void test289(){}
298 | public void test290(){}
299 | public void test291(){}
300 | public void test292(){}
301 | public void test293(){}
302 | public void test294(){}
303 | public void test295(){}
304 | public void test296(){}
305 | public void test297(){}
306 | public void test298(){}
307 | public void test299(){}
308 | public void test300(){}
309 | public void test301(){}
310 | public void test302(){}
311 | public void test303(){}
312 | public void test304(){}
313 | public void test305(){}
314 | public void test306(){}
315 | public void test307(){}
316 | public void test308(){}
317 | public void test309(){}
318 | public void test310(){}
319 | public void test311(){}
320 | public void test312(){}
321 | public void test313(){}
322 | public void test314(){}
323 | public void test315(){}
324 | public void test316(){}
325 | public void test317(){}
326 | public void test318(){}
327 | public void test319(){}
328 | public void test320(){}
329 | public void test321(){}
330 | public void test322(){}
331 | public void test323(){}
332 | public void test324(){}
333 | public void test325(){}
334 | public void test326(){}
335 | public void test327(){}
336 | public void test328(){}
337 | public void test329(){}
338 | public void test330(){}
339 | public void test331(){}
340 | public void test332(){}
341 | public void test333(){}
342 | public void test334(){}
343 | public void test335(){}
344 | public void test336(){}
345 | public void test337(){}
346 | public void test338(){}
347 | public void test339(){}
348 | public void test340(){}
349 | public void test341(){}
350 | public void test342(){}
351 | public void test343(){}
352 | public void test344(){}
353 | public void test345(){}
354 | public void test346(){}
355 | public void test347(){}
356 | public void test348(){}
357 | public void test349(){}
358 | public void test350(){}
359 | public void test351(){}
360 | public void test352(){}
361 | public void test353(){}
362 | public void test354(){}
363 | public void test355(){}
364 | public void test356(){}
365 | public void test357(){}
366 | public void test358(){}
367 | public void test359(){}
368 | public void test360(){}
369 | public void test361(){}
370 | public void test362(){}
371 | public void test363(){}
372 | public void test364(){}
373 | public void test365(){}
374 | public void test366(){}
375 | public void test367(){}
376 | public void test368(){}
377 | public void test369(){}
378 | public void test370(){}
379 | public void test371(){}
380 | public void test372(){}
381 | public void test373(){}
382 | public void test374(){}
383 | public void test375(){}
384 | public void test376(){}
385 | public void test377(){}
386 | public void test378(){}
387 | public void test379(){}
388 | public void test380(){}
389 | public void test381(){}
390 | public void test382(){}
391 | public void test383(){}
392 | public void test384(){}
393 | public void test385(){}
394 | public void test386(){}
395 | public void test387(){}
396 | public void test388(){}
397 | public void test389(){}
398 | public void test390(){}
399 | public void test391(){}
400 | public void test392(){}
401 | public void test393(){}
402 | public void test394(){}
403 | public void test395(){}
404 | public void test396(){}
405 | public void test397(){}
406 | public void test398(){}
407 | public void test399(){}
408 | public void test400(){}
409 | public void test401(){}
410 | public void test402(){}
411 | public void test403(){}
412 | public void test404(){}
413 | public void test405(){}
414 | public void test406(){}
415 | public void test407(){}
416 | public void test408(){}
417 | public void test409(){}
418 | public void test410(){}
419 | public void test411(){}
420 | public void test412(){}
421 | public void test413(){}
422 | public void test414(){}
423 | public void test415(){}
424 | public void test416(){}
425 | public void test417(){}
426 | public void test418(){}
427 | public void test419(){}
428 | public void test420(){}
429 | public void test421(){}
430 | public void test422(){}
431 | public void test423(){}
432 | public void test424(){}
433 | public void test425(){}
434 | public void test426(){}
435 | public void test427(){}
436 | public void test428(){}
437 | public void test429(){}
438 | public void test430(){}
439 | public void test431(){}
440 | public void test432(){}
441 | public void test433(){}
442 | public void test434(){}
443 | public void test435(){}
444 | public void test436(){}
445 | public void test437(){}
446 | public void test438(){}
447 | public void test439(){}
448 | public void test440(){}
449 | public void test441(){}
450 | public void test442(){}
451 | public void test443(){}
452 | public void test444(){}
453 | public void test445(){}
454 | public void test446(){}
455 | public void test447(){}
456 | public void test448(){}
457 | public void test449(){}
458 | public void test450(){}
459 | public void test451(){}
460 | public void test452(){}
461 | public void test453(){}
462 | public void test454(){}
463 | public void test455(){}
464 | public void test456(){}
465 | public void test457(){}
466 | public void test458(){}
467 | public void test459(){}
468 | public void test460(){}
469 | public void test461(){}
470 | public void test462(){}
471 | public void test463(){}
472 | public void test464(){}
473 | public void test465(){}
474 | public void test466(){}
475 | public void test467(){}
476 | public void test468(){}
477 | public void test469(){}
478 | public void test470(){}
479 | public void test471(){}
480 | public void test472(){}
481 | public void test473(){}
482 | public void test474(){}
483 | public void test475(){}
484 | public void test476(){}
485 | public void test477(){}
486 | public void test478(){}
487 | public void test479(){}
488 | public void test480(){}
489 | public void test481(){}
490 | public void test482(){}
491 | public void test483(){}
492 | public void test484(){}
493 | public void test485(){}
494 | public void test486(){}
495 | public void test487(){}
496 | public void test488(){}
497 | public void test489(){}
498 | public void test490(){}
499 | public void test491(){}
500 | public void test492(){}
501 | public void test493(){}
502 | public void test494(){}
503 | public void test495(){}
504 | public void test496(){}
505 | public void test497(){}
506 | public void test498(){}
507 | public void test499(){}
508 | }
509 |
--------------------------------------------------------------------------------
/demo/app/src/main/java/com/test/Test11.java:
--------------------------------------------------------------------------------
1 | package com.test;
2 |
3 | /**
4 | * @author zl
5 | * @time 2019/2/25 0025.
6 | */
7 | public class Test11 {
8 | public void test0(){}
9 | public void test1(){}
10 | public void test2(){}
11 | public void test3(){}
12 | public void test4(){}
13 | public void test5(){}
14 | public void test6(){}
15 | public void test7(){}
16 | public void test8(){}
17 | public void test9(){}
18 | public void test10(){}
19 | public void test11(){}
20 | public void test12(){}
21 | public void test13(){}
22 | public void test14(){}
23 | public void test15(){}
24 | public void test16(){}
25 | public void test17(){}
26 | public void test18(){}
27 | public void test19(){}
28 | public void test20(){}
29 | public void test21(){}
30 | public void test22(){}
31 | public void test23(){}
32 | public void test24(){}
33 | public void test25(){}
34 | public void test26(){}
35 | public void test27(){}
36 | public void test28(){}
37 | public void test29(){}
38 | public void test30(){}
39 | public void test31(){}
40 | public void test32(){}
41 | public void test33(){}
42 | public void test34(){}
43 | public void test35(){}
44 | public void test36(){}
45 | public void test37(){}
46 | public void test38(){}
47 | public void test39(){}
48 | public void test40(){}
49 | public void test41(){}
50 | public void test42(){}
51 | public void test43(){}
52 | public void test44(){}
53 | public void test45(){}
54 | public void test46(){}
55 | public void test47(){}
56 | public void test48(){}
57 | public void test49(){}
58 | public void test50(){}
59 | public void test51(){}
60 | public void test52(){}
61 | public void test53(){}
62 | public void test54(){}
63 | public void test55(){}
64 | public void test56(){}
65 | public void test57(){}
66 | public void test58(){}
67 | public void test59(){}
68 | public void test60(){}
69 | public void test61(){}
70 | public void test62(){}
71 | public void test63(){}
72 | public void test64(){}
73 | public void test65(){}
74 | public void test66(){}
75 | public void test67(){}
76 | public void test68(){}
77 | public void test69(){}
78 | public void test70(){}
79 | public void test71(){}
80 | public void test72(){}
81 | public void test73(){}
82 | public void test74(){}
83 | public void test75(){}
84 | public void test76(){}
85 | public void test77(){}
86 | public void test78(){}
87 | public void test79(){}
88 | public void test80(){}
89 | public void test81(){}
90 | public void test82(){}
91 | public void test83(){}
92 | public void test84(){}
93 | public void test85(){}
94 | public void test86(){}
95 | public void test87(){}
96 | public void test88(){}
97 | public void test89(){}
98 | public void test90(){}
99 | public void test91(){}
100 | public void test92(){}
101 | public void test93(){}
102 | public void test94(){}
103 | public void test95(){}
104 | public void test96(){}
105 | public void test97(){}
106 | public void test98(){}
107 | public void test99(){}
108 | public void test100(){}
109 | public void test101(){}
110 | public void test102(){}
111 | public void test103(){}
112 | public void test104(){}
113 | public void test105(){}
114 | public void test106(){}
115 | public void test107(){}
116 | public void test108(){}
117 | public void test109(){}
118 | public void test110(){}
119 | public void test111(){}
120 | public void test112(){}
121 | public void test113(){}
122 | public void test114(){}
123 | public void test115(){}
124 | public void test116(){}
125 | public void test117(){}
126 | public void test118(){}
127 | public void test119(){}
128 | public void test120(){}
129 | public void test121(){}
130 | public void test122(){}
131 | public void test123(){}
132 | public void test124(){}
133 | public void test125(){}
134 | public void test126(){}
135 | public void test127(){}
136 | public void test128(){}
137 | public void test129(){}
138 | public void test130(){}
139 | public void test131(){}
140 | public void test132(){}
141 | public void test133(){}
142 | public void test134(){}
143 | public void test135(){}
144 | public void test136(){}
145 | public void test137(){}
146 | public void test138(){}
147 | public void test139(){}
148 | public void test140(){}
149 | public void test141(){}
150 | public void test142(){}
151 | public void test143(){}
152 | public void test144(){}
153 | public void test145(){}
154 | public void test146(){}
155 | public void test147(){}
156 | public void test148(){}
157 | public void test149(){}
158 | public void test150(){}
159 | public void test151(){}
160 | public void test152(){}
161 | public void test153(){}
162 | public void test154(){}
163 | public void test155(){}
164 | public void test156(){}
165 | public void test157(){}
166 | public void test158(){}
167 | public void test159(){}
168 | public void test160(){}
169 | public void test161(){}
170 | public void test162(){}
171 | public void test163(){}
172 | public void test164(){}
173 | public void test165(){}
174 | public void test166(){}
175 | public void test167(){}
176 | public void test168(){}
177 | public void test169(){}
178 | public void test170(){}
179 | public void test171(){}
180 | public void test172(){}
181 | public void test173(){}
182 | public void test174(){}
183 | public void test175(){}
184 | public void test176(){}
185 | public void test177(){}
186 | public void test178(){}
187 | public void test179(){}
188 | public void test180(){}
189 | public void test181(){}
190 | public void test182(){}
191 | public void test183(){}
192 | public void test184(){}
193 | public void test185(){}
194 | public void test186(){}
195 | public void test187(){}
196 | public void test188(){}
197 | public void test189(){}
198 | public void test190(){}
199 | public void test191(){}
200 | public void test192(){}
201 | public void test193(){}
202 | public void test194(){}
203 | public void test195(){}
204 | public void test196(){}
205 | public void test197(){}
206 | public void test198(){}
207 | public void test199(){}
208 | public void test200(){}
209 | public void test201(){}
210 | public void test202(){}
211 | public void test203(){}
212 | public void test204(){}
213 | public void test205(){}
214 | public void test206(){}
215 | public void test207(){}
216 | public void test208(){}
217 | public void test209(){}
218 | public void test210(){}
219 | public void test211(){}
220 | public void test212(){}
221 | public void test213(){}
222 | public void test214(){}
223 | public void test215(){}
224 | public void test216(){}
225 | public void test217(){}
226 | public void test218(){}
227 | public void test219(){}
228 | public void test220(){}
229 | public void test221(){}
230 | public void test222(){}
231 | public void test223(){}
232 | public void test224(){}
233 | public void test225(){}
234 | public void test226(){}
235 | public void test227(){}
236 | public void test228(){}
237 | public void test229(){}
238 | public void test230(){}
239 | public void test231(){}
240 | public void test232(){}
241 | public void test233(){}
242 | public void test234(){}
243 | public void test235(){}
244 | public void test236(){}
245 | public void test237(){}
246 | public void test238(){}
247 | public void test239(){}
248 | public void test240(){}
249 | public void test241(){}
250 | public void test242(){}
251 | public void test243(){}
252 | public void test244(){}
253 | public void test245(){}
254 | public void test246(){}
255 | public void test247(){}
256 | public void test248(){}
257 | public void test249(){}
258 | public void test250(){}
259 | public void test251(){}
260 | public void test252(){}
261 | public void test253(){}
262 | public void test254(){}
263 | public void test255(){}
264 | public void test256(){}
265 | public void test257(){}
266 | public void test258(){}
267 | public void test259(){}
268 | public void test260(){}
269 | public void test261(){}
270 | public void test262(){}
271 | public void test263(){}
272 | public void test264(){}
273 | public void test265(){}
274 | public void test266(){}
275 | public void test267(){}
276 | public void test268(){}
277 | public void test269(){}
278 | public void test270(){}
279 | public void test271(){}
280 | public void test272(){}
281 | public void test273(){}
282 | public void test274(){}
283 | public void test275(){}
284 | public void test276(){}
285 | public void test277(){}
286 | public void test278(){}
287 | public void test279(){}
288 | public void test280(){}
289 | public void test281(){}
290 | public void test282(){}
291 | public void test283(){}
292 | public void test284(){}
293 | public void test285(){}
294 | public void test286(){}
295 | public void test287(){}
296 | public void test288(){}
297 | public void test289(){}
298 | public void test290(){}
299 | public void test291(){}
300 | public void test292(){}
301 | public void test293(){}
302 | public void test294(){}
303 | public void test295(){}
304 | public void test296(){}
305 | public void test297(){}
306 | public void test298(){}
307 | public void test299(){}
308 | public void test300(){}
309 | public void test301(){}
310 | public void test302(){}
311 | public void test303(){}
312 | public void test304(){}
313 | public void test305(){}
314 | public void test306(){}
315 | public void test307(){}
316 | public void test308(){}
317 | public void test309(){}
318 | public void test310(){}
319 | public void test311(){}
320 | public void test312(){}
321 | public void test313(){}
322 | public void test314(){}
323 | public void test315(){}
324 | public void test316(){}
325 | public void test317(){}
326 | public void test318(){}
327 | public void test319(){}
328 | public void test320(){}
329 | public void test321(){}
330 | public void test322(){}
331 | public void test323(){}
332 | public void test324(){}
333 | public void test325(){}
334 | public void test326(){}
335 | public void test327(){}
336 | public void test328(){}
337 | public void test329(){}
338 | public void test330(){}
339 | public void test331(){}
340 | public void test332(){}
341 | public void test333(){}
342 | public void test334(){}
343 | public void test335(){}
344 | public void test336(){}
345 | public void test337(){}
346 | public void test338(){}
347 | public void test339(){}
348 | public void test340(){}
349 | public void test341(){}
350 | public void test342(){}
351 | public void test343(){}
352 | public void test344(){}
353 | public void test345(){}
354 | public void test346(){}
355 | public void test347(){}
356 | public void test348(){}
357 | public void test349(){}
358 | public void test350(){}
359 | public void test351(){}
360 | public void test352(){}
361 | public void test353(){}
362 | public void test354(){}
363 | public void test355(){}
364 | public void test356(){}
365 | public void test357(){}
366 | public void test358(){}
367 | public void test359(){}
368 | public void test360(){}
369 | public void test361(){}
370 | public void test362(){}
371 | public void test363(){}
372 | public void test364(){}
373 | public void test365(){}
374 | public void test366(){}
375 | public void test367(){}
376 | public void test368(){}
377 | public void test369(){}
378 | public void test370(){}
379 | public void test371(){}
380 | public void test372(){}
381 | public void test373(){}
382 | public void test374(){}
383 | public void test375(){}
384 | public void test376(){}
385 | public void test377(){}
386 | public void test378(){}
387 | public void test379(){}
388 | public void test380(){}
389 | public void test381(){}
390 | public void test382(){}
391 | public void test383(){}
392 | public void test384(){}
393 | public void test385(){}
394 | public void test386(){}
395 | public void test387(){}
396 | public void test388(){}
397 | public void test389(){}
398 | public void test390(){}
399 | public void test391(){}
400 | public void test392(){}
401 | public void test393(){}
402 | public void test394(){}
403 | public void test395(){}
404 | public void test396(){}
405 | public void test397(){}
406 | public void test398(){}
407 | public void test399(){}
408 | public void test400(){}
409 | public void test401(){}
410 | public void test402(){}
411 | public void test403(){}
412 | public void test404(){}
413 | public void test405(){}
414 | public void test406(){}
415 | public void test407(){}
416 | public void test408(){}
417 | public void test409(){}
418 | public void test410(){}
419 | public void test411(){}
420 | public void test412(){}
421 | public void test413(){}
422 | public void test414(){}
423 | public void test415(){}
424 | public void test416(){}
425 | public void test417(){}
426 | public void test418(){}
427 | public void test419(){}
428 | public void test420(){}
429 | public void test421(){}
430 | public void test422(){}
431 | public void test423(){}
432 | public void test424(){}
433 | public void test425(){}
434 | public void test426(){}
435 | public void test427(){}
436 | public void test428(){}
437 | public void test429(){}
438 | public void test430(){}
439 | public void test431(){}
440 | public void test432(){}
441 | public void test433(){}
442 | public void test434(){}
443 | public void test435(){}
444 | public void test436(){}
445 | public void test437(){}
446 | public void test438(){}
447 | public void test439(){}
448 | public void test440(){}
449 | public void test441(){}
450 | public void test442(){}
451 | public void test443(){}
452 | public void test444(){}
453 | public void test445(){}
454 | public void test446(){}
455 | public void test447(){}
456 | public void test448(){}
457 | public void test449(){}
458 | public void test450(){}
459 | public void test451(){}
460 | public void test452(){}
461 | public void test453(){}
462 | public void test454(){}
463 | public void test455(){}
464 | public void test456(){}
465 | public void test457(){}
466 | public void test458(){}
467 | public void test459(){}
468 | public void test460(){}
469 | public void test461(){}
470 | public void test462(){}
471 | public void test463(){}
472 | public void test464(){}
473 | public void test465(){}
474 | public void test466(){}
475 | public void test467(){}
476 | public void test468(){}
477 | public void test469(){}
478 | public void test470(){}
479 | public void test471(){}
480 | public void test472(){}
481 | public void test473(){}
482 | public void test474(){}
483 | public void test475(){}
484 | public void test476(){}
485 | public void test477(){}
486 | public void test478(){}
487 | public void test479(){}
488 | public void test480(){}
489 | public void test481(){}
490 | public void test482(){}
491 | public void test483(){}
492 | public void test484(){}
493 | public void test485(){}
494 | public void test486(){}
495 | public void test487(){}
496 | public void test488(){}
497 | public void test489(){}
498 | public void test490(){}
499 | public void test491(){}
500 | public void test492(){}
501 | public void test493(){}
502 | public void test494(){}
503 | public void test495(){}
504 | public void test496(){}
505 | public void test497(){}
506 | public void test498(){}
507 | public void test499(){}
508 | }
509 |
--------------------------------------------------------------------------------
/demo/app/src/main/java/com/test/Test12.java:
--------------------------------------------------------------------------------
1 | package com.test;
2 |
3 | /**
4 | * @author zl
5 | * @time 2019/2/25 0025.
6 | */
7 | public class Test12 {
8 | public void test0(){}
9 | public void test1(){}
10 | public void test2(){}
11 | public void test3(){}
12 | public void test4(){}
13 | public void test5(){}
14 | public void test6(){}
15 | public void test7(){}
16 | public void test8(){}
17 | public void test9(){}
18 | public void test10(){}
19 | public void test11(){}
20 | public void test12(){}
21 | public void test13(){}
22 | public void test14(){}
23 | public void test15(){}
24 | public void test16(){}
25 | public void test17(){}
26 | public void test18(){}
27 | public void test19(){}
28 | public void test20(){}
29 | public void test21(){}
30 | public void test22(){}
31 | public void test23(){}
32 | public void test24(){}
33 | public void test25(){}
34 | public void test26(){}
35 | public void test27(){}
36 | public void test28(){}
37 | public void test29(){}
38 | public void test30(){}
39 | public void test31(){}
40 | public void test32(){}
41 | public void test33(){}
42 | public void test34(){}
43 | public void test35(){}
44 | public void test36(){}
45 | public void test37(){}
46 | public void test38(){}
47 | public void test39(){}
48 | public void test40(){}
49 | public void test41(){}
50 | public void test42(){}
51 | public void test43(){}
52 | public void test44(){}
53 | public void test45(){}
54 | public void test46(){}
55 | public void test47(){}
56 | public void test48(){}
57 | public void test49(){}
58 | public void test50(){}
59 | public void test51(){}
60 | public void test52(){}
61 | public void test53(){}
62 | public void test54(){}
63 | public void test55(){}
64 | public void test56(){}
65 | public void test57(){}
66 | public void test58(){}
67 | public void test59(){}
68 | public void test60(){}
69 | public void test61(){}
70 | public void test62(){}
71 | public void test63(){}
72 | public void test64(){}
73 | public void test65(){}
74 | public void test66(){}
75 | public void test67(){}
76 | public void test68(){}
77 | public void test69(){}
78 | public void test70(){}
79 | public void test71(){}
80 | public void test72(){}
81 | public void test73(){}
82 | public void test74(){}
83 | public void test75(){}
84 | public void test76(){}
85 | public void test77(){}
86 | public void test78(){}
87 | public void test79(){}
88 | public void test80(){}
89 | public void test81(){}
90 | public void test82(){}
91 | public void test83(){}
92 | public void test84(){}
93 | public void test85(){}
94 | public void test86(){}
95 | public void test87(){}
96 | public void test88(){}
97 | public void test89(){}
98 | public void test90(){}
99 | public void test91(){}
100 | public void test92(){}
101 | public void test93(){}
102 | public void test94(){}
103 | public void test95(){}
104 | public void test96(){}
105 | public void test97(){}
106 | public void test98(){}
107 | public void test99(){}
108 | public void test100(){}
109 | public void test101(){}
110 | public void test102(){}
111 | public void test103(){}
112 | public void test104(){}
113 | public void test105(){}
114 | public void test106(){}
115 | public void test107(){}
116 | public void test108(){}
117 | public void test109(){}
118 | public void test110(){}
119 | public void test111(){}
120 | public void test112(){}
121 | public void test113(){}
122 | public void test114(){}
123 | public void test115(){}
124 | public void test116(){}
125 | public void test117(){}
126 | public void test118(){}
127 | public void test119(){}
128 | public void test120(){}
129 | public void test121(){}
130 | public void test122(){}
131 | public void test123(){}
132 | public void test124(){}
133 | public void test125(){}
134 | public void test126(){}
135 | public void test127(){}
136 | public void test128(){}
137 | public void test129(){}
138 | public void test130(){}
139 | public void test131(){}
140 | public void test132(){}
141 | public void test133(){}
142 | public void test134(){}
143 | public void test135(){}
144 | public void test136(){}
145 | public void test137(){}
146 | public void test138(){}
147 | public void test139(){}
148 | public void test140(){}
149 | public void test141(){}
150 | public void test142(){}
151 | public void test143(){}
152 | public void test144(){}
153 | public void test145(){}
154 | public void test146(){}
155 | public void test147(){}
156 | public void test148(){}
157 | public void test149(){}
158 | public void test150(){}
159 | public void test151(){}
160 | public void test152(){}
161 | public void test153(){}
162 | public void test154(){}
163 | public void test155(){}
164 | public void test156(){}
165 | public void test157(){}
166 | public void test158(){}
167 | public void test159(){}
168 | public void test160(){}
169 | public void test161(){}
170 | public void test162(){}
171 | public void test163(){}
172 | public void test164(){}
173 | public void test165(){}
174 | public void test166(){}
175 | public void test167(){}
176 | public void test168(){}
177 | public void test169(){}
178 | public void test170(){}
179 | public void test171(){}
180 | public void test172(){}
181 | public void test173(){}
182 | public void test174(){}
183 | public void test175(){}
184 | public void test176(){}
185 | public void test177(){}
186 | public void test178(){}
187 | public void test179(){}
188 | public void test180(){}
189 | public void test181(){}
190 | public void test182(){}
191 | public void test183(){}
192 | public void test184(){}
193 | public void test185(){}
194 | public void test186(){}
195 | public void test187(){}
196 | public void test188(){}
197 | public void test189(){}
198 | public void test190(){}
199 | public void test191(){}
200 | public void test192(){}
201 | public void test193(){}
202 | public void test194(){}
203 | public void test195(){}
204 | public void test196(){}
205 | public void test197(){}
206 | public void test198(){}
207 | public void test199(){}
208 | public void test200(){}
209 | public void test201(){}
210 | public void test202(){}
211 | public void test203(){}
212 | public void test204(){}
213 | public void test205(){}
214 | public void test206(){}
215 | public void test207(){}
216 | public void test208(){}
217 | public void test209(){}
218 | public void test210(){}
219 | public void test211(){}
220 | public void test212(){}
221 | public void test213(){}
222 | public void test214(){}
223 | public void test215(){}
224 | public void test216(){}
225 | public void test217(){}
226 | public void test218(){}
227 | public void test219(){}
228 | public void test220(){}
229 | public void test221(){}
230 | public void test222(){}
231 | public void test223(){}
232 | public void test224(){}
233 | public void test225(){}
234 | public void test226(){}
235 | public void test227(){}
236 | public void test228(){}
237 | public void test229(){}
238 | public void test230(){}
239 | public void test231(){}
240 | public void test232(){}
241 | public void test233(){}
242 | public void test234(){}
243 | public void test235(){}
244 | public void test236(){}
245 | public void test237(){}
246 | public void test238(){}
247 | public void test239(){}
248 | public void test240(){}
249 | public void test241(){}
250 | public void test242(){}
251 | public void test243(){}
252 | public void test244(){}
253 | public void test245(){}
254 | public void test246(){}
255 | public void test247(){}
256 | public void test248(){}
257 | public void test249(){}
258 | public void test250(){}
259 | public void test251(){}
260 | public void test252(){}
261 | public void test253(){}
262 | public void test254(){}
263 | public void test255(){}
264 | public void test256(){}
265 | public void test257(){}
266 | public void test258(){}
267 | public void test259(){}
268 | public void test260(){}
269 | public void test261(){}
270 | public void test262(){}
271 | public void test263(){}
272 | public void test264(){}
273 | public void test265(){}
274 | public void test266(){}
275 | public void test267(){}
276 | public void test268(){}
277 | public void test269(){}
278 | public void test270(){}
279 | public void test271(){}
280 | public void test272(){}
281 | public void test273(){}
282 | public void test274(){}
283 | public void test275(){}
284 | public void test276(){}
285 | public void test277(){}
286 | public void test278(){}
287 | public void test279(){}
288 | public void test280(){}
289 | public void test281(){}
290 | public void test282(){}
291 | public void test283(){}
292 | public void test284(){}
293 | public void test285(){}
294 | public void test286(){}
295 | public void test287(){}
296 | public void test288(){}
297 | public void test289(){}
298 | public void test290(){}
299 | public void test291(){}
300 | public void test292(){}
301 | public void test293(){}
302 | public void test294(){}
303 | public void test295(){}
304 | public void test296(){}
305 | public void test297(){}
306 | public void test298(){}
307 | public void test299(){}
308 | public void test300(){}
309 | public void test301(){}
310 | public void test302(){}
311 | public void test303(){}
312 | public void test304(){}
313 | public void test305(){}
314 | public void test306(){}
315 | public void test307(){}
316 | public void test308(){}
317 | public void test309(){}
318 | public void test310(){}
319 | public void test311(){}
320 | public void test312(){}
321 | public void test313(){}
322 | public void test314(){}
323 | public void test315(){}
324 | public void test316(){}
325 | public void test317(){}
326 | public void test318(){}
327 | public void test319(){}
328 | public void test320(){}
329 | public void test321(){}
330 | public void test322(){}
331 | public void test323(){}
332 | public void test324(){}
333 | public void test325(){}
334 | public void test326(){}
335 | public void test327(){}
336 | public void test328(){}
337 | public void test329(){}
338 | public void test330(){}
339 | public void test331(){}
340 | public void test332(){}
341 | public void test333(){}
342 | public void test334(){}
343 | public void test335(){}
344 | public void test336(){}
345 | public void test337(){}
346 | public void test338(){}
347 | public void test339(){}
348 | public void test340(){}
349 | public void test341(){}
350 | public void test342(){}
351 | public void test343(){}
352 | public void test344(){}
353 | public void test345(){}
354 | public void test346(){}
355 | public void test347(){}
356 | public void test348(){}
357 | public void test349(){}
358 | public void test350(){}
359 | public void test351(){}
360 | public void test352(){}
361 | public void test353(){}
362 | public void test354(){}
363 | public void test355(){}
364 | public void test356(){}
365 | public void test357(){}
366 | public void test358(){}
367 | public void test359(){}
368 | public void test360(){}
369 | public void test361(){}
370 | public void test362(){}
371 | public void test363(){}
372 | public void test364(){}
373 | public void test365(){}
374 | public void test366(){}
375 | public void test367(){}
376 | public void test368(){}
377 | public void test369(){}
378 | public void test370(){}
379 | public void test371(){}
380 | public void test372(){}
381 | public void test373(){}
382 | public void test374(){}
383 | public void test375(){}
384 | public void test376(){}
385 | public void test377(){}
386 | public void test378(){}
387 | public void test379(){}
388 | public void test380(){}
389 | public void test381(){}
390 | public void test382(){}
391 | public void test383(){}
392 | public void test384(){}
393 | public void test385(){}
394 | public void test386(){}
395 | public void test387(){}
396 | public void test388(){}
397 | public void test389(){}
398 | public void test390(){}
399 | public void test391(){}
400 | public void test392(){}
401 | public void test393(){}
402 | public void test394(){}
403 | public void test395(){}
404 | public void test396(){}
405 | public void test397(){}
406 | public void test398(){}
407 | public void test399(){}
408 | public void test400(){}
409 | public void test401(){}
410 | public void test402(){}
411 | public void test403(){}
412 | public void test404(){}
413 | public void test405(){}
414 | public void test406(){}
415 | public void test407(){}
416 | public void test408(){}
417 | public void test409(){}
418 | public void test410(){}
419 | public void test411(){}
420 | public void test412(){}
421 | public void test413(){}
422 | public void test414(){}
423 | public void test415(){}
424 | public void test416(){}
425 | public void test417(){}
426 | public void test418(){}
427 | public void test419(){}
428 | public void test420(){}
429 | public void test421(){}
430 | public void test422(){}
431 | public void test423(){}
432 | public void test424(){}
433 | public void test425(){}
434 | public void test426(){}
435 | public void test427(){}
436 | public void test428(){}
437 | public void test429(){}
438 | public void test430(){}
439 | public void test431(){}
440 | public void test432(){}
441 | public void test433(){}
442 | public void test434(){}
443 | public void test435(){}
444 | public void test436(){}
445 | public void test437(){}
446 | public void test438(){}
447 | public void test439(){}
448 | public void test440(){}
449 | public void test441(){}
450 | public void test442(){}
451 | public void test443(){}
452 | public void test444(){}
453 | public void test445(){}
454 | public void test446(){}
455 | public void test447(){}
456 | public void test448(){}
457 | public void test449(){}
458 | public void test450(){}
459 | public void test451(){}
460 | public void test452(){}
461 | public void test453(){}
462 | public void test454(){}
463 | public void test455(){}
464 | public void test456(){}
465 | public void test457(){}
466 | public void test458(){}
467 | public void test459(){}
468 | public void test460(){}
469 | public void test461(){}
470 | public void test462(){}
471 | public void test463(){}
472 | public void test464(){}
473 | public void test465(){}
474 | public void test466(){}
475 | public void test467(){}
476 | public void test468(){}
477 | public void test469(){}
478 | public void test470(){}
479 | public void test471(){}
480 | public void test472(){}
481 | public void test473(){}
482 | public void test474(){}
483 | public void test475(){}
484 | public void test476(){}
485 | public void test477(){}
486 | public void test478(){}
487 | public void test479(){}
488 | public void test480(){}
489 | public void test481(){}
490 | public void test482(){}
491 | public void test483(){}
492 | public void test484(){}
493 | public void test485(){}
494 | public void test486(){}
495 | public void test487(){}
496 | public void test488(){}
497 | public void test489(){}
498 | public void test490(){}
499 | public void test491(){}
500 | public void test492(){}
501 | public void test493(){}
502 | public void test494(){}
503 | public void test495(){}
504 | public void test496(){}
505 | public void test497(){}
506 | public void test498(){}
507 | public void test499(){}
508 | }
509 |
--------------------------------------------------------------------------------
/demo/app/src/main/java/com/test/Test13.java:
--------------------------------------------------------------------------------
1 | package com.test;
2 |
3 | /**
4 | * @author zl
5 | * @time 2019/2/25 0025.
6 | */
7 | public class Test13 {
8 | public void test0(){}
9 | public void test1(){}
10 | public void test2(){}
11 | public void test3(){}
12 | public void test4(){}
13 | public void test5(){}
14 | public void test6(){}
15 | public void test7(){}
16 | public void test8(){}
17 | public void test9(){}
18 | public void test10(){}
19 | public void test11(){}
20 | public void test12(){}
21 | public void test13(){}
22 | public void test14(){}
23 | public void test15(){}
24 | public void test16(){}
25 | public void test17(){}
26 | public void test18(){}
27 | public void test19(){}
28 | public void test20(){}
29 | public void test21(){}
30 | public void test22(){}
31 | public void test23(){}
32 | public void test24(){}
33 | public void test25(){}
34 | public void test26(){}
35 | public void test27(){}
36 | public void test28(){}
37 | public void test29(){}
38 | public void test30(){}
39 | public void test31(){}
40 | public void test32(){}
41 | public void test33(){}
42 | public void test34(){}
43 | public void test35(){}
44 | public void test36(){}
45 | public void test37(){}
46 | public void test38(){}
47 | public void test39(){}
48 | public void test40(){}
49 | public void test41(){}
50 | public void test42(){}
51 | public void test43(){}
52 | public void test44(){}
53 | public void test45(){}
54 | public void test46(){}
55 | public void test47(){}
56 | public void test48(){}
57 | public void test49(){}
58 | public void test50(){}
59 | public void test51(){}
60 | public void test52(){}
61 | public void test53(){}
62 | public void test54(){}
63 | public void test55(){}
64 | public void test56(){}
65 | public void test57(){}
66 | public void test58(){}
67 | public void test59(){}
68 | public void test60(){}
69 | public void test61(){}
70 | public void test62(){}
71 | public void test63(){}
72 | public void test64(){}
73 | public void test65(){}
74 | public void test66(){}
75 | public void test67(){}
76 | public void test68(){}
77 | public void test69(){}
78 | public void test70(){}
79 | public void test71(){}
80 | public void test72(){}
81 | public void test73(){}
82 | public void test74(){}
83 | public void test75(){}
84 | public void test76(){}
85 | public void test77(){}
86 | public void test78(){}
87 | public void test79(){}
88 | public void test80(){}
89 | public void test81(){}
90 | public void test82(){}
91 | public void test83(){}
92 | public void test84(){}
93 | public void test85(){}
94 | public void test86(){}
95 | public void test87(){}
96 | public void test88(){}
97 | public void test89(){}
98 | public void test90(){}
99 | public void test91(){}
100 | public void test92(){}
101 | public void test93(){}
102 | public void test94(){}
103 | public void test95(){}
104 | public void test96(){}
105 | public void test97(){}
106 | public void test98(){}
107 | public void test99(){}
108 | public void test100(){}
109 | public void test101(){}
110 | public void test102(){}
111 | public void test103(){}
112 | public void test104(){}
113 | public void test105(){}
114 | public void test106(){}
115 | public void test107(){}
116 | public void test108(){}
117 | public void test109(){}
118 | public void test110(){}
119 | public void test111(){}
120 | public void test112(){}
121 | public void test113(){}
122 | public void test114(){}
123 | public void test115(){}
124 | public void test116(){}
125 | public void test117(){}
126 | public void test118(){}
127 | public void test119(){}
128 | public void test120(){}
129 | public void test121(){}
130 | public void test122(){}
131 | public void test123(){}
132 | public void test124(){}
133 | public void test125(){}
134 | public void test126(){}
135 | public void test127(){}
136 | public void test128(){}
137 | public void test129(){}
138 | public void test130(){}
139 | public void test131(){}
140 | public void test132(){}
141 | public void test133(){}
142 | public void test134(){}
143 | public void test135(){}
144 | public void test136(){}
145 | public void test137(){}
146 | public void test138(){}
147 | public void test139(){}
148 | public void test140(){}
149 | public void test141(){}
150 | public void test142(){}
151 | public void test143(){}
152 | public void test144(){}
153 | public void test145(){}
154 | public void test146(){}
155 | public void test147(){}
156 | public void test148(){}
157 | public void test149(){}
158 | public void test150(){}
159 | public void test151(){}
160 | public void test152(){}
161 | public void test153(){}
162 | public void test154(){}
163 | public void test155(){}
164 | public void test156(){}
165 | public void test157(){}
166 | public void test158(){}
167 | public void test159(){}
168 | public void test160(){}
169 | public void test161(){}
170 | public void test162(){}
171 | public void test163(){}
172 | public void test164(){}
173 | public void test165(){}
174 | public void test166(){}
175 | public void test167(){}
176 | public void test168(){}
177 | public void test169(){}
178 | public void test170(){}
179 | public void test171(){}
180 | public void test172(){}
181 | public void test173(){}
182 | public void test174(){}
183 | public void test175(){}
184 | public void test176(){}
185 | public void test177(){}
186 | public void test178(){}
187 | public void test179(){}
188 | public void test180(){}
189 | public void test181(){}
190 | public void test182(){}
191 | public void test183(){}
192 | public void test184(){}
193 | public void test185(){}
194 | public void test186(){}
195 | public void test187(){}
196 | public void test188(){}
197 | public void test189(){}
198 | public void test190(){}
199 | public void test191(){}
200 | public void test192(){}
201 | public void test193(){}
202 | public void test194(){}
203 | public void test195(){}
204 | public void test196(){}
205 | public void test197(){}
206 | public void test198(){}
207 | public void test199(){}
208 | public void test200(){}
209 | public void test201(){}
210 | public void test202(){}
211 | public void test203(){}
212 | public void test204(){}
213 | public void test205(){}
214 | public void test206(){}
215 | public void test207(){}
216 | public void test208(){}
217 | public void test209(){}
218 | public void test210(){}
219 | public void test211(){}
220 | public void test212(){}
221 | public void test213(){}
222 | public void test214(){}
223 | public void test215(){}
224 | public void test216(){}
225 | public void test217(){}
226 | public void test218(){}
227 | public void test219(){}
228 | public void test220(){}
229 | public void test221(){}
230 | public void test222(){}
231 | public void test223(){}
232 | public void test224(){}
233 | public void test225(){}
234 | public void test226(){}
235 | public void test227(){}
236 | public void test228(){}
237 | public void test229(){}
238 | public void test230(){}
239 | public void test231(){}
240 | public void test232(){}
241 | public void test233(){}
242 | public void test234(){}
243 | public void test235(){}
244 | public void test236(){}
245 | public void test237(){}
246 | public void test238(){}
247 | public void test239(){}
248 | public void test240(){}
249 | public void test241(){}
250 | public void test242(){}
251 | public void test243(){}
252 | public void test244(){}
253 | public void test245(){}
254 | public void test246(){}
255 | public void test247(){}
256 | public void test248(){}
257 | public void test249(){}
258 | public void test250(){}
259 | public void test251(){}
260 | public void test252(){}
261 | public void test253(){}
262 | public void test254(){}
263 | public void test255(){}
264 | public void test256(){}
265 | public void test257(){}
266 | public void test258(){}
267 | public void test259(){}
268 | public void test260(){}
269 | public void test261(){}
270 | public void test262(){}
271 | public void test263(){}
272 | public void test264(){}
273 | public void test265(){}
274 | public void test266(){}
275 | public void test267(){}
276 | public void test268(){}
277 | public void test269(){}
278 | public void test270(){}
279 | public void test271(){}
280 | public void test272(){}
281 | public void test273(){}
282 | public void test274(){}
283 | public void test275(){}
284 | public void test276(){}
285 | public void test277(){}
286 | public void test278(){}
287 | public void test279(){}
288 | public void test280(){}
289 | public void test281(){}
290 | public void test282(){}
291 | public void test283(){}
292 | public void test284(){}
293 | public void test285(){}
294 | public void test286(){}
295 | public void test287(){}
296 | public void test288(){}
297 | public void test289(){}
298 | public void test290(){}
299 | public void test291(){}
300 | public void test292(){}
301 | public void test293(){}
302 | public void test294(){}
303 | public void test295(){}
304 | public void test296(){}
305 | public void test297(){}
306 | public void test298(){}
307 | public void test299(){}
308 | public void test300(){}
309 | public void test301(){}
310 | public void test302(){}
311 | public void test303(){}
312 | public void test304(){}
313 | public void test305(){}
314 | public void test306(){}
315 | public void test307(){}
316 | public void test308(){}
317 | public void test309(){}
318 | public void test310(){}
319 | public void test311(){}
320 | public void test312(){}
321 | public void test313(){}
322 | public void test314(){}
323 | public void test315(){}
324 | public void test316(){}
325 | public void test317(){}
326 | public void test318(){}
327 | public void test319(){}
328 | public void test320(){}
329 | public void test321(){}
330 | public void test322(){}
331 | public void test323(){}
332 | public void test324(){}
333 | public void test325(){}
334 | public void test326(){}
335 | public void test327(){}
336 | public void test328(){}
337 | public void test329(){}
338 | public void test330(){}
339 | public void test331(){}
340 | public void test332(){}
341 | public void test333(){}
342 | public void test334(){}
343 | public void test335(){}
344 | public void test336(){}
345 | public void test337(){}
346 | public void test338(){}
347 | public void test339(){}
348 | public void test340(){}
349 | public void test341(){}
350 | public void test342(){}
351 | public void test343(){}
352 | public void test344(){}
353 | public void test345(){}
354 | public void test346(){}
355 | public void test347(){}
356 | public void test348(){}
357 | public void test349(){}
358 | public void test350(){}
359 | public void test351(){}
360 | public void test352(){}
361 | public void test353(){}
362 | public void test354(){}
363 | public void test355(){}
364 | public void test356(){}
365 | public void test357(){}
366 | public void test358(){}
367 | public void test359(){}
368 | public void test360(){}
369 | public void test361(){}
370 | public void test362(){}
371 | public void test363(){}
372 | public void test364(){}
373 | public void test365(){}
374 | public void test366(){}
375 | public void test367(){}
376 | public void test368(){}
377 | public void test369(){}
378 | public void test370(){}
379 | public void test371(){}
380 | public void test372(){}
381 | public void test373(){}
382 | public void test374(){}
383 | public void test375(){}
384 | public void test376(){}
385 | public void test377(){}
386 | public void test378(){}
387 | public void test379(){}
388 | public void test380(){}
389 | public void test381(){}
390 | public void test382(){}
391 | public void test383(){}
392 | public void test384(){}
393 | public void test385(){}
394 | public void test386(){}
395 | public void test387(){}
396 | public void test388(){}
397 | public void test389(){}
398 | public void test390(){}
399 | public void test391(){}
400 | public void test392(){}
401 | public void test393(){}
402 | public void test394(){}
403 | public void test395(){}
404 | public void test396(){}
405 | public void test397(){}
406 | public void test398(){}
407 | public void test399(){}
408 | public void test400(){}
409 | public void test401(){}
410 | public void test402(){}
411 | public void test403(){}
412 | public void test404(){}
413 | public void test405(){}
414 | public void test406(){}
415 | public void test407(){}
416 | public void test408(){}
417 | public void test409(){}
418 | public void test410(){}
419 | public void test411(){}
420 | public void test412(){}
421 | public void test413(){}
422 | public void test414(){}
423 | public void test415(){}
424 | public void test416(){}
425 | public void test417(){}
426 | public void test418(){}
427 | public void test419(){}
428 | public void test420(){}
429 | public void test421(){}
430 | public void test422(){}
431 | public void test423(){}
432 | public void test424(){}
433 | public void test425(){}
434 | public void test426(){}
435 | public void test427(){}
436 | public void test428(){}
437 | public void test429(){}
438 | public void test430(){}
439 | public void test431(){}
440 | public void test432(){}
441 | public void test433(){}
442 | public void test434(){}
443 | public void test435(){}
444 | public void test436(){}
445 | public void test437(){}
446 | public void test438(){}
447 | public void test439(){}
448 | public void test440(){}
449 | public void test441(){}
450 | public void test442(){}
451 | public void test443(){}
452 | public void test444(){}
453 | public void test445(){}
454 | public void test446(){}
455 | public void test447(){}
456 | public void test448(){}
457 | public void test449(){}
458 | public void test450(){}
459 | public void test451(){}
460 | public void test452(){}
461 | public void test453(){}
462 | public void test454(){}
463 | public void test455(){}
464 | public void test456(){}
465 | public void test457(){}
466 | public void test458(){}
467 | public void test459(){}
468 | public void test460(){}
469 | public void test461(){}
470 | public void test462(){}
471 | public void test463(){}
472 | public void test464(){}
473 | public void test465(){}
474 | public void test466(){}
475 | public void test467(){}
476 | public void test468(){}
477 | public void test469(){}
478 | public void test470(){}
479 | public void test471(){}
480 | public void test472(){}
481 | public void test473(){}
482 | public void test474(){}
483 | public void test475(){}
484 | public void test476(){}
485 | public void test477(){}
486 | public void test478(){}
487 | public void test479(){}
488 | public void test480(){}
489 | public void test481(){}
490 | public void test482(){}
491 | public void test483(){}
492 | public void test484(){}
493 | public void test485(){}
494 | public void test486(){}
495 | public void test487(){}
496 | public void test488(){}
497 | public void test489(){}
498 | public void test490(){}
499 | public void test491(){}
500 | public void test492(){}
501 | public void test493(){}
502 | public void test494(){}
503 | public void test495(){}
504 | public void test496(){}
505 | public void test497(){}
506 | public void test498(){}
507 | public void test499(){}
508 | }
509 |
--------------------------------------------------------------------------------
/demo/app/src/main/java/com/test/Test14.java:
--------------------------------------------------------------------------------
1 | package com.test;
2 |
3 | /**
4 | * @author zl
5 | * @time 2019/2/25 0025.
6 | */
7 | public class Test14 {
8 | public void test0(){}
9 | public void test1(){}
10 | public void test2(){}
11 | public void test3(){}
12 | public void test4(){}
13 | public void test5(){}
14 | public void test6(){}
15 | public void test7(){}
16 | public void test8(){}
17 | public void test9(){}
18 | public void test10(){}
19 | public void test11(){}
20 | public void test12(){}
21 | public void test13(){}
22 | public void test14(){}
23 | public void test15(){}
24 | public void test16(){}
25 | public void test17(){}
26 | public void test18(){}
27 | public void test19(){}
28 | public void test20(){}
29 | public void test21(){}
30 | public void test22(){}
31 | public void test23(){}
32 | public void test24(){}
33 | public void test25(){}
34 | public void test26(){}
35 | public void test27(){}
36 | public void test28(){}
37 | public void test29(){}
38 | public void test30(){}
39 | public void test31(){}
40 | public void test32(){}
41 | public void test33(){}
42 | public void test34(){}
43 | public void test35(){}
44 | public void test36(){}
45 | public void test37(){}
46 | public void test38(){}
47 | public void test39(){}
48 | public void test40(){}
49 | public void test41(){}
50 | public void test42(){}
51 | public void test43(){}
52 | public void test44(){}
53 | public void test45(){}
54 | public void test46(){}
55 | public void test47(){}
56 | public void test48(){}
57 | public void test49(){}
58 | public void test50(){}
59 | public void test51(){}
60 | public void test52(){}
61 | public void test53(){}
62 | public void test54(){}
63 | public void test55(){}
64 | public void test56(){}
65 | public void test57(){}
66 | public void test58(){}
67 | public void test59(){}
68 | public void test60(){}
69 | public void test61(){}
70 | public void test62(){}
71 | public void test63(){}
72 | public void test64(){}
73 | public void test65(){}
74 | public void test66(){}
75 | public void test67(){}
76 | public void test68(){}
77 | public void test69(){}
78 | public void test70(){}
79 | public void test71(){}
80 | public void test72(){}
81 | public void test73(){}
82 | public void test74(){}
83 | public void test75(){}
84 | public void test76(){}
85 | public void test77(){}
86 | public void test78(){}
87 | public void test79(){}
88 | public void test80(){}
89 | public void test81(){}
90 | public void test82(){}
91 | public void test83(){}
92 | public void test84(){}
93 | public void test85(){}
94 | public void test86(){}
95 | public void test87(){}
96 | public void test88(){}
97 | public void test89(){}
98 | public void test90(){}
99 | public void test91(){}
100 | public void test92(){}
101 | public void test93(){}
102 | public void test94(){}
103 | public void test95(){}
104 | public void test96(){}
105 | public void test97(){}
106 | public void test98(){}
107 | public void test99(){}
108 | public void test100(){}
109 | public void test101(){}
110 | public void test102(){}
111 | public void test103(){}
112 | public void test104(){}
113 | public void test105(){}
114 | public void test106(){}
115 | public void test107(){}
116 | public void test108(){}
117 | public void test109(){}
118 | public void test110(){}
119 | public void test111(){}
120 | public void test112(){}
121 | public void test113(){}
122 | public void test114(){}
123 | public void test115(){}
124 | public void test116(){}
125 | public void test117(){}
126 | public void test118(){}
127 | public void test119(){}
128 | public void test120(){}
129 | public void test121(){}
130 | public void test122(){}
131 | public void test123(){}
132 | public void test124(){}
133 | public void test125(){}
134 | public void test126(){}
135 | public void test127(){}
136 | public void test128(){}
137 | public void test129(){}
138 | public void test130(){}
139 | public void test131(){}
140 | public void test132(){}
141 | public void test133(){}
142 | public void test134(){}
143 | public void test135(){}
144 | public void test136(){}
145 | public void test137(){}
146 | public void test138(){}
147 | public void test139(){}
148 | public void test140(){}
149 | public void test141(){}
150 | public void test142(){}
151 | public void test143(){}
152 | public void test144(){}
153 | public void test145(){}
154 | public void test146(){}
155 | public void test147(){}
156 | public void test148(){}
157 | public void test149(){}
158 | public void test150(){}
159 | public void test151(){}
160 | public void test152(){}
161 | public void test153(){}
162 | public void test154(){}
163 | public void test155(){}
164 | public void test156(){}
165 | public void test157(){}
166 | public void test158(){}
167 | public void test159(){}
168 | public void test160(){}
169 | public void test161(){}
170 | public void test162(){}
171 | public void test163(){}
172 | public void test164(){}
173 | public void test165(){}
174 | public void test166(){}
175 | public void test167(){}
176 | public void test168(){}
177 | public void test169(){}
178 | public void test170(){}
179 | public void test171(){}
180 | public void test172(){}
181 | public void test173(){}
182 | public void test174(){}
183 | public void test175(){}
184 | public void test176(){}
185 | public void test177(){}
186 | public void test178(){}
187 | public void test179(){}
188 | public void test180(){}
189 | public void test181(){}
190 | public void test182(){}
191 | public void test183(){}
192 | public void test184(){}
193 | public void test185(){}
194 | public void test186(){}
195 | public void test187(){}
196 | public void test188(){}
197 | public void test189(){}
198 | public void test190(){}
199 | public void test191(){}
200 | public void test192(){}
201 | public void test193(){}
202 | public void test194(){}
203 | public void test195(){}
204 | public void test196(){}
205 | public void test197(){}
206 | public void test198(){}
207 | public void test199(){}
208 | public void test200(){}
209 | public void test201(){}
210 | public void test202(){}
211 | public void test203(){}
212 | public void test204(){}
213 | public void test205(){}
214 | public void test206(){}
215 | public void test207(){}
216 | public void test208(){}
217 | public void test209(){}
218 | public void test210(){}
219 | public void test211(){}
220 | public void test212(){}
221 | public void test213(){}
222 | public void test214(){}
223 | public void test215(){}
224 | public void test216(){}
225 | public void test217(){}
226 | public void test218(){}
227 | public void test219(){}
228 | public void test220(){}
229 | public void test221(){}
230 | public void test222(){}
231 | public void test223(){}
232 | public void test224(){}
233 | public void test225(){}
234 | public void test226(){}
235 | public void test227(){}
236 | public void test228(){}
237 | public void test229(){}
238 | public void test230(){}
239 | public void test231(){}
240 | public void test232(){}
241 | public void test233(){}
242 | public void test234(){}
243 | public void test235(){}
244 | public void test236(){}
245 | public void test237(){}
246 | public void test238(){}
247 | public void test239(){}
248 | public void test240(){}
249 | public void test241(){}
250 | public void test242(){}
251 | public void test243(){}
252 | public void test244(){}
253 | public void test245(){}
254 | public void test246(){}
255 | public void test247(){}
256 | public void test248(){}
257 | public void test249(){}
258 | public void test250(){}
259 | public void test251(){}
260 | public void test252(){}
261 | public void test253(){}
262 | public void test254(){}
263 | public void test255(){}
264 | public void test256(){}
265 | public void test257(){}
266 | public void test258(){}
267 | public void test259(){}
268 | public void test260(){}
269 | public void test261(){}
270 | public void test262(){}
271 | public void test263(){}
272 | public void test264(){}
273 | public void test265(){}
274 | public void test266(){}
275 | public void test267(){}
276 | public void test268(){}
277 | public void test269(){}
278 | public void test270(){}
279 | public void test271(){}
280 | public void test272(){}
281 | public void test273(){}
282 | public void test274(){}
283 | public void test275(){}
284 | public void test276(){}
285 | public void test277(){}
286 | public void test278(){}
287 | public void test279(){}
288 | public void test280(){}
289 | public void test281(){}
290 | public void test282(){}
291 | public void test283(){}
292 | public void test284(){}
293 | public void test285(){}
294 | public void test286(){}
295 | public void test287(){}
296 | public void test288(){}
297 | public void test289(){}
298 | public void test290(){}
299 | public void test291(){}
300 | public void test292(){}
301 | public void test293(){}
302 | public void test294(){}
303 | public void test295(){}
304 | public void test296(){}
305 | public void test297(){}
306 | public void test298(){}
307 | public void test299(){}
308 | public void test300(){}
309 | public void test301(){}
310 | public void test302(){}
311 | public void test303(){}
312 | public void test304(){}
313 | public void test305(){}
314 | public void test306(){}
315 | public void test307(){}
316 | public void test308(){}
317 | public void test309(){}
318 | public void test310(){}
319 | public void test311(){}
320 | public void test312(){}
321 | public void test313(){}
322 | public void test314(){}
323 | public void test315(){}
324 | public void test316(){}
325 | public void test317(){}
326 | public void test318(){}
327 | public void test319(){}
328 | public void test320(){}
329 | public void test321(){}
330 | public void test322(){}
331 | public void test323(){}
332 | public void test324(){}
333 | public void test325(){}
334 | public void test326(){}
335 | public void test327(){}
336 | public void test328(){}
337 | public void test329(){}
338 | public void test330(){}
339 | public void test331(){}
340 | public void test332(){}
341 | public void test333(){}
342 | public void test334(){}
343 | public void test335(){}
344 | public void test336(){}
345 | public void test337(){}
346 | public void test338(){}
347 | public void test339(){}
348 | public void test340(){}
349 | public void test341(){}
350 | public void test342(){}
351 | public void test343(){}
352 | public void test344(){}
353 | public void test345(){}
354 | public void test346(){}
355 | public void test347(){}
356 | public void test348(){}
357 | public void test349(){}
358 | public void test350(){}
359 | public void test351(){}
360 | public void test352(){}
361 | public void test353(){}
362 | public void test354(){}
363 | public void test355(){}
364 | public void test356(){}
365 | public void test357(){}
366 | public void test358(){}
367 | public void test359(){}
368 | public void test360(){}
369 | public void test361(){}
370 | public void test362(){}
371 | public void test363(){}
372 | public void test364(){}
373 | public void test365(){}
374 | public void test366(){}
375 | public void test367(){}
376 | public void test368(){}
377 | public void test369(){}
378 | public void test370(){}
379 | public void test371(){}
380 | public void test372(){}
381 | public void test373(){}
382 | public void test374(){}
383 | public void test375(){}
384 | public void test376(){}
385 | public void test377(){}
386 | public void test378(){}
387 | public void test379(){}
388 | public void test380(){}
389 | public void test381(){}
390 | public void test382(){}
391 | public void test383(){}
392 | public void test384(){}
393 | public void test385(){}
394 | public void test386(){}
395 | public void test387(){}
396 | public void test388(){}
397 | public void test389(){}
398 | public void test390(){}
399 | public void test391(){}
400 | public void test392(){}
401 | public void test393(){}
402 | public void test394(){}
403 | public void test395(){}
404 | public void test396(){}
405 | public void test397(){}
406 | public void test398(){}
407 | public void test399(){}
408 | public void test400(){}
409 | public void test401(){}
410 | public void test402(){}
411 | public void test403(){}
412 | public void test404(){}
413 | public void test405(){}
414 | public void test406(){}
415 | public void test407(){}
416 | public void test408(){}
417 | public void test409(){}
418 | public void test410(){}
419 | public void test411(){}
420 | public void test412(){}
421 | public void test413(){}
422 | public void test414(){}
423 | public void test415(){}
424 | public void test416(){}
425 | public void test417(){}
426 | public void test418(){}
427 | public void test419(){}
428 | public void test420(){}
429 | public void test421(){}
430 | public void test422(){}
431 | public void test423(){}
432 | public void test424(){}
433 | public void test425(){}
434 | public void test426(){}
435 | public void test427(){}
436 | public void test428(){}
437 | public void test429(){}
438 | public void test430(){}
439 | public void test431(){}
440 | public void test432(){}
441 | public void test433(){}
442 | public void test434(){}
443 | public void test435(){}
444 | public void test436(){}
445 | public void test437(){}
446 | public void test438(){}
447 | public void test439(){}
448 | public void test440(){}
449 | public void test441(){}
450 | public void test442(){}
451 | public void test443(){}
452 | public void test444(){}
453 | public void test445(){}
454 | public void test446(){}
455 | public void test447(){}
456 | public void test448(){}
457 | public void test449(){}
458 | public void test450(){}
459 | public void test451(){}
460 | public void test452(){}
461 | public void test453(){}
462 | public void test454(){}
463 | public void test455(){}
464 | public void test456(){}
465 | public void test457(){}
466 | public void test458(){}
467 | public void test459(){}
468 | public void test460(){}
469 | public void test461(){}
470 | public void test462(){}
471 | public void test463(){}
472 | public void test464(){}
473 | public void test465(){}
474 | public void test466(){}
475 | public void test467(){}
476 | public void test468(){}
477 | public void test469(){}
478 | public void test470(){}
479 | public void test471(){}
480 | public void test472(){}
481 | public void test473(){}
482 | public void test474(){}
483 | public void test475(){}
484 | public void test476(){}
485 | public void test477(){}
486 | public void test478(){}
487 | public void test479(){}
488 | public void test480(){}
489 | public void test481(){}
490 | public void test482(){}
491 | public void test483(){}
492 | public void test484(){}
493 | public void test485(){}
494 | public void test486(){}
495 | public void test487(){}
496 | public void test488(){}
497 | public void test489(){}
498 | public void test490(){}
499 | public void test491(){}
500 | public void test492(){}
501 | public void test493(){}
502 | public void test494(){}
503 | public void test495(){}
504 | public void test496(){}
505 | public void test497(){}
506 | public void test498(){}
507 | public void test499(){}
508 | }
509 |
--------------------------------------------------------------------------------
/demo/app/src/main/java/com/xiyou/demo/MainActivity.java:
--------------------------------------------------------------------------------
1 | package com.xiyou.demo;
2 |
3 | import android.app.Activity;
4 | import android.os.Bundle;
5 | import android.util.Log;
6 | import android.view.ViewConfiguration;
7 |
8 | import com.test.Test299;
9 |
10 | public class MainActivity extends Activity {
11 | @Override
12 | public void onCreate(Bundle savedInstanceState) {
13 | super.onCreate(savedInstanceState);
14 | setContentView(R.layout.activity_main);
15 | Log.d("PreviewProject", ViewConfiguration.get(this).getScaledTouchSlop()+"");
16 | Log.d("PreviewProject","call onCreate");
17 | new Test299().test0();
18 | try {
19 | Thread.sleep(200000);
20 | } catch (InterruptedException e) {
21 | e.printStackTrace();
22 | }
23 | }
24 |
25 | @Override
26 | protected void onSaveInstanceState(Bundle outState) {
27 | super.onSaveInstanceState(outState);
28 | Log.d("PreviewProject","call onSaveInstanceState");
29 | }
30 |
31 | @Override
32 | protected void onRestoreInstanceState(Bundle savedInstanceState) {
33 | super.onRestoreInstanceState(savedInstanceState);
34 | Log.d("PreviewProject","call onRestoreInstanceState");
35 | }
36 |
37 | @Override
38 | protected void onResume() {
39 | super.onResume();
40 | Log.d("PreviewProject","call onResume");
41 | }
42 |
43 | @Override
44 | protected void onPause() {
45 | super.onPause();
46 | Log.d("PreviewProject","call onPause");
47 | }
48 |
49 | @Override
50 | protected void onStop() {
51 | super.onStop();
52 | Log.d("PreviewProject","call onStop");
53 | }
54 | }
--------------------------------------------------------------------------------
/demo/app/src/main/java/com/xiyou/demo/MyApplication.java:
--------------------------------------------------------------------------------
1 | package com.xiyou.demo;
2 |
3 | import android.app.Application;
4 | import android.content.Context;
5 | import android.util.Log;
6 |
7 | /**
8 | * @author zl
9 | * @time 2019/2/26 0026.
10 | */
11 | public class MyApplication extends Application {
12 | @Override
13 | protected void attachBaseContext(Context base) {
14 | super.attachBaseContext(base);
15 | Log.d("PreviewProject","MyApplication call attachBaseContext");
16 | }
17 |
18 | @Override
19 | public void onCreate() {
20 | super.onCreate();
21 | Log.d("PreviewProject","MyApplication call onCreate");
22 |
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/demo/app/src/main/res/drawable/a.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ray-tianfeng/dex-shell/7623c3b16d4c36bf0cb941255603891a259826fd/demo/app/src/main/res/drawable/a.jpg
--------------------------------------------------------------------------------
/demo/app/src/main/res/drawable/app_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ray-tianfeng/dex-shell/7623c3b16d4c36bf0cb941255603891a259826fd/demo/app/src/main/res/drawable/app_icon.png
--------------------------------------------------------------------------------
/demo/app/src/main/res/drawable/b.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ray-tianfeng/dex-shell/7623c3b16d4c36bf0cb941255603891a259826fd/demo/app/src/main/res/drawable/b.jpg
--------------------------------------------------------------------------------
/demo/app/src/main/res/drawable/c.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ray-tianfeng/dex-shell/7623c3b16d4c36bf0cb941255603891a259826fd/demo/app/src/main/res/drawable/c.jpg
--------------------------------------------------------------------------------
/demo/app/src/main/res/drawable/e.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ray-tianfeng/dex-shell/7623c3b16d4c36bf0cb941255603891a259826fd/demo/app/src/main/res/drawable/e.jpg
--------------------------------------------------------------------------------
/demo/app/src/main/res/drawable/f.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ray-tianfeng/dex-shell/7623c3b16d4c36bf0cb941255603891a259826fd/demo/app/src/main/res/drawable/f.jpg
--------------------------------------------------------------------------------
/demo/app/src/main/res/drawable/g.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ray-tianfeng/dex-shell/7623c3b16d4c36bf0cb941255603891a259826fd/demo/app/src/main/res/drawable/g.jpg
--------------------------------------------------------------------------------
/demo/app/src/main/res/drawable/h.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ray-tianfeng/dex-shell/7623c3b16d4c36bf0cb941255603891a259826fd/demo/app/src/main/res/drawable/h.jpg
--------------------------------------------------------------------------------
/demo/app/src/main/res/drawable/i.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ray-tianfeng/dex-shell/7623c3b16d4c36bf0cb941255603891a259826fd/demo/app/src/main/res/drawable/i.jpg
--------------------------------------------------------------------------------
/demo/app/src/main/res/layout/activity_main.xml:
--------------------------------------------------------------------------------
1 |
2 |
10 |
16 |
17 |
--------------------------------------------------------------------------------
/demo/build.gradle:
--------------------------------------------------------------------------------
1 | // Top-level build file where you can add configuration options common to all sub-projects/modules.
2 |
3 | buildscript {
4 | repositories {
5 | jcenter()
6 | }
7 | dependencies {
8 | classpath 'com.android.tools.build:gradle:2.3.3'
9 |
10 | // NOTE: Do not place your application dependencies here; they belong
11 | // in the individual module build.gradle files
12 | }
13 | }
14 |
15 | allprojects {
16 | repositories {
17 | jcenter()
18 | }
19 | }
20 |
21 | task clean(type: Delete) {
22 | delete rootProject.buildDir
23 | }
24 |
--------------------------------------------------------------------------------
/demo/gradle.properties:
--------------------------------------------------------------------------------
1 | # Project-wide Gradle settings.
2 |
3 | # IDE (e.g. Android Studio) users:
4 | # Gradle settings configured through the IDE *will override*
5 | # any settings specified in this file.
6 |
7 | # For more details on how to configure your build environment visit
8 | # http://www.gradle.org/docs/current/userguide/build_environment.html
9 |
10 | # Specifies the JVM arguments used for the daemon process.
11 | # The setting is particularly useful for tweaking memory settings.
12 | org.gradle.jvmargs=-Xmx1536m
13 |
14 | # When configured, Gradle will run in incubating parallel mode.
15 | # This option should only be used with decoupled projects. More details, visit
16 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
17 | # org.gradle.parallel=true
18 |
--------------------------------------------------------------------------------
/demo/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ray-tianfeng/dex-shell/7623c3b16d4c36bf0cb941255603891a259826fd/demo/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/demo/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Mon Feb 25 17:21:25 GMT+08:00 2019
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip
7 |
--------------------------------------------------------------------------------
/demo/gradlew:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | ##############################################################################
4 | ##
5 | ## Gradle start up script for UN*X
6 | ##
7 | ##############################################################################
8 |
9 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
10 | DEFAULT_JVM_OPTS=""
11 |
12 | APP_NAME="Gradle"
13 | APP_BASE_NAME=`basename "$0"`
14 |
15 | # Use the maximum available, or set MAX_FD != -1 to use that value.
16 | MAX_FD="maximum"
17 |
18 | warn ( ) {
19 | echo "$*"
20 | }
21 |
22 | die ( ) {
23 | echo
24 | echo "$*"
25 | echo
26 | exit 1
27 | }
28 |
29 | # OS specific support (must be 'true' or 'false').
30 | cygwin=false
31 | msys=false
32 | darwin=false
33 | case "`uname`" in
34 | CYGWIN* )
35 | cygwin=true
36 | ;;
37 | Darwin* )
38 | darwin=true
39 | ;;
40 | MINGW* )
41 | msys=true
42 | ;;
43 | esac
44 |
45 | # Attempt to set APP_HOME
46 | # Resolve links: $0 may be a link
47 | PRG="$0"
48 | # Need this for relative symlinks.
49 | while [ -h "$PRG" ] ; do
50 | ls=`ls -ld "$PRG"`
51 | link=`expr "$ls" : '.*-> \(.*\)$'`
52 | if expr "$link" : '/.*' > /dev/null; then
53 | PRG="$link"
54 | else
55 | PRG=`dirname "$PRG"`"/$link"
56 | fi
57 | done
58 | SAVED="`pwd`"
59 | cd "`dirname \"$PRG\"`/" >/dev/null
60 | APP_HOME="`pwd -P`"
61 | cd "$SAVED" >/dev/null
62 |
63 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
64 |
65 | # Determine the Java command to use to start the JVM.
66 | if [ -n "$JAVA_HOME" ] ; then
67 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
68 | # IBM's JDK on AIX uses strange locations for the executables
69 | JAVACMD="$JAVA_HOME/jre/sh/java"
70 | else
71 | JAVACMD="$JAVA_HOME/bin/java"
72 | fi
73 | if [ ! -x "$JAVACMD" ] ; then
74 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
75 |
76 | Please set the JAVA_HOME variable in your environment to match the
77 | location of your Java installation."
78 | fi
79 | else
80 | JAVACMD="java"
81 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
82 |
83 | Please set the JAVA_HOME variable in your environment to match the
84 | location of your Java installation."
85 | fi
86 |
87 | # Increase the maximum file descriptors if we can.
88 | if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
89 | MAX_FD_LIMIT=`ulimit -H -n`
90 | if [ $? -eq 0 ] ; then
91 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
92 | MAX_FD="$MAX_FD_LIMIT"
93 | fi
94 | ulimit -n $MAX_FD
95 | if [ $? -ne 0 ] ; then
96 | warn "Could not set maximum file descriptor limit: $MAX_FD"
97 | fi
98 | else
99 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
100 | fi
101 | fi
102 |
103 | # For Darwin, add options to specify how the application appears in the dock
104 | if $darwin; then
105 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
106 | fi
107 |
108 | # For Cygwin, switch paths to Windows format before running java
109 | if $cygwin ; then
110 | APP_HOME=`cygpath --path --mixed "$APP_HOME"`
111 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
112 | JAVACMD=`cygpath --unix "$JAVACMD"`
113 |
114 | # We build the pattern for arguments to be converted via cygpath
115 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
116 | SEP=""
117 | for dir in $ROOTDIRSRAW ; do
118 | ROOTDIRS="$ROOTDIRS$SEP$dir"
119 | SEP="|"
120 | done
121 | OURCYGPATTERN="(^($ROOTDIRS))"
122 | # Add a user-defined pattern to the cygpath arguments
123 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then
124 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
125 | fi
126 | # Now convert the arguments - kludge to limit ourselves to /bin/sh
127 | i=0
128 | for arg in "$@" ; do
129 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
130 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
131 |
132 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
133 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
134 | else
135 | eval `echo args$i`="\"$arg\""
136 | fi
137 | i=$((i+1))
138 | done
139 | case $i in
140 | (0) set -- ;;
141 | (1) set -- "$args0" ;;
142 | (2) set -- "$args0" "$args1" ;;
143 | (3) set -- "$args0" "$args1" "$args2" ;;
144 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
145 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
146 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
147 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
148 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
149 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
150 | esac
151 | fi
152 |
153 | # Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
154 | function splitJvmOpts() {
155 | JVM_OPTS=("$@")
156 | }
157 | eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
158 | JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
159 |
160 | exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
161 |
--------------------------------------------------------------------------------
/demo/gradlew.bat:
--------------------------------------------------------------------------------
1 | @if "%DEBUG%" == "" @echo off
2 | @rem ##########################################################################
3 | @rem
4 | @rem Gradle startup script for Windows
5 | @rem
6 | @rem ##########################################################################
7 |
8 | @rem Set local scope for the variables with windows NT shell
9 | if "%OS%"=="Windows_NT" setlocal
10 |
11 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
12 | set DEFAULT_JVM_OPTS=
13 |
14 | set DIRNAME=%~dp0
15 | if "%DIRNAME%" == "" set DIRNAME=.
16 | set APP_BASE_NAME=%~n0
17 | set APP_HOME=%DIRNAME%
18 |
19 | @rem Find java.exe
20 | if defined JAVA_HOME goto findJavaFromJavaHome
21 |
22 | set JAVA_EXE=java.exe
23 | %JAVA_EXE% -version >NUL 2>&1
24 | if "%ERRORLEVEL%" == "0" goto init
25 |
26 | echo.
27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
28 | echo.
29 | echo Please set the JAVA_HOME variable in your environment to match the
30 | echo location of your Java installation.
31 |
32 | goto fail
33 |
34 | :findJavaFromJavaHome
35 | set JAVA_HOME=%JAVA_HOME:"=%
36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
37 |
38 | if exist "%JAVA_EXE%" goto init
39 |
40 | echo.
41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
42 | echo.
43 | echo Please set the JAVA_HOME variable in your environment to match the
44 | echo location of your Java installation.
45 |
46 | goto fail
47 |
48 | :init
49 | @rem Get command-line arguments, handling Windowz variants
50 |
51 | if not "%OS%" == "Windows_NT" goto win9xME_args
52 | if "%@eval[2+2]" == "4" goto 4NT_args
53 |
54 | :win9xME_args
55 | @rem Slurp the command line arguments.
56 | set CMD_LINE_ARGS=
57 | set _SKIP=2
58 |
59 | :win9xME_args_slurp
60 | if "x%~1" == "x" goto execute
61 |
62 | set CMD_LINE_ARGS=%*
63 | goto execute
64 |
65 | :4NT_args
66 | @rem Get arguments from the 4NT Shell from JP Software
67 | set CMD_LINE_ARGS=%$
68 |
69 | :execute
70 | @rem Setup the command line
71 |
72 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
73 |
74 | @rem Execute Gradle
75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
76 |
77 | :end
78 | @rem End local scope for the variables with windows NT shell
79 | if "%ERRORLEVEL%"=="0" goto mainEnd
80 |
81 | :fail
82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
83 | rem the _cmd.exe /c_ return code!
84 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
85 | exit /b 1
86 |
87 | :mainEnd
88 | if "%OS%"=="Windows_NT" endlocal
89 |
90 | :omega
91 |
--------------------------------------------------------------------------------
/demo/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
2 |
--------------------------------------------------------------------------------
/img/dex_structure.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ray-tianfeng/dex-shell/7623c3b16d4c36bf0cb941255603891a259826fd/img/dex_structure.png
--------------------------------------------------------------------------------
/img/effect.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ray-tianfeng/dex-shell/7623c3b16d4c36bf0cb941255603891a259826fd/img/effect.jpg
--------------------------------------------------------------------------------
/shell_util/.idea/compiler.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/shell_util/.idea/description.html:
--------------------------------------------------------------------------------
1 | Simple Java application that includes a class with main()
method
--------------------------------------------------------------------------------
/shell_util/.idea/encodings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/shell_util/.idea/libraries/fastjson_1_2_29.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/shell_util/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/shell_util/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/shell_util/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/shell_util/libs/fastjson-1.2.29.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ray-tianfeng/dex-shell/7623c3b16d4c36bf0cb941255603891a259826fd/shell_util/libs/fastjson-1.2.29.jar
--------------------------------------------------------------------------------
/shell_util/out/production/shell_util/com/test/Main.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ray-tianfeng/dex-shell/7623c3b16d4c36bf0cb941255603891a259826fd/shell_util/out/production/shell_util/com/test/Main.class
--------------------------------------------------------------------------------
/shell_util/out/production/shell_util/com/utils/AndroidXmlUtils.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ray-tianfeng/dex-shell/7623c3b16d4c36bf0cb941255603891a259826fd/shell_util/out/production/shell_util/com/utils/AndroidXmlUtils.class
--------------------------------------------------------------------------------
/shell_util/out/production/shell_util/com/utils/ApkShellUtils.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ray-tianfeng/dex-shell/7623c3b16d4c36bf0cb941255603891a259826fd/shell_util/out/production/shell_util/com/utils/ApkShellUtils.class
--------------------------------------------------------------------------------
/shell_util/out/production/shell_util/com/utils/ApkToolUtils.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ray-tianfeng/dex-shell/7623c3b16d4c36bf0cb941255603891a259826fd/shell_util/out/production/shell_util/com/utils/ApkToolUtils.class
--------------------------------------------------------------------------------
/shell_util/out/production/shell_util/com/utils/CmdExecutor$StreamGobbler.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ray-tianfeng/dex-shell/7623c3b16d4c36bf0cb941255603891a259826fd/shell_util/out/production/shell_util/com/utils/CmdExecutor$StreamGobbler.class
--------------------------------------------------------------------------------
/shell_util/out/production/shell_util/com/utils/CmdExecutor.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ray-tianfeng/dex-shell/7623c3b16d4c36bf0cb941255603891a259826fd/shell_util/out/production/shell_util/com/utils/CmdExecutor.class
--------------------------------------------------------------------------------
/shell_util/out/production/shell_util/com/utils/Constant.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ray-tianfeng/dex-shell/7623c3b16d4c36bf0cb941255603891a259826fd/shell_util/out/production/shell_util/com/utils/Constant.class
--------------------------------------------------------------------------------
/shell_util/out/production/shell_util/com/utils/DexFile.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ray-tianfeng/dex-shell/7623c3b16d4c36bf0cb941255603891a259826fd/shell_util/out/production/shell_util/com/utils/DexFile.class
--------------------------------------------------------------------------------
/shell_util/out/production/shell_util/com/utils/FileUtils.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ray-tianfeng/dex-shell/7623c3b16d4c36bf0cb941255603891a259826fd/shell_util/out/production/shell_util/com/utils/FileUtils.class
--------------------------------------------------------------------------------
/shell_util/out/production/shell_util/com/utils/SecurityUtils.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ray-tianfeng/dex-shell/7623c3b16d4c36bf0cb941255603891a259826fd/shell_util/out/production/shell_util/com/utils/SecurityUtils.class
--------------------------------------------------------------------------------
/shell_util/out/production/shell_util/com/utils/SignUtils$Keystore.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ray-tianfeng/dex-shell/7623c3b16d4c36bf0cb941255603891a259826fd/shell_util/out/production/shell_util/com/utils/SignUtils$Keystore.class
--------------------------------------------------------------------------------
/shell_util/out/production/shell_util/com/utils/SignUtils.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ray-tianfeng/dex-shell/7623c3b16d4c36bf0cb941255603891a259826fd/shell_util/out/production/shell_util/com/utils/SignUtils.class
--------------------------------------------------------------------------------
/shell_util/shell_util.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/shell_util/src/com/test/Main.java:
--------------------------------------------------------------------------------
1 | package com.test;
2 |
3 | import com.utils.ApkShellUtils;
4 | import com.utils.FileUtils;
5 |
6 | import java.io.*;
7 | import java.util.Scanner;
8 |
9 | public class Main {
10 |
11 | private static String primaryApkPath = "G:\\demo\\shell\\demo.apk";
12 | private static String outShellApkPath = "G:\\demo\\shell\\shell_demo.apk";
13 | private static String unShellApkPath = "G:\\demo\\shell\\unshell.apk";
14 | public static void main(String[] args) {
15 | try {
16 | if(!FileUtils.isExit(primaryApkPath, unShellApkPath)){
17 | System.out.println("file is null");
18 | return;
19 | }
20 | FileUtils.delete("G:\\demo\\shell\\demo");
21 | FileUtils.delete("G:\\demo\\shell\\unshell");
22 | FileUtils.delete(outShellApkPath);
23 | ApkShellUtils.apkShell(primaryApkPath,unShellApkPath,outShellApkPath);
24 | // FileUtils.unZip(primaryApkPath,"G:\\demo\\shell\\demo");
25 | } catch (Exception e) {
26 | e.printStackTrace();
27 | }
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/shell_util/src/com/utils/AndroidXmlUtils.java:
--------------------------------------------------------------------------------
1 | package com.utils;
2 |
3 | import org.w3c.dom.Document;
4 | import org.w3c.dom.Element;
5 | import org.xml.sax.SAXException;
6 |
7 | import javax.xml.parsers.DocumentBuilder;
8 | import javax.xml.parsers.DocumentBuilderFactory;
9 | import javax.xml.parsers.ParserConfigurationException;
10 | import javax.xml.transform.*;
11 | import javax.xml.transform.dom.DOMSource;
12 | import javax.xml.transform.stream.StreamResult;
13 | import java.io.IOException;
14 |
15 | /**
16 | * Created by zoulong on 2019/2/26 0026.
17 | */
18 | public class AndroidXmlUtils {
19 | private static final String NS = "http://schemas.android.com/apk/res/android";
20 | public static String readApplicationName(String manifestPath) throws ParserConfigurationException, IOException, SAXException {
21 | DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
22 | factory.setValidating(true);
23 | factory.setNamespaceAware(true);
24 | DocumentBuilder builder = factory.newDocumentBuilder();
25 | Document document = builder.parse(manifestPath);
26 | Element element = document.getDocumentElement();
27 | Element applicationElement = (Element)element.getElementsByTagName("application").item(0);
28 | if(applicationElement.hasAttributeNS(NS,"name")){
29 | return applicationElement.getAttributeNodeNS(NS,"name").getValue();
30 | }else{
31 | return null;
32 | }
33 | }
34 |
35 | public static void changeApplicationName(String manifestPath, String newName) throws ParserConfigurationException, IOException, SAXException, TransformerException {
36 | DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
37 | factory.setValidating(true);
38 | factory.setNamespaceAware(true);
39 | DocumentBuilder builder = factory.newDocumentBuilder();
40 | Document document = builder.parse(manifestPath);
41 | Element element = document.getDocumentElement();
42 | Element applicationElement = (Element)element.getElementsByTagName("application").item(0);
43 | if(applicationElement.hasAttribute("name")){
44 | applicationElement.getAttributeNodeNS(NS,"name").setValue(newName);
45 | }else{
46 | applicationElement.setAttribute("android:name",newName);
47 | }
48 |
49 | writeXmlToLocal(document,manifestPath);
50 | }
51 |
52 |
53 | public static void addMateData(String manifestPath,String name,String value) throws ParserConfigurationException, IOException, SAXException, TransformerException {
54 | DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
55 | factory.setValidating(true);
56 | factory.setNamespaceAware(true);
57 | DocumentBuilder builder = factory.newDocumentBuilder();
58 | Document document = builder.parse(manifestPath);
59 | Element element = document.getDocumentElement();
60 | Element applicationElement = (Element)element.getElementsByTagName("application").item(0);
61 | Element mateDataElement = document.createElement("meta-data");
62 | mateDataElement.setAttribute("android:name",name);
63 | mateDataElement.setAttribute("android:value",value);
64 | applicationElement.appendChild(mateDataElement);
65 | writeXmlToLocal(document,manifestPath);
66 | }
67 |
68 | private static void writeXmlToLocal(Document document, String outXmlPath) throws TransformerException {
69 | TransformerFactory tff = TransformerFactory.newInstance();
70 | Transformer tf = tff.newTransformer();
71 | tf.setOutputProperty(OutputKeys.INDENT,"yes");
72 | tf.transform(new DOMSource(document),new StreamResult(outXmlPath));
73 | }
74 | }
75 |
--------------------------------------------------------------------------------
/shell_util/src/com/utils/ApkShellUtils.java:
--------------------------------------------------------------------------------
1 | package com.utils;
2 |
3 | import com.alibaba.fastjson.JSON;
4 |
5 | import javax.crypto.BadPaddingException;
6 | import javax.crypto.IllegalBlockSizeException;
7 | import javax.crypto.NoSuchPaddingException;
8 | import java.io.*;
9 | import java.security.InvalidKeyException;
10 | import java.security.MessageDigest;
11 | import java.security.NoSuchAlgorithmException;
12 | import java.util.ArrayList;
13 | import java.util.zip.Adler32;
14 |
15 | /**
16 | * Created by zoulong on 2019/2/25 0025.
17 | */
18 | public class ApkShellUtils {
19 |
20 | /**
21 | * 给apk加壳
22 | * @param primaryApkPath 原apk
23 | * @param unShellApkPath 解壳apk
24 | * @param outApkPath 加壳后新APK
25 | * @throws Exception
26 | */
27 | public static void apkShell(String primaryApkPath,String unShellApkPath,String outApkPath) throws Exception{
28 | if(!FileUtils.isExit(primaryApkPath, unShellApkPath)){
29 | throw new RuntimeException("check params");
30 | }
31 | //解压原apk
32 | String unPrimaryApkDstPath = primaryApkPath.replace(".apk", "");
33 | ApkToolUtils.decompile(primaryApkPath, unPrimaryApkDstPath);
34 | String primaryManifestPath = unPrimaryApkDstPath + File.separator + "AndroidManifest.xml";
35 |
36 | //解压解壳apk
37 | String unShellApkDstPath = unShellApkPath.replace(".apk", "");
38 | ApkToolUtils.decompile(unShellApkPath, unShellApkDstPath);
39 | String unShellManifestPath = unShellApkDstPath + File.separator + "AndroidManifest.xml";
40 | String unShellDexPath = unShellApkDstPath + File.separator + "classes.dex";
41 | File unShellFile = new File(unShellDexPath);
42 |
43 |
44 | File unApkDir = new File(unPrimaryApkDstPath);
45 | ArrayList dexArray = new ArrayList();
46 | for(File file : unApkDir.listFiles()){//读取解壳后的dex
47 | if(file.getName().endsWith(".dex")){
48 | dexArray.add(file);
49 | }
50 | }
51 | String shellDexPath = unPrimaryApkDstPath + File.separator + "classes.dex";
52 | shellDex(dexArray, unShellFile, shellDexPath);//生产新的dex(加壳)
53 |
54 | String mateInfPath = unPrimaryApkDstPath + File.separator +"META-INF";//删除meta-inf,重新签名后会生成
55 | FileUtils.delete(mateInfPath);
56 |
57 | for(File file : dexArray){//清理多余dex文件
58 | if(file.getName().equals("classes.dex")){
59 | continue;
60 | }
61 | FileUtils.delete(file.getAbsolutePath());
62 | }
63 |
64 | String unShellApplicationName = AndroidXmlUtils.readApplicationName(unShellManifestPath);//解壳ApplicationName
65 | String primaryApplicationName = AndroidXmlUtils.readApplicationName(primaryManifestPath);//原applicationName
66 | AndroidXmlUtils.changeApplicationName(primaryManifestPath, unShellApplicationName);//改变原Applicationname为解壳ApplicationName
67 | if(primaryApplicationName != null){//将原ApplicationName写入mateData中,解壳application中会读取并替换应用Application
68 | AndroidXmlUtils.addMateData(primaryManifestPath, "APPLICATION_CLASS_NAME", primaryApplicationName);
69 | }
70 | //回编,回编系统最好是linux
71 | ApkToolUtils.compile(unPrimaryApkDstPath,outApkPath);
72 | //v1签名
73 | SignUtils.V1(outApkPath, SignUtils.getDefaultKeystore());
74 | //清理目录
75 | FileUtils.delete(unPrimaryApkDstPath);
76 | FileUtils.delete(unShellApkDstPath);
77 | }
78 |
79 | /**
80 | * 给dex加壳
81 | * @param primaryDexs 原dex集合
82 | * @param unShellDex 解壳dex
83 | * @param shellDexPath 生成新的dex路径
84 | * @throws IOException
85 | * @throws NoSuchAlgorithmException
86 | * @throws InvalidKeyException
87 | * @throws BadPaddingException
88 | * @throws NoSuchPaddingException
89 | * @throws IllegalBlockSizeException
90 | */
91 | private static void shellDex(ArrayList primaryDexs, File unShellDex, String shellDexPath) throws IOException, NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, NoSuchPaddingException, IllegalBlockSizeException {
92 | int primaryDexLen = 0;
93 | ArrayList dexFileInfos = new ArrayList<>(primaryDexs.size());
94 | for(File file : primaryDexs){//计算所有primary的长度
95 | DexFile dexFile = new DexFile(file.getName(),encryptionAES(readFileBytes(file)));
96 | dexFileInfos.add(dexFile);
97 | primaryDexLen += dexFile.getDexLength();
98 | }
99 | byte[] unShellDexFileByte = readFileBytes(unShellDex);
100 | int unShellDexLen = unShellDexFileByte.length;//解壳dex长度
101 |
102 | String dexFileComment = JSON.toJSONString(dexFileInfos);//原dexs描述
103 | int dexFileCommentLen = dexFileComment.getBytes().length;//dexs描述长度
104 |
105 | int totalLen = primaryDexLen+dexFileCommentLen + unShellDexLen+4;//新dex总长度
106 | byte[] shellDex = new byte[totalLen];
107 |
108 | System.arraycopy(unShellDexFileByte,0,shellDex,0,unShellDexLen);//先拷贝解壳dex
109 |
110 | int currentCopyIndex = unShellDexLen;
111 | for(DexFile dexFile : dexFileInfos){//拷贝原dexs
112 | System.arraycopy(dexFile.getData(),0,shellDex,currentCopyIndex,dexFile.getDexLength());
113 | currentCopyIndex += dexFile.getDexLength();
114 | }
115 |
116 | System.arraycopy(dexFileComment.getBytes(),0,shellDex,currentCopyIndex,dexFileCommentLen);//加入dexs描述
117 |
118 | System.arraycopy(intToByte(dexFileCommentLen),0,shellDex,totalLen-4,4);//描述长度
119 | fixFileSizeHeader(shellDex);//修改dex头 file_size值
120 | fixSHA1Header(shellDex);//修改dex头 sha1值
121 | fixCheckSumHeader(shellDex);//修改dex头,CheckSum 校验码
122 |
123 | // 把内容写到 newDexFile
124 | File file = new File(shellDexPath);
125 | if (!file.exists()) {
126 | file.createNewFile();
127 | }
128 |
129 | FileOutputStream localFileOutputStream = new FileOutputStream(shellDexPath);
130 | localFileOutputStream.write(shellDex);
131 | localFileOutputStream.flush();
132 | localFileOutputStream.close();
133 | }
134 |
135 |
136 | //在此做数据加密
137 | private static byte[] encryptionAES(byte[] data) throws IllegalBlockSizeException, InvalidKeyException, BadPaddingException, NoSuchAlgorithmException, NoSuchPaddingException {
138 |
139 | return SecurityUtils.AESEncryption(Constant.AES_PRIVATE_KEY,Constant.AES_IV,Constant.AES_TYPE,data);
140 | }
141 |
142 | /**
143 | * 修改dex头,CheckSum 校验码
144 | *
145 | * @param dexBytes
146 | */
147 | private static void fixCheckSumHeader(byte[] dexBytes) {
148 | Adler32 adler = new Adler32();
149 | adler.update(dexBytes, 12, dexBytes.length - 12);// 从12到文件末尾计算校验码
150 | long value = adler.getValue();
151 | int va = (int) value;
152 | byte[] newcs = intToByte(va);
153 | // 高位在前,低位在前掉个个
154 | byte[] recs = new byte[4];
155 | for (int i = 0; i < 4; i++) {
156 | recs[i] = newcs[newcs.length - 1 - i];
157 |
158 | }
159 | System.arraycopy(recs, 0, dexBytes, 8, 4);// 效验码赋值(8-11)
160 | }
161 |
162 | /**
163 | * 修改dex头 sha1值
164 | *
165 | * @param dexBytes
166 | * @throws NoSuchAlgorithmException
167 | */
168 | private static void fixSHA1Header(byte[] dexBytes)
169 | throws NoSuchAlgorithmException {
170 | MessageDigest md = MessageDigest.getInstance("SHA-1");
171 | md.update(dexBytes, 32, dexBytes.length - 32);// 从32为到结束计算sha--1
172 | byte[] newdt = md.digest();
173 | System.arraycopy(newdt, 0, dexBytes, 12, 20);// 修改sha-1值(12-31)
174 | // 输出sha-1值,可有可无
175 | String hexstr = "";
176 | for (int i = 0; i < newdt.length; i++) {
177 | hexstr += Integer.toString((newdt[i] & 0xff) + 0x100, 16)
178 | .substring(1);
179 | }
180 | System.out.println("sha-1 值:" + hexstr);
181 |
182 | }
183 |
184 |
185 | /**
186 | * int 转byte[]
187 | *
188 | * @param number
189 | * @return
190 | */
191 | public static byte[] intToByte(int number) {
192 | byte[] b = new byte[4];
193 | for (int i = 3; i >= 0; i--) {
194 | b[i] = (byte) (number % 256);
195 | number >>= 8;
196 | }
197 | return b;
198 | }
199 |
200 | /**
201 | * 修改dex头 file_size值
202 | *
203 | * @param dexBytes
204 | */
205 | private static void fixFileSizeHeader(byte[] dexBytes) {
206 | // 新文件长度
207 | byte[] newfs = intToByte(dexBytes.length);
208 |
209 | byte[] refs = new byte[4];
210 | // 高位在前,低位在前掉个个
211 | for (int i = 0; i < 4; i++) {
212 | refs[i] = newfs[newfs.length - 1 - i];
213 |
214 | }
215 | System.arraycopy(refs, 0, dexBytes, 32, 4);// 修改(32-35)
216 | System.out.println();
217 | }
218 |
219 | /**
220 | * 以二进制读出文件内容
221 | *
222 | * @param file
223 | * @return
224 | * @throws IOException
225 | */
226 | @SuppressWarnings("resource")
227 | private static byte[] readFileBytes(File file) throws IOException {
228 | byte[] arrayOfByte = new byte[1024];
229 | ByteArrayOutputStream localByteArrayOutputStream = new ByteArrayOutputStream();
230 | FileInputStream fis = new FileInputStream(file);
231 | while (true) {
232 | int i = fis.read(arrayOfByte);
233 | if (i != -1) {
234 | localByteArrayOutputStream.write(arrayOfByte, 0, i);
235 | } else {
236 | fis.close();
237 | return localByteArrayOutputStream.toByteArray();
238 | }
239 | }
240 | }
241 | }
242 |
--------------------------------------------------------------------------------
/shell_util/src/com/utils/ApkToolUtils.java:
--------------------------------------------------------------------------------
1 | package com.utils;
2 |
3 | import java.io.IOException;
4 |
5 | /**
6 | * Created by zoulong on 2019/2/26 0026.
7 | */
8 | public class ApkToolUtils {
9 | private static final String APKTOOL_PATH = "tools/apktool/apktool.jar";
10 | public static boolean decompile(String apkPath,String outPath) throws IOException, InterruptedException {
11 | String cmd = "java -jar %s -s d %s -o %s";
12 | cmd = String.format(cmd, new String[]{APKTOOL_PATH, apkPath, outPath});
13 | CmdExecutor.executor(cmd);
14 | return true;
15 | }
16 |
17 | public static boolean compile(String apkDir, String outPath) throws IOException, InterruptedException {
18 | String cmd = "java -jar %s b %s -o %s";
19 | cmd = String.format(cmd, new String[]{APKTOOL_PATH, apkDir, outPath});
20 | CmdExecutor.executor(cmd);
21 | return true;
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/shell_util/src/com/utils/CmdExecutor.java:
--------------------------------------------------------------------------------
1 | package com.utils;
2 |
3 | import java.io.BufferedReader;
4 | import java.io.IOException;
5 | import java.io.InputStream;
6 | import java.io.InputStreamReader;
7 |
8 | public class CmdExecutor {
9 |
10 | public static boolean executor(String executeStr) throws IOException, InterruptedException {
11 | return executor(executeStr,"GB2312");
12 | }
13 |
14 | public static boolean executor(String executeStr,String character) throws IOException, InterruptedException {
15 | System.out.println("执行命令:"+executeStr);
16 | Process p = Runtime.getRuntime().exec(executeStr);
17 | StreamGobbler errorGobbler = new StreamGobbler(p.getErrorStream(),character);
18 | errorGobbler.start();
19 |
20 | StreamGobbler outGobbler = new StreamGobbler(p.getInputStream(),character);
21 | outGobbler.start();
22 | int executorResultCode = p.waitFor();
23 | System.out.println("进程执行返回值:"+executorResultCode);
24 | if(executorResultCode!=0){
25 | System.out.println("操作系统错误代码0:成功\n操作系统错误代码1:操作不允许\n操作系统错误代码2:没有这样的文件或目录\n操作系统错误代码3:没有这样的过程\n" +
26 | "操作系统错误代码4:中断的系统调用\n操作系统错误代码5:输入/输出错误\n操作系统错误代码6:没有这样的设备或地址\n操作系统错误代码7:参数列表太长\n" +
27 | "操作系统错误代码8:执行格式错误\n操作系统错误代码9:坏的文件描述符\n操作系统错误代码10:无子过程");
28 | }
29 | return executorResultCode==0;
30 | }
31 |
32 | private static class StreamGobbler extends Thread {
33 | private InputStream is;
34 | private String character;
35 |
36 | public StreamGobbler(InputStream is, String character) {
37 | this.is = is;
38 | this.character = character;
39 | }
40 |
41 | public void run() {
42 | InputStreamReader isr = null;
43 | BufferedReader br = null;
44 | try {
45 | isr = new InputStreamReader(is,character);
46 | br = new BufferedReader(isr);
47 | String line=null;
48 | while ( (line = br.readLine()) != null) {
49 | System.out.println(line);
50 | }
51 | } catch (IOException ioe) {
52 | ioe.printStackTrace();
53 | } finally{
54 | try {
55 | br.close();
56 | isr.close();
57 | } catch (Exception e) {
58 | e.printStackTrace();
59 | }
60 |
61 | }
62 | }
63 | }
64 | }
65 |
--------------------------------------------------------------------------------
/shell_util/src/com/utils/Constant.java:
--------------------------------------------------------------------------------
1 | package com.utils;
2 |
3 | /**
4 | * Created by zoulong on 2019/2/26 0026.
5 | */
6 | public class Constant {
7 | public static final String AES_IV = "1234567898765432";//16位
8 | public static final String AES_TYPE = "AES/ECB/PKCS5Padding";//填充类型
9 | //私钥
10 | public static final String AES_PRIVATE_KEY="1111222233334444";//AES固定格式为128/192/256 bits.即:16/24/32bytes。DES固定格式为128bits,即8bytes。
11 | }
12 |
--------------------------------------------------------------------------------
/shell_util/src/com/utils/DexFile.java:
--------------------------------------------------------------------------------
1 | package com.utils;
2 |
3 | import com.alibaba.fastjson.annotation.JSONField;
4 |
5 | /**
6 | * Created by zoulong on 2019/2/25 0025.
7 | */
8 | public class DexFile {
9 | private String dexName;
10 | private int dexLength;
11 | //使用transient 和 serialize = false效果等同
12 | @JSONField(serialize = false)
13 | private byte[] data;
14 | public DexFile() {
15 | }
16 |
17 | public DexFile(String dexName, byte[] data) {
18 | this.dexName = dexName;
19 | this.dexLength = data.length;
20 | this.data = data;
21 | }
22 |
23 | public String getDexName() {
24 | return dexName;
25 | }
26 |
27 | public void setDexName(String dexName) {
28 | this.dexName = dexName;
29 | }
30 |
31 | public int getDexLength() {
32 | return dexLength;
33 | }
34 |
35 | public void setDexLength(int dexLength) {
36 | this.dexLength = dexLength;
37 | }
38 |
39 | public byte[] getData() {
40 | return data;
41 | }
42 |
43 | public void setData(byte[] data) {
44 | this.data = data;
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/shell_util/src/com/utils/FileUtils.java:
--------------------------------------------------------------------------------
1 | package com.utils;
2 |
3 | import java.io.*;
4 | import java.nio.charset.Charset;
5 | import java.util.Enumeration;
6 | import java.util.zip.ZipEntry;
7 | import java.util.zip.ZipFile;
8 | import java.util.zip.ZipOutputStream;
9 |
10 | /**
11 | * Created by zoulong on 2019/2/25 0025.
12 | */
13 | public class FileUtils {
14 | public static boolean isExit(String path){
15 | if(path == null && path.length() ==0) return false;
16 | File file = new File(path);
17 | return file.exists();
18 | }
19 |
20 | public static boolean isExit(String ... paths){
21 | for(String path:paths){
22 | if(!isExit(path)) return false;
23 | }
24 | return true;
25 | }
26 |
27 | public static boolean unZip(String zipPath,String dstPath){
28 | if(!isExit(zipPath)) return false;
29 | try {
30 | ZipFile zip = new ZipFile(zipPath, Charset.forName("GBK"));
31 | Enumeration em = (Enumeration) zip.entries();
32 | while (em != null && em.hasMoreElements()){
33 | ZipEntry ze = em.nextElement();
34 | String outPath = dstPath + File.separator + ze.getName();
35 | File dstFile = new File(outPath);
36 | if(!dstFile.exists()){
37 | dstFile.getParentFile().mkdirs();
38 | }
39 | InputStream in = zip.getInputStream(ze);
40 | FileOutputStream out = new FileOutputStream(outPath);
41 | byte[] buf = new byte[1024];
42 | int len;
43 | while ((len = in.read(buf)) > 0){
44 | out.write(buf,0,len);
45 | }
46 | in.close();
47 | out.close();
48 | }
49 | zip.close();
50 | } catch (IOException e) {
51 | e.printStackTrace();
52 | return false;
53 | }
54 | return true;
55 | }
56 |
57 | /**
58 | * 压缩成ZIP 方法1
59 | * @param srcDir 压缩文件夹路径
60 | * @param outPath 压缩文件输出流
61 | * @param KeepDirStructure 是否保留原来的目录结构,true:保留目录结构;
62 | * false:所有文件跑到压缩包根目录下(注意:不保留目录结构可能会出现同名文件,会压缩失败)
63 | * @throws RuntimeException 压缩失败会抛出运行时异常
64 | */
65 | public static void toZip(String srcDir, String outPath, boolean KeepDirStructure)
66 | throws RuntimeException{
67 | ZipOutputStream zos = null ;
68 | try {
69 | zos = new ZipOutputStream(new FileOutputStream(outPath));
70 | File sourceFile = new File(srcDir);
71 | File[] dirFiles = new File(srcDir).listFiles();
72 | for(File file:dirFiles)
73 | compress(file,zos,file.getName(),KeepDirStructure);
74 | } catch (Exception e) {
75 | throw new RuntimeException("zip error from ZipUtils",e);
76 | }finally{
77 | if(zos != null){
78 | try {
79 | zos.close();
80 | } catch (IOException e) {
81 | e.printStackTrace();
82 | }
83 | }
84 | }
85 | }
86 |
87 | /**
88 | * 递归压缩方法
89 | * @param sourceFile 源文件
90 | * @param zos zip输出流
91 | * @param name 压缩后的名称
92 | * @param KeepDirStructure 是否保留原来的目录结构,true:保留目录结构;
93 | * false:所有文件跑到压缩包根目录下(注意:不保留目录结构可能会出现同名文件,会压缩失败)
94 | * @throws Exception
95 | */
96 | private static void compress(File sourceFile, ZipOutputStream zos, String name,boolean KeepDirStructure) throws Exception{
97 | byte[] buf = new byte[1024];
98 | if(sourceFile.isFile()){
99 | // 向zip输出流中添加一个zip实体,构造器中name为zip实体的文件的名字
100 | zos.putNextEntry(new ZipEntry(name));
101 | // copy文件到zip输出流中
102 | int len;
103 | FileInputStream in = new FileInputStream(sourceFile);
104 | while ((len = in.read(buf)) != -1){
105 | zos.write(buf, 0, len);
106 | }
107 | // Complete the entry
108 | zos.closeEntry();
109 | in.close();
110 | } else {
111 | File[] listFiles = sourceFile.listFiles();
112 | if(listFiles == null || listFiles.length == 0){
113 | // 需要保留原来的文件结构时,需要对空文件夹进行处理
114 | if(KeepDirStructure){
115 | // 空文件夹的处理
116 | zos.putNextEntry(new ZipEntry(name + "/"));
117 | // 没有文件,不需要文件的copy
118 | zos.closeEntry();
119 | }
120 | }else {
121 | for (File file : listFiles) {
122 | // 判断是否需要保留原来的文件结构
123 | if (KeepDirStructure) {
124 | // 注意:file.getName()前面需要带上父文件夹的名字加一斜杠,
125 | // 不然最后压缩包中就不能保留原来的文件结构,即:所有文件都跑到压缩包根目录下了
126 | compress(file, zos, name + "/" + file.getName(),KeepDirStructure);
127 | } else {
128 | compress(file, zos, file.getName(),KeepDirStructure);
129 | }
130 | }
131 | }
132 | }
133 | }
134 |
135 | public static boolean delete(String path){
136 | if(!isExit(path)) return true;
137 | File file = new File(path);
138 | if(file.isFile()){
139 | return file.delete();
140 | }else{
141 | if(file.listFiles().length == 0) file.delete();
142 | else{
143 | for(File tempFile : file.listFiles()){
144 | delete(tempFile.getAbsolutePath());
145 | }
146 | return file.delete();
147 | }
148 | }
149 | return true;
150 | }
151 | }
152 |
--------------------------------------------------------------------------------
/shell_util/src/com/utils/SecurityUtils.java:
--------------------------------------------------------------------------------
1 | package com.utils;
2 |
3 | import java.security.InvalidKeyException;
4 | import java.security.NoSuchAlgorithmException;
5 | import java.security.SecureRandom;
6 |
7 | import javax.crypto.BadPaddingException;
8 | import javax.crypto.Cipher;
9 | import javax.crypto.IllegalBlockSizeException;
10 | import javax.crypto.KeyGenerator;
11 | import javax.crypto.NoSuchPaddingException;
12 | import javax.crypto.SecretKey;
13 | import javax.crypto.spec.IvParameterSpec;
14 | import javax.crypto.spec.SecretKeySpec;
15 |
16 | /**
17 | * @author zl
18 | * @time 2019/2/26 0026.
19 | */
20 | public class SecurityUtils {
21 | /*
22 | * 加密
23 | * 1.构造密钥生成器
24 | * 2.根据ecnodeRules规则初始化密钥生成器
25 | * 3.产生密钥
26 | * 4.创建和初始化密码器
27 | * 5.内容加密
28 | * 6.返回字符串
29 | */
30 | public static byte[] AESEncryption(String privateKey,String iv,String AES_TYPE,byte[] data) throws NoSuchPaddingException, NoSuchAlgorithmException, BadPaddingException, IllegalBlockSizeException, InvalidKeyException {
31 | IvParameterSpec zeroIv = new IvParameterSpec(iv.getBytes());
32 | //两个参数,第一个为私钥字节数组, 第二个为加密方式 AES或者DES
33 | SecretKeySpec key = new SecretKeySpec(privateKey.getBytes(), "AES");
34 | //实例化加密类,参数为加密方式,要写全
35 | Cipher cipher = Cipher.getInstance(AES_TYPE); //PKCS5Padding比PKCS7Padding效率高,PKCS7Padding可支持IOS加解密
36 | //初始化,此方法可以采用三种方式,按加密算法要求来添加。(1)无第三个参数(2)第三个参数为SecureRandom random = new SecureRandom();中random对象,随机数。(AES不可采用这种方法)(3)采用此代码中的IVParameterSpec
37 | //加密时使用:ENCRYPT_MODE; 解密时使用:DECRYPT_MODE;
38 | cipher.init(Cipher.ENCRYPT_MODE, key); //CBC类型的可以在第三个参数传递偏移量zeroIv,ECB没有偏移量
39 | //加密操作,返回加密后的字节数组,然后需要编码。主要编解码方式有Base64, HEX, UUE,7bit等等。此处看服务器需要什么编码方式
40 | byte[] encryptedData = cipher.doFinal(data);
41 | return encryptedData;
42 | }
43 | /*
44 | * 解密
45 | * 解密过程:
46 | * 1.同加密1-4步
47 | * 2.将加密后的字符串反纺成byte[]数组
48 | * 3.将加密内容解密
49 | */
50 | public static byte[] AESDecrypt(String privateKey,String iv,String AES_TYPE,byte[] data) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException {
51 | IvParameterSpec zeroIv = new IvParameterSpec(iv.getBytes());
52 | SecretKeySpec key = new SecretKeySpec(privateKey.getBytes(), "AES");
53 | Cipher cipher = Cipher.getInstance(AES_TYPE);
54 | //与加密时不同MODE:Cipher.DECRYPT_MODE
55 | cipher.init(Cipher.DECRYPT_MODE, key); //CBC类型的可以在第三个参数传递偏移量zeroIv,ECB没有偏移量
56 | byte[] decryptedData = cipher.doFinal(data);
57 | return decryptedData;
58 | }
59 |
60 | }
61 |
--------------------------------------------------------------------------------
/shell_util/src/com/utils/SignUtils.java:
--------------------------------------------------------------------------------
1 | package com.utils;
2 |
3 | import java.io.IOException;
4 |
5 | /**
6 | * 使用该工具必须配置好java环境
7 | * Created by zoulong on 2019/2/26 0026.
8 | */
9 | public class SignUtils {
10 | public static void V1(String apkPath,Keystore keystore) throws IOException, InterruptedException {
11 | String cmd = "jarsigner -verbose -keystore %s -storepass %s -keypass %s %s %s -digestalg SHA1 -sigalg SHA1withRSA";
12 | cmd = String.format(cmd, new String[]{keystore.getPath(),keystore.getAliasPassword(),keystore.getPassword(),apkPath,keystore.getAliasName()});
13 | CmdExecutor.executor(cmd);
14 | }
15 |
16 | public static Keystore getDefaultKeystore(){
17 | Keystore keystore = new Keystore();
18 | keystore.setPath("tools/keystore/test.keystore");
19 | keystore.setName("test");
20 | keystore.setAliasName("test");
21 | keystore.setPassword("test123");
22 | keystore.setAliasPassword("test123");
23 | return keystore;
24 | }
25 |
26 | public static class Keystore {
27 | private String path;
28 | private String name;
29 | private String password;
30 | private String aliasName;
31 | private String aliasPassword;
32 |
33 | public String getPath() {
34 | return path;
35 | }
36 |
37 | public void setPath(String path) {
38 | this.path = path;
39 | }
40 |
41 | public String getName() {
42 | return name;
43 | }
44 |
45 | public void setName(String name) {
46 | this.name = name;
47 | }
48 |
49 | public String getPassword() {
50 | return password;
51 | }
52 |
53 | public void setPassword(String password) {
54 | this.password = password;
55 | }
56 |
57 | public String getAliasName() {
58 | return aliasName;
59 | }
60 |
61 | public void setAliasName(String aliasName) {
62 | this.aliasName = aliasName;
63 | }
64 |
65 | public String getAliasPassword() {
66 | return aliasPassword;
67 | }
68 |
69 | public void setAliasPassword(String aliasPassword) {
70 | this.aliasPassword = aliasPassword;
71 | }
72 | }
73 | }
74 |
--------------------------------------------------------------------------------
/shell_util/tools/apktool/apktool.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ray-tianfeng/dex-shell/7623c3b16d4c36bf0cb941255603891a259826fd/shell_util/tools/apktool/apktool.jar
--------------------------------------------------------------------------------
/shell_util/tools/keystore/test.keystore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ray-tianfeng/dex-shell/7623c3b16d4c36bf0cb941255603891a259826fd/shell_util/tools/keystore/test.keystore
--------------------------------------------------------------------------------
/项目介绍.txt:
--------------------------------------------------------------------------------
1 | demo:原测试demo
2 | shell_util:加壳工程
3 | ReforceApk:解壳工程
--------------------------------------------------------------------------------