Closed dakun666 closed 3 years ago
把每次调用的log发一下
这三次取的值会上报服务器,此结果是后续分析得出的,暂未由测试复现。 从服务器的结果看也暂未发现与机型系统存在什么关联性,即大部分机型和系统都有可能会出现这种情况。 后续测试日志出来后会传上来
解决了。分两步说明。 1.我在调用checkIsRunningInVirtualApk时并没有传packagename而是一个固定的值,因为存在多个马甲包装入手机的现象导致会命中。改为传入packagename即解决。 2.上文所说同个app多次调用结果不同的问题是因为使用了多进程调用,主进程调用不会命中而子进程再次调用则会命中。此时传入currentProcessName即解决。currentProcessName获取方法如下
public static String getCurrentProcessName() {
FileInputStream fis = null;
try {
fis = new FileInputStream("/proc/self/cmdline");
byte[] buffer = new byte[256];// 修改长度为256,在做中大精简版时发现包名长度大于32读取到的包名会少字符,导致常驻进程下的初始化操作有问题
int len = 0;
int b;
while ((b = fis.read()) > 0 && len < buffer.length) {
buffer[len++] = (byte) b;
}
if (len > 0) {
String s = new String(buffer, 0, len, "UTF-8");
return s;
}
} catch (Exception e) {
Timber.e(e);
} finally {
if (fis != null) {
try {
fis.close();
} catch (Exception e) {
}
}
}
return null;
}
解决了。分两步说明。 1.我在调用checkIsRunningInVirtualApk时并没有传packagename而是一个固定的值,因为存在多个马甲包装入手机的现象导致会命中。改为传入packagename即解决。 2.上文所说同个app多次调用结果不同的问题是因为使用了多进程调用,主进程调用不会命中而子进程再次调用则会命中。此时传入currentProcessName即解决。currentProcessName获取方法如下
public static String getCurrentProcessName() { FileInputStream fis = null; try { fis = new FileInputStream("/proc/self/cmdline"); byte[] buffer = new byte[256];// 修改长度为256,在做中大精简版时发现包名长度大于32读取到的包名会少字符,导致常驻进程下的初始化操作有问题 int len = 0; int b; while ((b = fis.read()) > 0 && len < buffer.length) { buffer[len++] = (byte) b; } if (len > 0) { String s = new String(buffer, 0, len, "UTF-8"); return s; } } catch (Exception e) { Timber.e(e); } finally { if (fis != null) { try { fis.close(); } catch (Exception e) { } } } return null; }
你要不要提个 pull request进来
解决了。分两步说明。 1.我在调用checkIsRunningInVirtualApk时并没有传packagename而是一个固定的值,因为存在多个马甲包装入手机的现象导致会命中。改为传入packagename即解决。 2.上文所说同个app多次调用结果不同的问题是因为使用了多进程调用,主进程调用不会命中而子进程再次调用则会命中。此时传入currentProcessName即解决。currentProcessName获取方法如下
public static String getCurrentProcessName() { FileInputStream fis = null; try { fis = new FileInputStream("/proc/self/cmdline"); byte[] buffer = new byte[256];// 修改长度为256,在做中大精简版时发现包名长度大于32读取到的包名会少字符,导致常驻进程下的初始化操作有问题 int len = 0; int b; while ((b = fis.read()) > 0 && len < buffer.length) { buffer[len++] = (byte) b; } if (len > 0) { String s = new String(buffer, 0, len, "UTF-8"); return s; } } catch (Exception e) { Timber.e(e); } finally { if (fis != null) { try { fis.close(); } catch (Exception e) { } } } return null; }
你要不要提个 pull request进来
好的,我整理下
我在Application的onCreate和LauncherActivity的onCreate及MainActivity的onCreate调用了3次EasyProtectorLib.checkIsRunningInVirtualApk()方法,第1、3次为false,第2次为true,请问为何会出现这种情况?