1. 导入Android studio

android_serialport_api是一个开源的串口测试工具,代码应该是用eclipse工程(不确定,没用过eclipse,反正不是Android studio的)。把他放入Android studio中,正好熟悉一下Android studio的使用。

1. 查看源码结构

desk@desk-ubuntu:~/android-serialport-api-master$ tree
.
├── AndroidManifest.xml
├── bin
│   ├── AndroidManifest.xml
│   ├── classes
│   │   └── android_serialport_api
│   │   ├── sample
│   │   │   ├── Application.class
│   │   │   ├── BuildConfig.class
│   │   │   ├── ConsoleActivity$.class
│   │   │   ├── ConsoleActivity$.class
│   │   │   ├── ConsoleActivity.class
│   │   │   ├── LoopbackActivity.class
│   │   │   ├── LoopbackActivity$SendingThread$.class
│   │   │   ├── LoopbackActivity$SendingThread.class
│   │   │   ├── MainMenu$.class
│   │   │   ├── MainMenu$.class
│   │   │   ├── MainMenu$.class
│   │   │   ├── MainMenu$.class
│   │   │   ├── MainMenu$.class
│   │   │   ├── MainMenu$.class
│   │   │   ├── MainMenu.class
│   │   │   ├── R$array.class
│   │   │   ├── R$attr.class
│   │   │   ├── R.class
│   │   │   ├── R$drawable.class
│   │   │   ├── R$id.class
│   │   │   ├── R$layout.class
│   │   │   ├── R$string.class
│   │   │   ├── R$xml.class
│   │   │   ├── Sending01010101Activity.class
│   │   │   ├── Sending01010101Activity$SendingThread.class
│   │   │   ├── SerialPortActivity$.class
│   │   │   ├── SerialPortActivity.class
│   │   │   ├── SerialPortActivity$ReadThread.class
│   │   │   ├── SerialPortPreferences$.class
│   │   │   ├── SerialPortPreferences$.class
│   │   │   └── SerialPortPreferences.class
│   │   ├── SerialPort.class
│   │   ├── SerialPortFinder.class
│   │   └── SerialPortFinder$Driver.class
│   ├── classes.dex
│   ├── MainMenu.apk
│   ├── res
│   │   └── crunch
│   │   └── drawable
│   │   └── icon.png
│   └── resources.ap_
├── gen
│   └── android_serialport_api
│   └── sample
│   ├── BuildConfig.java
│   └── R.java
├── jni
│   ├── Android.mk
│   ├── Application.mk
│   ├── gen_SerialPort_h.sh
│   ├── SerialPort.c
│   └── SerialPort.h
├── libs
│   ├── armeabi
│   │   └── libserial_port.so
│   ├── armeabi-v7a
│   │   └── libserial_port.so
│   └── x86
│   └── libserial_port.so
├── project.properties
├── README.md
├── res
│   ├── drawable
│   │   └── icon.png
│   ├── layout
│   │   ├── console.xml
│   │   ├── loopback.xml
│   │   ├── main.xml
│   │   └── sending01010101.xml
│   ├── values
│   │   ├── baudrates.xml
│   │   └── strings.xml
│   └── xml
│   └── serial_port_preferences.xml
├── run_emulator.sh
└── src
└── android_serialport_api
├── sample
│   ├── Application.java
│   ├── ConsoleActivity.java
│   ├── LoopbackActivity.java
│   ├── MainMenu.java
│   ├── Sending01010101Activity.java
│   ├── SerialPortActivity.java
│   └── SerialPortPreferences.java
├── SerialPortFinder.java
└── SerialPort.java

2. 加入Android studio

将应用代码由eclipse导入Android studio的方法NDK-Build和Cmake两种方法(以android_serialport_api为例)

3. 分析代码

1. 总体框架

2. AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android_serialport_api.sample" //包名
android:versionCode="3"
android:versionName="1.2" > <application //应用
android:icon="@drawable/icon"
android:label="@string/app_name"
android:name="Application" > //第一个进入的activity;名字为MainMenu
<activity
android:label="@string/app_name"
android:name="MainMenu" >
<intent-filter >
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="SerialPortPreferences" >
</activity>
<activity android:name="ConsoleActivity" >
</activity>
<activity android:name="LoopbackActivity" >
</activity>
<activity android:name="Sending01010101Activity"></activity>
</application> <uses-sdk android:minSdkVersion="3" /> </manifest>

3. MainMenu.java

public class MainMenu extends Activity {

