Да, вы можете. Вам нужен специальный тег (если вы не можете найти его где-то еще). Я сделал это:
package something;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.Map;
import java.util.TreeMap;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
import org.apache.taglibs.standard.tag.el.core.ExpressionUtil;
/**
* Get all class constants (statics) and place into Map so they can be accessed
* from EL.
* @author Tim.sabin
*/
public class ConstMapTag extends TagSupport {
public static final long serialVersionUID = 0x2ed23c0f306L;
private String path = "";
private String var = "";
public void setPath (String path) throws JspException {
this.path = (String)ExpressionUtil.evalNotNull ("constMap", "path",
path, String.class, this, pageContext);
}
public void setVar (String var) throws JspException {
this.var = (String)ExpressionUtil.evalNotNull ("constMap", "var",
var, String.class, this, pageContext);
}
public int doStartTag () throws JspException {
// Use Reflection to look up the desired field.
try {
Class<?> clazz = null;
try {
clazz = Class.forName (path);
} catch (ClassNotFoundException ex) {
throw new JspException ("Class " + path + " not found.");
}
Field [] flds = clazz.getDeclaredFields ();
// Go through all the fields, and put static ones in a Map.
Map<String, Object> constMap = new TreeMap<String, Object> ();
for (int i = 0; i < flds.length; i++) {
// Check to see if this is public static final. If not, it's not a constant.
int mods = flds [i].getModifiers ();
if (!Modifier.isFinal (mods) || !Modifier.isStatic (mods) ||
!Modifier.isPublic (mods)) {
continue;
}
Object val = null;
try {
val = flds [i].get (null); // null for static fields.
} catch (Exception ex) {
System.out.println ("Problem getting value of " + flds [i].getName ());
continue;
}
// flds [i].get () automatically wraps primitives.
// Place the constant into the Map.
constMap.put (flds [i].getName (), val);
}
// Export the Map as a Page variable.
pageContext.setAttribute (var, constMap);
} catch (Exception ex) {
if (!(ex instanceof JspException)) {
throw new JspException ("Could not process constants from class " + path);
} else {
throw (JspException)ex;
}
}
return SKIP_BODY;
}
}
, и тег называется:
<yourLib:constMap path="path.to.your.constantClass" var="consts" />
Все публичные статические конечные переменные будут помещены в карту, индексированную по их имени Java, поэтому если
public static final int MY_FIFTEEN = 15;
, то тег обернет это в Integer, и вы можете ссылаться на него в JSP:
<c:if test="${consts['MY_FIFTEEN'] eq 15}">
, и вам не нужно писать геттеры!
Я не знаю, есть ли для этого пользовательский интерфейс. Самый простой способ, который я нашел, это через adb:
adb uninstall [-k] <package> - remove this app package from the device
('-k' means keep the data and cache directories)
Так, например:
adb uninstall com.example.testandroidwear
Как упоминали @WaynePiekarski и @ Thoast83, если Android Износное устройство подключается через Bluetooth вместо прямого USB-подключения (например, при тестировании на Moto 360), поэтому вам необходимо использовать adb -s <device> <command>
в соответствии с инструкциями Направление команд на конкретный экземпляр эмулятора / устройства в документация adb .
В этом случае это может быть что-то вроде:
adb -s localhost:4444 uninstall com.example.testandroidwear
при условии, что вы установили соединение точно так, как описано в Отладка по Bluetooth (в противном случае измените номер порта соответственно) .
Если кто-то отлаживает через Bluetooth и наткнулся на эту ветку, напишите:
adb -s localhost:4444 uninstall example.com.yourappname
Когда вы устанавливаете APK через Play Store или через adb на телефон, встроенный носимый APK автоматически устанавливается на носимый.
Если вы разрабатываете и хотите поэкспериментировать с вещами, или если вы делаете отладочные сборки, которые не поддерживают встроенный APK, вам нужно будет использовать adb uninstall как для телефона, так и для носимых устройств.
Вы можете использовать устройства adb для обнаружения названий подключенных устройств, а затем adb -s, а затем имя устройства. Вы используете внутреннее имя пакета с командой удаления.
Я бы предложил использовать 127.0.0.1
вместо localhost
adb -s 127.0.0.1:4444 uninstall example.com.yourappname
Сначала используйте «adb devices», чтобы найти все подключенные устройства:
$ C:\Program Files (x86)\Google\Cloud SDK>adb devices
List of devices attached
603KPSL029398 device
5c9cc2e0 device
Затем запустите программу удаления приложения, используя adb на нужном устройстве:
$ C:\Program Files (x86)\Google\Cloud SDK>adb -s 603KPSL029398 uninstall com.example.android.support.wearable.notifications
Success
Даже после удаления мои часы (moto360 второго поколения, под управлением Android Wear 1.5.03336103, Android OS 6.0.1) показывают удаленные приложения. Приложения были установлены прямо на устройстве износа от Studio.