mirror of
https://github.com/adelphes/android-dev-ext.git
synced 2025-12-23 01:48:18 +00:00
* fix 0 alignment in binary xml decoding * output reason for APK manifest read failure * try and match package name against process name when determining which pid to attach * make post launch pause user-configurable * code tidy, jsdocs and types * more types in expression parse classes * fix issue with expandable objects not evaluating * update build task example * fix package/type evaluation * improve handling of targetDevice and processID combinations * show full call stack by default * implement a queue for evaluations * improve performance of retrieving single fields * check root term identifiers against this fields
78 lines
2.3 KiB
JavaScript
78 lines
2.3 KiB
JavaScript
const os = require('os');
|
|
const { ADBClient } = require('./adbclient');
|
|
|
|
/**
|
|
* @param {import('vscode')} vscode
|
|
* @param {{pid:number,name:string}[]} pids
|
|
*/
|
|
async function showPIDPicker(vscode, pids) {
|
|
// sort by PID (the user can type the package name to search)
|
|
const sorted_pids = pids.slice().sort((a,b) => a.pid - b.pid);
|
|
|
|
/** @type {import('vscode').QuickPickItem[]} */
|
|
const device_pick_items = sorted_pids
|
|
.map(x => ({
|
|
label: `${x.pid}`,
|
|
description: x.name,
|
|
}));
|
|
|
|
/** @type {import('vscode').QuickPickOptions} */
|
|
const device_pick_options = {
|
|
matchOnDescription: true,
|
|
canPickMany: false,
|
|
placeHolder: 'Choose the Android process to attach to',
|
|
};
|
|
|
|
const chosen_option = await vscode.window.showQuickPick(device_pick_items, device_pick_options);
|
|
return sorted_pids[device_pick_items.indexOf(chosen_option)] || null;
|
|
}
|
|
|
|
/**
|
|
* @param {import('vscode')} vscode
|
|
* @param {string} device_serial
|
|
*/
|
|
async function selectAndroidProcessID(vscode, device_serial) {
|
|
const res = {
|
|
/** @type {string|'ok'|'cancelled'|'failed'} */
|
|
status: 'failed',
|
|
pid: 0,
|
|
serial: '',
|
|
}
|
|
|
|
let named_pids;
|
|
try {
|
|
named_pids = await new ADBClient(device_serial).named_jdwp_list(5000);
|
|
} catch {
|
|
vscode.window.showWarningMessage(`Attach failed. Check the device ${device_serial} is connected.`);
|
|
return res;
|
|
}
|
|
if (named_pids.length === 0) {
|
|
vscode.window.showWarningMessage(
|
|
'Attach failed. No debuggable processes are running on the device.'
|
|
+ `${os.EOL}${os.EOL}`
|
|
+ `To allow a debugger to attach, the app must have the "android:debuggable=true" attribute present in AndroidManifest.xml and be running on the device.`
|
|
+ `${os.EOL}`
|
|
+ `See https://developer.android.com/guide/topics/manifest/application-element#debug`
|
|
);
|
|
return res;
|
|
}
|
|
|
|
// always show the pid picker - even if there's only one
|
|
const named_pid = await showPIDPicker(vscode, named_pids);
|
|
if (named_pid === null) {
|
|
// user cancelled picker
|
|
res.status = 'cancelled';
|
|
return res;
|
|
}
|
|
|
|
res.pid = named_pid.pid;
|
|
res.serial = device_serial;
|
|
res.status = 'ok';
|
|
|
|
return res;
|
|
}
|
|
|
|
module.exports = {
|
|
selectAndroidProcessID,
|
|
}
|