mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-94168 error message if launching debug on real device with "debuggable" attribute set to false
This commit is contained in:
@@ -46,6 +46,7 @@ import com.intellij.util.PsiNavigateUtil;
|
||||
import com.intellij.util.containers.HashMap;
|
||||
import com.intellij.util.xml.GenericAttributeValue;
|
||||
import org.jdom.Element;
|
||||
import org.jetbrains.android.dom.manifest.Application;
|
||||
import org.jetbrains.android.dom.manifest.Manifest;
|
||||
import org.jetbrains.android.facet.AndroidFacet;
|
||||
import org.jetbrains.android.facet.AndroidFacetConfiguration;
|
||||
@@ -196,7 +197,15 @@ public abstract class AndroidRunConfigurationBase extends ModuleBasedConfigurati
|
||||
}
|
||||
|
||||
boolean debug = DefaultDebugExecutor.EXECUTOR_ID.equals(executor.getId());
|
||||
boolean nonDebuggableOnDevice = false;
|
||||
|
||||
if (debug) {
|
||||
final Manifest manifest = facet.getManifest();
|
||||
final Application application = manifest != null ? manifest.getApplication() : null;
|
||||
|
||||
nonDebuggableOnDevice = application != null && Boolean.FALSE.toString().
|
||||
equals(application.getDebuggable().getStringValue());
|
||||
|
||||
if (!AndroidSdkUtils.activateDdmsIfNecessary(facet.getModule().getProject(), new Computable<AndroidDebugBridge>() {
|
||||
@Nullable
|
||||
@Override
|
||||
@@ -236,7 +245,7 @@ public abstract class AndroidRunConfigurationBase extends ModuleBasedConfigurati
|
||||
if (applicationLauncher != null) {
|
||||
final boolean supportMultipleDevices = supportMultipleDevices() && executor.getId().equals(DefaultRunExecutor.EXECUTOR_ID);
|
||||
return new AndroidRunningState(env, facet, targetChooser, computeCommandLine(), aPackage, applicationLauncher,
|
||||
depModule2PackageName, supportMultipleDevices, CLEAR_LOGCAT, this);
|
||||
depModule2PackageName, supportMultipleDevices, CLEAR_LOGCAT, this, nonDebuggableOnDevice);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -134,6 +134,7 @@ public class AndroidRunningState implements RunProfileState, AndroidDebugBridge.
|
||||
private final boolean mySupportMultipleDevices;
|
||||
private final boolean myClearLogcatBeforeStart;
|
||||
private final List<AndroidRunningStateListener> myListeners = new ArrayList<AndroidRunningStateListener>();
|
||||
private final boolean myNonDebuggableOnDevice;
|
||||
|
||||
public void setDebugMode(boolean debugMode) {
|
||||
myDebugMode = debugMode;
|
||||
@@ -305,7 +306,8 @@ public class AndroidRunningState implements RunProfileState, AndroidDebugBridge.
|
||||
Map<AndroidFacet, String> additionalFacet2PackageName,
|
||||
boolean supportMultipleDevices,
|
||||
boolean clearLogcatBeforeStart,
|
||||
@NotNull AndroidRunConfigurationBase configuration) throws ExecutionException {
|
||||
@NotNull AndroidRunConfigurationBase configuration,
|
||||
boolean nonDebuggableOnDevice) throws ExecutionException {
|
||||
myFacet = facet;
|
||||
myCommandLine = commandLine;
|
||||
myConfiguration = configuration;
|
||||
@@ -323,6 +325,7 @@ public class AndroidRunningState implements RunProfileState, AndroidDebugBridge.
|
||||
myTargetPackageName = packageName;
|
||||
myAdditionalFacet2PackageName = additionalFacet2PackageName;
|
||||
myClearLogcatBeforeStart = clearLogcatBeforeStart;
|
||||
myNonDebuggableOnDevice = nonDebuggableOnDevice;
|
||||
}
|
||||
|
||||
public void setDeploy(boolean deploy) {
|
||||
@@ -633,6 +636,12 @@ public class AndroidRunningState implements RunProfileState, AndroidDebugBridge.
|
||||
}
|
||||
|
||||
private boolean prepareAndStartApp(IDevice device) {
|
||||
if (myDebugMode && myNonDebuggableOnDevice && !device.isEmulator()) {
|
||||
message("Cannot debug the application " + myPackageName + " on device '" + device.getName() + "',\n" +
|
||||
"because 'debuggable' attribute is set to 'false' in AndroidManifest.xml.\nYou may remove the attribute " +
|
||||
"and the IDE will automatically assign it during debug and release builds.", STDERR);
|
||||
return false;
|
||||
}
|
||||
if (!doPrepareAndStart(device)) {
|
||||
fireExecutionFailed();
|
||||
return false;
|
||||
|
||||
Reference in New Issue
Block a user