在Android项目中,如果遇到“由于该项目没有分配给任何在线的运行器,所以该作业被卡住了。请前往运行器页面。”的错误,可以尝试以下解决方法:
以下是一段示例代码,演示如何通过代码指定一个运行器(设备或模拟器)进行运行:
import com.android.ddmlib.AndroidDebugBridge;
import com.android.ddmlib.AndroidDebugBridge.IDeviceChangeListener;
import com.android.ddmlib.IDevice;
import com.android.ddmlib.IShellOutputReceiver;
public class AdbRunner {
public static void main(String[] args) {
// 初始化ADB
AndroidDebugBridge.initIfNeeded();
AndroidDebugBridge adb = AndroidDebugBridge.createBridge();
// 等待ADB连接设备
waitForDeviceConnected(adb);
// 获取所有设备
IDevice[] devices = adb.getDevices();
// 选择第一个设备
IDevice device = devices[0];
// 执行shell命令
executeShellCommand(device, "am start -n com.example.myapp/.MainActivity");
}
private static void waitForDeviceConnected(AndroidDebugBridge adb) {
adb.addDeviceChangeListener(new IDeviceChangeListener() {
@Override
public void deviceConnected(IDevice device) {
// 设备连接成功
}
@Override
public void deviceDisconnected(IDevice device) {}
@Override
public void deviceChanged(IDevice device, int changeMask) {}
});
while (adb.hasInitialDeviceList() == false) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// 忽略异常
}
}
}
private static void executeShellCommand(IDevice device, String command) {
IShellOutputReceiver receiver = new IShellOutputReceiver() {
@Override
public void addOutput(byte[] data, int offset, int length) {
String output = new String(data, offset, length);
System.out.println(output);
}
@Override
public void flush() {}
@Override
public boolean isCancelled() {
return false;
}
};
try {
device.executeShellCommand(command, receiver);
} catch (Exception e) {
e.printStackTrace();
}
}
}
以上代码中,waitForDeviceConnected
方法用于等待ADB连接设备,executeShellCommand
方法用于执行shell命令。你可以根据自己的需求修改和调整代码。