所以我的代码有问题。目前,这个函数中的matcher返回了3行,而不是1行。我希望它只返回它找到的第一行。这是我的功能:
private void getLibraryMap(String libraryName) {
File file = new File("/proc/self/maps");
if (file.exists()) {
try {
BufferedReader bufferedReader = new BufferedReader(new FileReader("/proc/self/maps"));
String line;
while ((line = bufferedReader.readLine()) != null) {
if (line.contains(libraryName)) {
String lines = line.replace(String.valueOf(Pattern.compile("\s+")), " ");
Pattern regex = Pattern.compile("\p{XDigit}+");
Matcher matcher = regex.matcher(lines).region(0, 8);
while (matcher.find()) {
long startAddress = Long.parseLong(matcher.group(0));
Log.e("MainActivity", String.valueOf(startAddress));
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
这就是我调用它的方式:
getLibraryMap("libwebviewchromium_loader.so");
这是我从中得到的日志:
E/MainActivity: 96862000
96864000
E/MainActivity: 96865000
有人能帮我解决这个问题吗?非常感谢:(
更改
while (matcher.find()) {
long startAddress = Long.parseLong(matcher.group(0));
Log.e("MainActivity", String.valueOf(startAddress));
}
至
if (matcher.find()) {
long startAddress = Long.parseLong(matcher.group(0));
Log.e("MainActivity", String.valueOf(startAddress));
}
而意味着它将循环,直到条件为真
如果一旦找到第一个匹配,此处将只执行一次