是否可以从adb shell命令读取二进制stdout?例如,如何使用screencap的所有示例包括两个步骤:
adb shell screencap -p /sdcard/foo.png
adb pull /sdcard/foo.png
Run Code Online (Sandbox Code Playgroud)
但是,该服务支持写入stdout.例如,您可以执行以下操作:
adb shell "screencap -p > /sdcard/foo2.png"
adb pull /sdcard/foo2.png
Run Code Online (Sandbox Code Playgroud)
这同样有效.但是,如何阅读亚行的产出呢?我想做的是以下内容:
adb shell screencap -p > foo3.png
Run Code Online (Sandbox Code Playgroud)
并避免中间写入SD卡.这会生成看起来像PNG文件的strings foo3.png东西(正在运行生成带有IHDR,IEND等的东西)并且大小大致相同,但就图像阅读器而言,文件已损坏.
我也尝试在java中使用ddmlib来做到这一点,结果是一样的.我很乐意使用任何必要的图书馆.我的目标是减少获取捕获的总时间.在我的设备上,使用双命令解决方案,获取图像大约需要3秒钟.使用ddmlib和捕获stdout需要不到900毫秒,但它不起作用!
是否有可能做到这一点?
编辑:这是两个文件的hexdump.第一个,screen.png来自stdout并且已损坏.第二个,xscreen来自双命令解决方案并且有效.图像应在视觉上相同.
$ hexdump -C screen.png | head
00000000 89 50 4e 47 0d 0d 0a 1a 0d 0a 00 00 00 0d 49 48 |.PNG..........IH|
00000010 44 52 00 00 02 d0 00 00 05 00 08 06 00 00 00 6e |DR.............n|
00000020 ce …Run Code Online (Sandbox Code Playgroud) 这个问题已经出现过几次了,我已经阅读了所有答案,但我还没有看到一种真正有效的方法来处理这个问题.在我的解决方案,我用的听众从调用Activity到AlertDialog像这样:
public class MyDialogFragment extends DialogFragment {
public interface MyDialogFragmentListener {
public void onReturnValue(String foo);
}
public void init(boolean someValue)
{
sSomeValue = someValue;
listeners = new ArrayList<MyDialogFragmentListener>();
}
static boolean sSomeValue;
private static ArrayList<MyDialogFragmentListener> listeners;
public void addMyDialogFragmentListener(MyDialogFragmentListener l)
{
listeners.add(l);
}
public void removeMyDialogFragmentListener(MyDialogFragmentListener l)
{
listeners.remove(l);
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(R.string.title)
.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
for (MyDialogFragmentListener …Run Code Online (Sandbox Code Playgroud) 我想创建一个构造函数对象,其继承正常工作,但捕获构造函数以便我可以操作实例对象。使用Proxy() 几乎解决了这个问题,但它似乎搞砸了继承。请注意以下没有代理的示例:
> const B = function() {}
undefined
> B.name
'B'
> class C extends B {}
[Function: C]
> B.prototype == C.prototype.__proto__
true
> var instance = new C()
undefined
> C.prototype == instance.__proto__
true
> instance.__proto__
C {}
Run Code Online (Sandbox Code Playgroud)
现在,如果我向 capture 添加一个代理construct(target,args),它将正确捕获构造函数,但它不会像没有代理那样完全保留内容。请注意,构造函数所做的只是向控制台打印一条消息,记录其捕获。但否则(我认为)它应该做出相同的反应。但是,当我创建一个类来扩展代理函数时,似乎扩展函数完全丢失了。请注意,最后四行给出的结果与上面不同。
> const handler = { construct(target,args) {
... console.log('Captured!'); return new target(...args); } }
undefined
> const proxy_B = new Proxy(B, handler)
undefined
> proxy_B.name
'B'
> class C2 extends proxy_B {} …Run Code Online (Sandbox Code Playgroud) 我有一个在32个点实例上使用Hadoop 0.20运行的工作.它已经运行了9个小时,没有任何错误.在此期间它已经处理了3800个任务,但我注意到只有两个任务似乎被卡住并且已经独自运行了几个小时(显然是因为他们没有超时而做出响应).这些任务通常不会超过15分钟.我不想失去已经完成的所有工作,因为它花了我很多钱.我真的只想杀死这两个任务并让Hadoop重新分配它们或者只是将它们视为失败.直到他们停止,我无法从其他3798地图获得减少结果!
但我无法弄清楚如何做到这一点.我已经考虑过要弄清楚哪些实例正在运行任务,然后终止这些实例,但是
我如何杀死个别地图任务?
android ×2
adb ×1
amazon ×1
constructor ×1
dialog ×1
ecmascript-6 ×1
emr ×1
hadoop ×1
javascript ×1
map ×1
proxy ×1