隨 Android NDK 提供的另外一個例子 TwoLibs,其中有兩個庫,一個為動態庫,一個為靜態庫,最終供 Android Application 使用的動態庫使用靜態庫中的函數,如下圖所示:其中在 first.c 中定義了一個簡單的 C 函數 int first(int x, int y) { return x+y; }second.
Android NDK 開發包帶有不少例子,一個簡單的例子 Hello-Jni ,介紹了如何使用 Java 調用 C 函數。可以使用 Eclipse 的 import 將該項目添加到工作目錄中.該項目目錄結構如下:├── AndroidManifest.xml ├── default.properties ├── hellojni.txt ├── jni │ ├── Android.mk │ └── hello-jni.
注意:在 Windows 上运行 NDK 需要有 Cygwin 支持,个人建议使用 Ubuntu 为好 。介绍:Android SDK 是一个允许 Android 应用开发人员使用 C 或 C++源文件编译并嵌入到本机源代码中的应用程序包的一组工 具。重要说明:Android NDK 只能用于 android 1.5 以上版本1.
Android OS 的基本框架为 Linux-Java ,在介绍 Android 开发时用到的 Android 结构图:android 体系底层为 Linux 内核,之上提供一些 C/C++ 函数库,因此 Android 应用开发也可以使用 C /C++ 开发,这就是 Android NDK 开发包,但 Android 提供 NDK 开发包的主要目的并不是推荐开发人员使用 C(Native 代码)来编写一般的 Android 应用,而是要使用 Java 代码来编写 Android …
NDK是一系列工具的集合,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者的帮助是巨大的。为什么使用NDK代码的保护。由于apk的java层代码很容易被反编译,而C/C++库反汇难度较大。可以方便地使用现存的开源库。大部分现存的开源库都是用C/C++代码编写的。提高程序的执行效率。
写完应用之后,作完单元测试和功能测试,有必要对应用的抗打击能力做个测试,最好的方法是雇个“猴子”在测试,猴子可以胡乱瞎按键,在这种情况下,你的应用是否还能正常工作呢?Android 测试包中提供了一个 Monkey 工具,就提供了“猴子”功能,不过比真”猴子“还要智能一些,你还可以指挥这个猴子, 比如按键的比例,触发某个事件的频率等等。
如果你需要实现自动测试,Android 的 monkeyrunner 工具可以帮助你实现自动测试,它提供了一组 API 可以用来控制 Android 设备或模拟器,使用 monkeyrunner,你可以编写 Python 程序来安装 Android 应用或是测试包,运行应用或测试,发送按键消息,并可以截屏,然后保存在计算机中。
AndroidTestCase 為一 Android 平台下通用的測試類,它支持所有 JUnit 的 Assert 方法和標準的 setUp 和 tearDown 方法。如果你的測試需要訪問應用的資源或者測試方法依賴於 Context,可以使用 AndroidTestCase 作為基類。它的類繼承關係如下圖所示:Focus2AndroidTest 測試也是 Android ApiDemos 示例解析(116):Views->Focus->2.
ActivityInstrumentationTestCase2 用來測試單個的 Activity,被測試的 Activity 可以使用 InstrumentationTestCase.launchActivity 來啟動,然後你能夠直接操作被測試的 Activity。ActivityInstrumentationTestCase2 也支持:可以在 UI 線程中運行測試方法.
Android 测试框架是基于 JUnit 的,因此对一些和平台关系不大的类,可以直接使用 JUnit 中的 TestCase 来测试。MorseCodeConverterTest 用来测试 MorseCodeConverter 类,MorseCodeConverter 的实现和 Android 平台联系不大,因此可以直接使用 TestCase 作为基类。TestCase 由 Assert 类派生而来,Assert 提供了大量的 Assert方法,用来比较期望值和实际值。
ServiceTestCase 為測試 Service 提供了一個可控的測試環境,它提供對 Service 生命周期的基本支持,並可以通過注入一些依賴對象來控制測試環境以便測試 Service。
ActivityUnitTestCase 通常用来测试单独 Activity。在启动被测试的 Activity 之前,你可以 Inject 一个假的 Context 或是 Application ,使用这个 Mock 的 Context 中一个隔离环境中运行被测试的 Activity。通常用于 Activity 的单元测试,而不和 Anroid 系统进行交互。
ActivityInstrumentationTestCase2 主要用来测试一个或多个 Activity 的功能测试,使用和最终应用同样的运行环境来测试 Activity 的功能。可以使用正常系统 Context (非 Mock)来测试 Activity 的功能。 并允许你创建一些 Mock Intent 用来测试 Activity 的响应。
前面介绍了 Android 测试的一些理论知识,从本篇开始的几篇将结合 ApiDemoTest 示例来介绍 Android 测试的实例。在此之前可以参照 Android 测试教程(3):测试项目 创建 ApiDemos->tests 测试项目,本项目测试用来测试 ApiDemos,主要目的是介绍 Android 测试框架的使用方法。当然要测试 ApiDemos,事先要创建好项目 ApiDemos。下图显示了创建好 ApiDemos->
Android 测试框架也提供对 Service 测试的支持,基本类为 ServiceTestCase,因为 Service 类通常假定和它是和 Client 是分开使用的,因此你可以无需使用 Instrumentation 来测试 Service。
Content Provider 为不同的应用访问数据提供了统一的接口,本篇介绍 Android 测试包中用于测试 Content Provider 的相关知识。Android 测试包中用于测试 Content Provider 的基本类为 ProviderTestCase2, 允许你在一个隔离环境下来测试 Content Provider。 并提供了一些 Mock 类如 IsolatedContext ,MockContentResover 来辅助测试。
Activity 的测试非常依赖于 Android 的 Instrumation 框架,和 Android 其他组件不同的是,Activity 具有复杂的生命周期回调函数(如 onCreate, onStart 等) ,通常情况下除通过 Instrumation 接口外不能直接调用这些回调函数。测试 Activity 的基本测试类为 InstrumentationTestCase,它提供了 Instrumentation 接口给 TestCase 的子类。
本例介绍创建一个测试项目的一般步骤和编写测试用例的基本方法。为简单起见,创建一个 HelloWorld 应用,带有一个 Greeting 类,其定义如下: public class Greeting { private String name; public Greeting(String name){ this.name=name; } public String getGreetings(){ return "Hello," +name;
Android 的测试框架相关的 API 主要定义在三个包中:android.test 用于编写 Android 测试用例android.test.mock 定义了方便测试用的测试“桩”类android.test.suitebuilder 运行测试用例的 Test Runner 类Android 测试 API 是基于 JUnit 扩展而来,并添加了与 Android 平台相关的测试 API。
Android 的编译和测试工具需要测试项目组织符合预订的结构:分别为 Test case 类,Test case 包以及测试项目。JUnit 为 Android 的测试的基础,一般来说,一个 JUint 测试为一个用来测试一个应用某一部分的语句。 你可以将多个测试 Test 方法组织起来构成一个测试用例(Test case),多个测试用例可以构成 Test Suites 。
关注时代Java