1.现在积分墙被各大市场拒绝,开发人员不知道从哪里赚钱,悲剧啊,Android!
2.市场到底如何判断应用是否有积分墙或者广告?
3.知道它怎么检测,是否有办法绕过检测呢?
首先,假设各个市场是有反编译工具的,能把class.dex反编译出classes_2dex.jar包,这个假设大家没意见吧?
然后,市场就对这个classes_2dex.jar检测就可以了!对jar包检测是否有比如万普的"com.waps"这样的包名,就肯定有广告!N多就是这么干的!
代码如下:
import java.io.IOException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
public class TestMain {
public String className;
public ArrayList<String> jarFiles = new ArrayList<String>();
public TestMain() {
}
public TestMain(String className) {
this.className = className;
}
public void setClassName(String className) {
this.className = className;
}
public List<String> findClass(String dir, boolean recurse) {
searchDir(dir, recurse);
return this.jarFiles;
}
protected void searchDir(String jarPath, boolean recurse) {
if (!jarPath.endsWith(".jar")) {
return;
}
ZipFile zip;
try {
zip = new ZipFile(jarPath);
@SuppressWarnings("rawtypes")
Enumeration entries = zip.entries();
while (entries.hasMoreElements()) {
ZipEntry entry = (ZipEntry) entries.nextElement();
String thisClassName = getClassName(entry);
if (thisClassName.contains(this.className)
|| thisClassName.equals(this.className)
|| thisClassName.equals(this.className + ".class")) {
this.jarFiles.add(thisClassName);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
public List<String> getFilenames() {
return this.jarFiles;
}
protected String getClassName(ZipEntry entry) {
StringBuffer className = new StringBuffer(entry.getName().replace('/',
'.'));
return className.toString();
}
public static void main(String args[]) {
TestMain findInJar = new TestMain("com.waps");//要找的包名或者类名
List<String> jarFiles = findInJar.findClass(
"C:/Users/Administrator/Desktop/classes_dex2jar.jar", true);//要检测的jar包
if (jarFiles.size() == 0) {
System.out.println("Not Found");
} else {
for (int i = 0; i < jarFiles.size(); i++) {
System.out.println("Found it:" + i + "===" + jarFiles.get(i));
}
}
}
}
结果肯定是能检测出来的!
如何防范这种检测,目前我还没想出办法,再看看。