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. leetcode 罗马数字转整数

    罗马数字包含以下七种字符:I,V,X,L,C,D 和M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做II ,即为两个并列的 1.1 ...

  2. ASP.NET MVC学习笔记(二)登陆验证

    书上的验证时在配置文件中直接声明用户名和密码,想改成从数据验证账号和密码,搞了一下午都没高出来,不断的调试,发现 var table = userInfo.Tables.FirstOrDefault( ...

  3. WPF:MVVM模式下ViewModel关闭View

    不外乎两种基本方法. 消息通知和参数传递. 一.消息通知 利用View里的IsEnable属性 原理是这样的: 1.UI中的IsEnabled绑定VM中的属性 2.UI的后台代码中,注册IsEnabl ...

  4. java 实验4 异常

    异常(实际使用直接try-catch) 1.常见系统异常 异常 异常的解释 ClassNotFoundException 未找到要装载的类 ArrayIndexOutOfBoundsException ...

  5. css3旋转动画

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  6. 为什么在AI领域网络安全更重要?先睹为快~

    AI迎来了改变世界的新机遇,同时也迎来了新的网络安全问题,只要是联网的系统就会有漏洞爆出~ 随着大数据的应用,人工智能逐渐走入千家万户并显示出巨大的市场空间,从机器人客服.自动驾驶汽车到无人机等,全都 ...

  7. [javascript]——将变量转化为字符串

    这是一个非常常用,但是我自己却经常忘记的一个方法: var item = 'textssdf'; console.log("'"+item+"'") > ...

  8. 10分钟教你用Python打造微信天气预报机器人

    01 前言 最近武汉的天气越来越恶劣了.动不动就下雨,所以,拥有一款好的天气预报工具,对于我们大学生来说,还真是挺重要的了.好了,自己动手,丰衣足食,我们来用Python打造一个天气预报的微信机器人吧 ...

  9. Oracle数据库学习(四):学习中的遇到的问题

    一.xhost图形化界面安装问题 问题1:运行xhost +命令,出现命令没有找到错误 原因:Linux系统没有安装xhost图形化包. 解决办法:安装xhost图形化包,命令如下: yum what ...

  10. Object中的方法以及对象相等的判定

    看图说话 Object有以下几个方法 getClass() final类型,主要是用来获得运行时的类型 hashCode() 返回该对象的哈希码值,方法是为了提高哈希表(例如 java.util.Ha ...