`
helpbs
  • 浏览: 1161541 次
文章分类
社区版块
存档分类
最新评论

android的调试工具集

 
阅读更多

1.查看当前堆栈

1)功能:在程序中加入代码,使可以在logcat中看到打印出的当前函数调用关系

2)方法:
new Exception(“print trace”).printStackTrace();

2.MethodTracing

1)功能:用于热点分析和性能优化,分析每个函数占用的CPU时间,调用次数,函数调用关系等

2)方法:

a)在程序代码中加入追踪开关
import android.os.Debug;
……
android.os.Debug.startMethodTracing(“/data/tmp/test”);
//先建/data/tmp目录
……//被追踪的程序段
android.os.Debug.stopMethodTracing();

b)编译,运行后,设备端生成/data/tmp/test.trace文件

c)trace文件复制到PC
$ adb pull /data/tmp/test.trace ./

d)使用android自带工具分析trace文件
$ $ANDROID_SRC/out/host/linux-x86/bin/traceview test.trace
此时可看到各个函数被调用的次数CPU占用率等信息

e)使用android自带工具分析生成调用关系类图
$ apt-get install graphviz#安装图片相关软件
$ANDROID_SRC/out/host/linux-x86/bin/dmtracedump -g test.png test.trace
此时目录下生成类图test.png

3)注意
trace文件生成与libdvm模块DEBUG版本相冲突,所以此方法只适用于对非DEBUG版本模拟器的调试,否则在分析trace文件时会报错

3.HProf (Heap Profile)

1)功能:
用于java层面的内存分析,显示详细的内存占用信息,指出可疑的内存泄漏对象

2)方法:

a)在代码中加入dump动作
import android.os.Debug;
import java.io.IOException;
……
try {
android.os.Debug.dumpHprofData(“/data/tmp/input.hprof”); //先建/data/tmp目录
} catch (IOException ioe) {
}

b)hprof文件复制到PC
$ adb pull /data/tmp/input.hprof ./

c)使用命令hprof-convhprof转成MAT识别的标准的hprof
$ $ANDROID_SRC/out/host/linux-x86/bin/hprof-conv input.hprof output.hprof

d)使用MAT工具看hprof信息
下载MAT工具:http://www.eclipse.org/mat/downloads.php
用工具打开output.hprof

3)注意:此工具只能显示java层面的,而不能显示C层的内存占用信息

4.SamplingProfile (android 2.0上版本使用)

1)功能
每隔N毫秒对当前正在运行的函数取样,并输出到log

2)在代码中加入取样设定
import dalvik.system.SamplingProfiler
……
SamplingProfile sp = SamplingProfiler.getInstance();
sp.start(n);
// n为设定每秒采样次数
sp.logSnapshot(sp.snapshot());
……
sp.shutDown();

它会启一个线程监测,在logcat中打印信息

5.用发系统信号的方式取当前堆栈情况和内存信息

1)原理
dalvik虚拟机对SIGQUITSIGUSR1信号进行处理(dalvik/vm/SignalCatcher.c),分别完成取当前堆栈和取当前内存情况的功能

2)用法

a)$ chmod 777 /data/anr -R#anr目录权限设为可写
$ rm /data/anr/traces.txt#删除之前的trace信息
$ ps #找到进程号
$ kill -3进程号#发送SIGQUIT信号给该进程,此时生成trace信息
$ cat /data/anr/traces.txt
功能实现:遍历thread list(dalvik/vm/Thread.c:dvmDumpAllThreadEx()),并打印当前函数调用关系(dalvik/vm/interp/Stack.c:dumpFrames())

b)$ chmod 777 /data/misc -R
$ ps #
找到进程号
$ kill -10进程号#发送SIGQUIT信事信号给该进程,此时生成hprof信息
$ ls /data/misc/*.hprof
此时生成hprf文件,如何使用此文件,见第二部分(HProf)
注意:hprof文件都很大,注意用完马上删除,以免占满存储器

6.logcat及原理

1)android.util.Log利用println的标准java输出词句,并加前缀I/V/D….

2)dalvik利用管道加线程的方式,先利用dup2stdoutstderr重定向到管理中(vm/StdioConverter.c:dvmstdioConverterStartup),然后再启动一个线程从管道另一端读出内容(dalvik/vm/StdioConverter.c:stdioconverterThreadStart()),使用LOG公共工具(system/core/liblog/logd_write.c: __android_log_print())输出到/dev/log/*中去

3)logcat通过加不同参数看/dev/log/下的不同输入信息
# logcat -b main显示主缓冲区中的信息
# logcat -b radio显示无线缓冲区中的信息
# logcat -b events显示事件缓冲区中的信息

7.jdwp(java debug wire protocol)及原理

1)虚拟机(设备端)在启动时加载了Agent JDWP从而具备了调试功能。在调试器端(PC端)通过JDWP协议与设备连接,通过发送命令来获取的状态和控制Java程序的执行。JDWP是通过命令(command)和回复(reply)进行通信的。

2)JDK中调试工具jdb就是一个调试器,DDMS也提供调试器与设备相连。

3)dalvikJDWP提供了两种连接方式:tcp方式和adb方式,tcp方式可以手工指定端口,adb方式自动设定为8700端口,通常使用DDMS调试就是通过adb方式

8.monkey

1)monkey是一个android自带的命令行工具。它向系统发送伪随机的用户事件流,实现对正在开发的应用程序进行压力测试。

2)方法
在设备端打开setting界面
$ adb shell
# monkey -p com.android.settings -v 500

此时可以看到界面不断被切换

9.其它小工具
具体见android.os.Debug中提供的工具

1)取毫微秒级的时间,用于计算时间
threadCpuTimeNanos()

2)统计两点间的内存分配情况
startAllocCounting()
stopAllocCounting()
getGlobalAllocCount()
get…..

3)打印当前已loadclass
getLoadedClassCount()
printLoadedClasses()
它需要打开NDEBUG功能才能打开system/core/Log功能

10.打印debug信息
$ adb bugreport

11.参考

1)androidmonkey的用法
http://junjie0324.spaces.live.com/blog/cns!BAAE46DF931F8C64!204.entry


Android Monkey的用法

简介

Monkey是一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流,实现对正在开发的应用程序进行压力测试。Monkey包括许多选项,它们大致分为四大类:

· 基本配置选项,如设置尝试的事件数量。

· 运行约束选项,如设置只对单独的一个包进行测试。

· 事件类型和频率。 · 调试选项。

Monkey运行的时候,它生成事件,并把它们发给系统。同时,Monkey还对测试中的系统进行监测,对下列三种情况进行特殊处理:

· 如果限定了Monkey运行在一个或几个特定的包上,那么它会监测试图转到其它包的操作,并对其进行阻止。

· 如果应用程序崩溃或接收到任何失控异常,Monkey将停止并报错。

· 如果应用程序产生了应用程序不响应(application not responding)的错误,Monkey将会停止并报错。

按照选定的不同级别的反馈信息,在Monkey中还可以看到其执行过程报告和生成的事件。

Monkey基本用法

可以通过开发机器上的命令行或脚本来启动Monkey。由于Monkey运行在模拟器/设备环境中,所以必须用其环境中的shell来进行启动。可以通过在每条命令前加上adb shell来达到目的,也可以进入Shell后直接输入Monkey命令。基本语法如下:

$ adb shell monkey [options]

如果不指定optionsMonkey将以无反馈模式启动,并把事件任意发送到安装在目标环境中的全部包。下面是一个更为典型的命令行示例,它启动指定的应用程序,并向其发送500个伪随机事件:

$ adb shell monkey -p your.package.name -v 500

命令选项参考

下表中列出了Monkey命令行可用的全部选项。

类别

选项

说明

常规

--help

列出简单的用法。

-v

命令行的每一个-v将增加反馈信息的级别。Level 0(缺省值)除启动提示、测试完成和最终结果之外,提供较少信息。Level 1提供较为详细的测试信息,如逐个发送到Activity的事件。Level 2提供更加详细的设置信息,如测试中被选中的或未被选中的Activity

事件

-s <seed>

伪随机数生成器的seed值。如果用相同的seed值再次运行Monkey,它将生成相同的事件序列。

--throttle <milliseconds>

在事件之间插入固定延迟。通过这个选项可以减缓Monkey的执行速度。如果不指定该选项,Monkey将不会被延迟,事件将尽可能快地被产成。

--pct-touch <percent>

调整触摸事件的百分比(触摸事件是一个down-up事件,它发生在屏幕上的某单一位置)

--pct-motion <percent>

调整动作事件的百分比(动作事件由屏幕上某处的一个down事件、一系列的伪随机事件和一个up事件组成)

--pct-trackball <percent>

调整轨迹事件的百分比(轨迹事件由一个或几个随机的移动组成,有时还伴随有点击)

--pct-nav <percent>

调整“基本”导航事件的百分比(导航事件由来自方向输入设备的up/down/left/right组成)

--pct-majornav <percent>

调整“主要”导航事件的百分比(这些导航事件通常引发图形界面中的动作,如:5-way键盘的中间按键、回退按键、菜单按键)

--pct-syskeys <percent>

调整“系统”按键事件的百分比(这些按键通常被保留,由系统使用,如HomeBackStart CallEnd Call及音量控制键)

--pct-appswitch <percent>

调整启动Activity的百分比。在随机间隔里,Monkey将执行一个startActivity()调用,作为最大程度覆盖包中全部Activity的一种方法。

--pct-anyevent <percent>

调整其它类型事件的百分比。它包罗了所有其它类型的事件,如:按键、其它不常用的设备按钮、等等。

约束限制

-p <allowed-package-name>

如果用此参数指定了一个或几个包,Monkey将只允许系统启动这些包里的Activity。如果你的应用程序还需要访问其它包里的Activity(如选择取一个联系人),那些包也需要在此同时指定。如果不指定任何包,Monkey将允许系统启动全部包里的Activity。要指定多个包,需要使用多个 -p选项,每个-p选项只能用于一个包。

-c <main-category>

如果用此参数指定了一个或几个类别,Monkey将只允许系统启动被这些类别中的某个类别列出的Activity。如果不指定任何类别,Monkey将选 择下列类别中列出的Activity Intent.CATEGORY_LAUNCHERIntent.CATEGORY_MONKEY。要指定多个类别,需要使用多个-c选项,每个-c 项只能用于一个类别。

调试

--dbg-no-events

设置此选项,Monkey将执行初始启动,进入到一个测试Activity,然后不会再进一步生成事件。为了得到最佳结果,把它与-v、一个或几个包约 束、以及一个保持Monkey运行30秒或更长时间的非零值联合起来,从而提供一个环境,可以监视应用程序所调用的包之间的转换。

--hprof

设置此选项,将在Monkey事件序列之前和之后立即生成profiling报告。这将会在data/misc中生成大文件(~5Mb),所以要小心使用它。

--ignore-crashes

通常,当应用程序崩溃或发生任何失控异常时,Monkey将停止运行。如果设置此选项,Monkey将继续向系统发送事件,直到计数完成。

--ignore-timeouts

通常,当应用程序发生任何超时错误(如“Application Not Responding”对话框)时,Monkey将停止运行。如果设置此选项,Monkey将继续向系统发送事件,直到计数完成。

--ignore-security-exceptions

通常,当应用程序发生许可错误(如启动一个需要某些许可的Activity)时,Monkey将停止运行。如果设置了此选项,Monkey将继续向系统发送事件,直到计数完成。

--kill-process-after-error

通常,当Monkey由于一个错误而停止时,出错的应用程序将继续处于运行状态。当设置了此选项时,将会通知系统停止发生错误的进程。注意,正常的(成功的)结束,并没有停止启动的进程,设备只是在结束事件之后,简单地保持在最后的状态。

--monitor-native-crashes

监视并报告Android系统中本地代码的崩溃事件。如果设置了--kill-process-after-error,系统将停止运行。

--wait-dbg

停止执行中的Monkey,直到有调试器和它相连接。

接下来看一个实例

Monkey 的用法是$ adb shell monkey -p your.package.name -v 500 ,首先,我们要找到应用程序在Emulator中所对应的包名,我一开始是一个个目录找得,前7步完成了这项工作,最终发现应用程序包都在 data/data下,你可以在shellcd data/data,然后ls查看当前Emulator中的所有应用程序包。

假如我们想对SDK中的APIDemos做压力测试,

1.Eclipse中新建工程,将

F:/android-sdk-windows/platforms/android-2.0/samples/ApiDemos添加到工程中点击运行,此时,他的APK应该加载到了Emulator

2.在命令行输入adb shell

3.输入ls查看当前文件夹下的目录,执行结果如下

C:/Documents and Settings/Administrator>adb shell

# ls

ls

sqlite_stmt_journals config cache sdcard d etc

system sys sbin proc init.rc init.goldfish.rc init

default.prop data root dev

4.应用程序包都在data下,我们输入cd data进入data文件夹,如下

# cd data

cd data

5.输入ls查看文件夹下的内容,如下所示:

# ls

Ls misc local data app-private app property

Anr backup dontpanic dalvik-cache system lost+found

6.还有个data,所有的应用程序就在这个data下了,进入这个data,然后输入ls如下:

# cd data

cd data

# ls

Ls com.android.mms com.android.providers.applications

com.android.globalsearch com.android.calculator2 com.android.spare_parts

com.android.gesture.builder com.android.music

com.android.sdksetup com.android.packageinstaller com.android.fallback

com.android.providers.settings com.android.providers.drm

com.android.development com.android.providers.telephony

com.android.inputmethod.pinyin com.android.htmlviewer

com.android.settings com.android.netspeed

com.android.providers.userdictionary com.android.browser

com.android.contacts com.android.alarmclock

com.android.camera com.android.providers.contacts

jp.co.omronsoft.openwnn com.android.launcher com.android.phone

com.android.soundrecorder

com.google.android.providers.enhancedgooglesearch com.svox.pico

com.android.customlocale com.android.term com.android.providers.downloads

com.android.providers.media com.android.email android.tts

com.android.inputmethod.latin com.android.server.vpn com.example.android.apis

7.最后一个就是我们刚才加载的APIDemo的应用程序包

8.可以直接输入monkey -p com.example.android.apis -v 50,结果如下,也可以退出shell,在命令行输入,adb shell monkey -p com.example.android.apis -v 500 ,运行过程中,Emulator中的应用程序在不断地切换画面,可以看一下,呵呵:)

# monkey -p com.example.android.apis -v 50

monkey -p com.example.android.apis -v 50

:Monkey: seed=0 count=50

:AllowPackage: com.example.android.apis

:IncludeCategory: android.intent.category.LAUNCHER

:IncludeCategory: android.intent.category.MONKEY

// Event percentages:

// 0: 15.0% // 1: 10.0% // 2: 15.0% // 3: 25.0%

// 4: 15.0% // 5: 2.0% // 6: 2.0% // 7: 1.0%

// 8: 15.0%

:Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.categ

ory.LAUNCHER;launchFlags=0x10000000;component=com.example.android.apis/.ApiDemos

;end

// Allowing start of Intent { act=android.intent.action.MAIN cat=[android.in

tent.category.LAUNCHER] cmp=com.example.android.apis/.ApiDemos } in package com.

example.android.apis

:Sending Pointer ACTION_MOVE x=-4.0 y=2.0

:Sending Pointer ACTION_UP x=0.0 y=0.0

// Allowing start of Intent { cmp=com.example.android.apis/.ApiDemos } in pa

ckage com.example.android.apis

:Sending Pointer ACTION_DOWN x=207.0 y=282.0

:Sending Pointer ACTION_UP x=189.0 y=289.0

// Allowing start of Intent { cmp=com.example.android.apis/.app.Intents } in

package com.example.android.apis

:Sending Pointer ACTION_DOWN x=95.0 y=259.0

:Sending Pointer ACTION_UP x=95.0 y=259.0

:Sending Pointer ACTION_DOWN x=295.0 y=223.0

:Sending Pointer ACTION_UP x=290.0 y=213.0

:Sending Pointer ACTION_MOVE x=-5.0 y=3.0

:Dropped: keys=0 pointers=0 trackballs=0 flips=0

## Network stats: elapsed time=3799ms (3799ms mobile, 0ms wifi, 0ms not connecte

d)

// Monkey finished

monkey script 描述

type= raw events

count= 10

speed= 1.0

start data >>

captureDispatchPointer(5109520,5109520,0,230.75429,458.1814,0.20784314,0.06666667,0,0.0,0.0,65539,0)

captureDispatchKey(5113146,5113146,0,20,0,0,0,0)

captureDispatchFlip(true)

...

DispatchKey(downTime, eventTime, action, code, repeat, metaState, device, scancode);

DispatchPointerDispatchTrackball(downTime, eventTime, action, x, y, pressure, size, metaState, xPrecision, yPrecision, device, edgeFlags);

captureDispatchFlip(true)

DispatchKey(

downTime, //@param The time (in {@link android.os.SystemClock#uptimeMillis}) at which this key code originally went down.毫秒

eventTime, //at which this event happened.

action, //Action code: either {@link #ACTION_DOWN=0}, {@link #ACTION_UP=1}, or {@link #ACTION_MULTIPLE=2}.

code, //The key code. 见附录1 比如KEYCODE_DPAD_DOWN20KEYCODE_DPAD_UP19

repeat, //A repeat count for down events (> 0 if this is after the initial down) or event count for multiple events.

metaState, //Flags indicating which meta keys are currently pressed.

device, //The device ID that generated the key event.

scancode) //Raw device scan code of the event.

DispatchPointerDispatchTrackball(downTime, eventTime,

action, x, y, pressure, size, metaState, xPrecision, yPrecision,

device, edgeFlags);

@action The kind of action being performed -- one of either{@link #ACTION_DOWN=0}, {@link #ACTION_MOVE=1}, {@link #ACTION_UP=2}, or{@link #ACTION_CANCEL=3}.

@param x The X coordinate of this event.

@param y The Y coordinate of this event.

@param pressure The current pressure of this event. The pressure generally ranges from 0 (no pressure at all) to 1 (normal pressure), however values higher than 1 may be generated depending on the calibration of the input device.

@param size A scaled value of the approximate size of the area being pressed touched with the finger. The actual value in pixels corresponding to the finger touch is normalized with a device specific range of values and scaled to a value between 0 and 1.

@param metaState The state of any meta / modifier keys that were in effect when the event was generated.

@param xPrecision The precision of the X coordinate being reported.

@param yPrecision The precision of the Y coordinate being reported.

@param deviceId The id for the device that this event came from. An id of zero indicates that the event didn't come from a physical device; other numbers are arbitrary and you shouldn't depend on the values.

@param edgeFlags A bitfield indicating which edges, if any, where touched by this MotionEvent

captureDispatchFlip(true)是否打开滑盖,true是打开

附录1

KEYCODE_UNKNOWN=0;

KEYCODE_SOFT_LEFT=1;

KEYCODE_SOFT_RIGHT=2;

KEYCODE_HOME=3;

KEYCODE_BACK=4;

KEYCODE_CALL=5;

KEYCODE_ENDCALL=6;

KEYCODE_0=7;

KEYCODE_1=8;

KEYCODE_2=9;

KEYCODE_3=10;

KEYCODE_4=11;

KEYCODE_5=12;

KEYCODE_6=13;

KEYCODE_7=14;

KEYCODE_8=15;

KEYCODE_9=16;

KEYCODE_STAR=17;

KEYCODE_POUND=18;

KEYCODE_DPAD_UP=19;

KEYCODE_DPAD_DOWN=20;

KEYCODE_DPAD_LEFT=21;

KEYCODE_DPAD_RIGHT=22;

KEYCODE_DPAD_CENTER=23;

KEYCODE_VOLUME_UP=24;

KEYCODE_VOLUME_DOWN=25;

KEYCODE_POWER=26;

KEYCODE_CAMERA=27;

KEYCODE_CLEAR=28;

KEYCODE_A=29;

KEYCODE_B=30;

KEYCODE_C=31;

KEYCODE_D=32;

KEYCODE_E=33;

KEYCODE_F=34;

KEYCODE_G=35;

KEYCODE_H=36;

KEYCODE_I=37;

KEYCODE_J=38;

KEYCODE_K=39;

KEYCODE_L=40;

KEYCODE_M=41;

KEYCODE_N=42;

KEYCODE_O=43;

KEYCODE_P=44;

KEYCODE_Q=45;

KEYCODE_R=46;

KEYCODE_S=47;

KEYCODE_T=48;

KEYCODE_U=49;

KEYCODE_V=50;

KEYCODE_W=51;

KEYCODE_X=52;

KEYCODE_Y=53;

KEYCODE_Z=54;

KEYCODE_COMMA=55;

KEYCODE_PERIOD=56;

KEYCODE_ALT_LEFT=57;

KEYCODE_ALT_RIGHT=58;

KEYCODE_SHIFT_LEFT=59;

KEYCODE_SHIFT_RIGHT=60;

KEYCODE_TAB=61;

KEYCODE_SPACE=62;

KEYCODE_SYM=63;

KEYCODE_EXPLORER=64;

KEYCODE_ENVELOPE=65;

KEYCODE_ENTER=66;

KEYCODE_DEL=67;

KEYCODE_GRAVE=68;

KEYCODE_MINUS=69;

KEYCODE_EQUALS=70;

KEYCODE_LEFT_BRACKET=71;

KEYCODE_RIGHT_BRACKET=72;

KEYCODE_BACKSLASH=73;

KEYCODE_SEMICOLON=74;

KEYCODE_APOSTROPHE=75;

KEYCODE_SLASH=76;

KEYCODE_AT=77;

KEYCODE_NUM=78;

KEYCODE_HEADSETHOOK=79;

KEYCODE_FOCUS=80;//*Camera*focus

KEYCODE_PLUS=81;

KEYCODE_MENU=82;

KEYCODE_NOTIFICATION=83;

KEYCODE_SEARCH=84;

KEYCODE_MEDIA_PLAY_PAUSE=85;

KEYCODE_MEDIA_STOP=86;

KEYCODE_MEDIA_NEXT=87;

KEYCODE_MEDIA_PREVIOUS=88;

KEYCODE_MEDIA_REWIND=89;

KEYCODE_MEDIA_FAST_FORWARD=90;

KEYCODE_MUTE=91;

分享到:
评论

相关推荐

    Android_Toolkit_V1.4(Android开发工具集)

    本软件是一款轻捷的Android Java应用程序安装、调试工具,部分功能可以在google提供的Android SDK开发包里面的DDMS(Dalvik Debug Monitor Service (DDMS) Tool)找到官方的实现。DDMS功能很强大,但功能过于繁多,...

    快速Android 反编译 回编译 工具集 含直接调试破解之法

    含Android 反编译 回编译 工具 最新apktool jar查看器jdgui Smali2Java dex2jar 签名signapk Smali2JavaUI AXMLPrinter2 等工具.... 直接调试破解之法-&gt;第一步:使用apktool来破解apk java -jar apktool_2.0.0rc4....

    Android移动应用开发 第3版 卷1卷2合集part2

    充分利用Android的特性 应用程序发布和分发的进阶话题 附录共7个部分 附录还包含了Android开发常用工具 调试桥和SQLite 的使用指南  《Android移动应用开发 第3版 卷Ⅱ:提高篇》不仅适合Android应用程序开发人员...

    Android Studio下载详解.zip

    它提供了完整的Android开发工具集,包括Android SDK、模拟器、代码编辑器、性能分析器、版本控制系统等,帮助开发者高效地进行Android应用的开发、测试和调试。 在下载Android Studio之前,我们需要做好以下准备...

    最新busybox工具集

    Android默认只有toolbox工具集,调试的时候很多命令不能用,将busybox拷贝到system/bin下,就可以使用busybox命令集了

    SwissArmyKnife:Android ui调试工具

    SwissArmyKnife是一个方便调试的android UI的工具。可以直接在android设备屏幕上显示控件的相关信息。3.x版本对根View没有任何要求,可以是任意类型的view。3.x需要弹窗权限。由于时间有限,暂未兼容Android5.0以下...

    Android移动应用开发 第3版 卷1卷2合集part1

    充分利用Android的特性 应用程序发布和分发的进阶话题 附录共7个部分 附录还包含了Android开发常用工具 调试桥和SQLite 的使用指南  《Android移动应用开发 第3版 卷Ⅱ:提高篇》不仅适合Android应用程序开发人员...

    Android开发资料合集-World版!

    9.49、在模拟器上调试GOOGLE MAPS 271 9.50、建立GPRS连接 273 9.51、获取手机位置 274 9.5* 获得经纬度,地名标注在地图上 274 9.52、获得两个GPS坐标之间的距离 276 9.53、通过经纬度显示地图 277 9.54、路径规划 ...

    Android反编译工具ApkIDE(改之理)

    APK改之理(APK IDE)是一款可视化的、易用的、快捷的、一体化的安卓APK修改工具,集成了ApkTool、Dex2jar、JD-GUI等Apk修改工具,集Apk反编译、Apk查壳、加密解密、Apk调试分析、Apk打包、Apk签名,支持语法高亮的...

    android系统原理及开发要点详解

     嵌入式Linux系统学习者:将Android作为一个集Linux核心和应用层程序于一体的系统进行学习,并可以利用Android的仿真环境运行和调试程序。  读者在学习本书的过程中,应尽量对照本书的框图和手头的Android源代码,...

    Android入门中文教程

    Android 是一个专门针对移动设备的软件集,它包括一个操作系统,中间件和一些重要的应用程序。Beta版的 Android SDK 提供了在Android平台上使用JaVa语言进行Android应用开发必须的工具和API接口。 特性 应用程序...

    android开发资料大全

    实用Android开发工具和资源精选 APK权限大全 - Android必懂知识 最无私的Android资料(书籍+代码)分享[总结] Android中文帮助教程(非常合适新手入门) android程序编写及调试新手入门 大家一起学Android(Windows...

    深入Android应用开发 核心技术解析与最佳实践

    第12章针对商业应用的需要讲解了Android的调试、测试与性能优化;第13章全面地剖析了Android的编译系统,包括编译工具、映像文件编译、SDK编译、NDK编译和目标系统的配置等;第14章分析了Android系统的启动过程;第...

    新版Android开发教程.rar

    Android 是一个专门针对移动设备的软件集,它包括一个操作系统,中间件和一些重要的应用程序。 Beta 版 的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 ...

    Android中文帮助文档.rar

    Android 是一个专门针对移动设备的软件集,它包括一个操作系统,中间件和一些重要的应用程序。Beta版的 Android SDK 提供了在Android平台上使用JaVa语言进行Android应用开发必须的工具和API接口。 特性  应用...

    [14本经典Android开发教程]-3-Android SDK 中文开发文档

    Android 是一个专门针对移动设备的软件集,它包括一个操作系统,中间件和一些重要的应用程序。Beta版的 Android SDK 提供了在Android 平台上使用JaVa语言进行Android应用开发必须的工具和API接口。 特性 · 应用程序...

    adb驱动工具集

    adb驱动,支持友坚android210,4412,且支持远程网络调试!调试方法http://write.blog.csdn.net/postedit/9382733

    android 系统上使用的串口调试工具.zip

    软件开发设计:PHP、QT、...云计算与大数据:数据集、包括云计算平台、大数据分析、人工智能、机器学习等,云计算是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需提供给计算机和其他设备。

    一套 Restful 服务开发辅助工具集.zip

    提供集成开发环境(IDE),如Visual Studio、Eclipse、Android Studio和Sublime Text等,这些工具集成了文本编辑器,支持语法高亮、自动补全、代码片段管理和版本控制等功能,有助于开发者高效编写和维护代码。...

Global site tag (gtag.js) - Google Analytics