    /** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main); final Button buttonSetup = (Button)findViewById(R.id.ButtonSetup);
buttonSetup.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
startActivity(new Intent(MainMenu.this, SerialPortPreferences.class));
}
}); final Button buttonConsole = (Button)findViewById(R.id.ButtonConsole);
buttonConsole.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
startActivity(new Intent(MainMenu.this, ConsoleActivity.class));
}
}); final Button buttonLoopback = (Button)findViewById(R.id.ButtonLoopback);
buttonLoopback.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
startActivity(new Intent(MainMenu.this, LoopbackActivity.class));
}
}); final Button button01010101 = (Button)findViewById(R.id.Button01010101);
button01010101.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
startActivity(new Intent(MainMenu.this, Sending01010101Activity.class));
}
}); final Button buttonAbout = (Button)findViewById(R.id.ButtonAbout);
buttonAbout.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(MainMenu.this);
builder.setTitle("About");
builder.setMessage(R.string.about_msg);
builder.show();
}
}); final Button buttonQuit = (Button)findViewById(R.id.ButtonQuit);
buttonQuit.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
MainMenu.this.finish();
}
});
}
}

4. SerialPortPreferences.java

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="BAUDRATE">300</string>
<string name="DEVICE">/dev/ttyS2</string>
</map>

android_serialport_api代码分析的更多相关文章

  1. Android代码分析工具lint学习

    1 lint简介 1.1 概述 lint是随Android SDK自带的一个静态代码分析工具.它用来对Android工程的源文件进行检查,找出在正确性.安全.性能.可使用性.可访问性及国际化等方面可能 ...

  2. pmd静态代码分析

    在正式进入测试之前,进行一定的静态代码分析及code review对代码质量及系统提高是有帮助的,以上为数据证明 Pmd 它是一个基于静态规则集的Java源码分析器,它可以识别出潜在的如下问题:– 可 ...

  3. [Asp.net 5] DependencyInjection项目代码分析-目录

    微软DI文章系列如下所示: [Asp.net 5] DependencyInjection项目代码分析 [Asp.net 5] DependencyInjection项目代码分析2-Autofac [ ...

  4. [Asp.net 5] DependencyInjection项目代码分析4-微软的实现(5)(IEnumerable<>补充)

    Asp.net 5的依赖注入注入系列可以参考链接: [Asp.net 5] DependencyInjection项目代码分析-目录 我们在之前讲微软的实现时,对于OpenIEnumerableSer ...

  5. 完整全面的Java资源库(包括构建、操作、代码分析、编译器、数据库、社区等等)

    构建 这里搜集了用来构建应用程序的工具. Apache Maven:Maven使用声明进行构建并进行依赖管理,偏向于使用约定而不是配置进行构建.Maven优于Apache Ant.后者采用了一种过程化 ...

  6. STM32启动代码分析 IAR 比较好

    stm32启动代码分析 (2012-06-12 09:43:31) 转载▼     最近开始使用ST的stm32w108芯片(也是一款zigbee芯片).开始看他的启动代码看的晕晕呼呼呼的. 还好在c ...

  7. 常用 Java 静态代码分析工具的分析与比较

    常用 Java 静态代码分析工具的分析与比较 简介: 本文首先介绍了静态代码分析的基 本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBu ...

  8. SonarQube-5.6.3 代码分析平台搭建使用

    python代码分析 官网主页: http://docs.sonarqube.org/display/PLUG/Python+Plugin Windows下安装使用: 快速使用: 1.下载jdk ht ...

  9. angular代码分析之异常日志设计

    angular代码分析之异常日志设计 错误异常是面向对象开发中的记录提示程序执行问题的一种重要机制,在程序执行发生问题的条件下,异常会在中断程序执行,同时会沿着代码的执行路径一步一步的向上抛出异常,最 ...

随机推荐

  1. WPF 平板上按钮点击不触发,鼠标点击触发的两种解决方法

    今天运行在windows平板上的程序,有个功能是弹出子窗体,点弹出窗体的关闭按钮,要点好几次才能触发.网上找了找,也有人与我类似的情形. 解决方法如下: public static void Disa ...

  2. 如何进入PageAdmin CMS 安装界面

    一般下面几个应用场景如第一次使用PageAdmin配置参数.服务器迁移.主域名更换.忘记超级管理员密码等都可以在安装界面进行设置. 下面为PageAdmin安装步骤 1.地址栏输入:http://您的 ...

  3. Windows7 64位下SDK Manager.exe无法运行问题解决方法

    我在Windows7 64位下运行SDK Manager.exe总是一闪而过,无法正常启动它,最后在网上找到一篇文章,修改系统“path”变量,把“path”变量中的第一项设置为我的JDK目录“C:\ ...

  4. MySql环境变量配置

    配置环境变量 前面步骤完成后安装好MySQL,为MySQL配置环境变量.MySQL默认安装在C:\Program Files下. 1)新建MYSQL_HOME变量,并配置:C:\Program Fil ...

  5. Azure Powershell部署使用平台映像的托管Windows VM及相关问题说明

    1.脚本背景信息: a.使用平台镜像(Windows Server 2016 zh-cn)部署高性能托管磁盘虚拟机 b.虚拟机默认不开启Boot诊断 c.添加三块已经创建好的数据磁盘 d.添加已创建好 ...

  6. 简单创建一个完整的struts2框架小程序

    要完成一个struts2框架的搭建, 1.首先应该从官网上下载最新的jar包,网络连接:http://struts.apache.org/download.cgi#struts2514.1,选择下载F ...

  7. 集合之五:Set接口(答案)

    package com.shsxt.homework; import java.util.ArrayList; import java.util.Collection; import java.uti ...

  8. Python基础部分的疑惑解析——运算符和数据类型(5)

    运算符 最后得到数值的: 算数运算符 赋值运算符 最后得到布尔值的: 成员运算符:in   not in 逻辑运算符    and   or   没有优先级就是按顺序执行 比较运算符 数据类型 1.整 ...

  9. Python基础部分的疑惑解析(2)

    变量: 变量名由 字母.数字.下划线构成,数字不能做为开头 不能用关键字:另外一些内置的方法也别用 推荐使用下划线命名间两个单词user_id 变量在最后底层处理的时候没什么意义,但是在命名的时候有利 ...

  10. 1091 N-自守数 (15 分)

    // 建一个判断函数,接受两个整形的变量,再通过循环按位判断相等与否,主体函数中调用被调函数,建立一个判断变量.#include <iostream> using namespace st ...