本来是要写雇主公司自研SoC的Android驱动的,前几天开了个员工,其中一条"罪名"特别强调拷贝操作系统芯片代码到个人存储器,也就是Linux驱动,看来GPL协议保护有时候保护不了我们(就算能用GPL协议维权,也只是得一笔赔偿金,仍然开除),所以,目前不考虑写雇主公司的驱动教程了.我之前完全由我自行实现,且非工作任务,并声明GPL协议的代码,也被领导要求在博客下架,怕被公司法务追责,没办法,我还不打算走,所以只好下架.
一直在做Android的vendor下的自研模块,很久没有做Android上层的东西了,APK的功底还是在之前的Android K上,前几天从清华的服务器拉了套最新的代码,发现已经是Android R(11.0),而我们公司目前最新是P版(9.0)已经交付客户量产一段时间了,Q版(10.0)还在移植当中,2019年3月15号移植的Q已经可以在我们自研SoC上跑起来了.感觉发展的很快,自己需要更新一下实战知识,这里我基于Android 8.0来做一些基础APK教程,以备自己以后复习使用,之所以选择8.0是因为目前使用8.0及以上版本的设备在6%左右,在往上8.1及以上,则只有1.1%,so, you know...
1,环境搭建
2,创建并运行程序
3,View的概念
4,UI布局
5,UI常用控件及使用
6,Toast消息提示
7,AlertDialog对话框
1,环境搭建
首先下载根据操作系统选择下载Android studio: https://developer.android.com/studio/
如果是windows平台,则去甲骨文官网下载Java:https://www.oracle.com/technetwork/java/javase/downloads/index.html
如果是Linux平台,则直接安装openjdk,如: sudo apt-get install java-8-openjdk-amd64
安装步骤很简单,自己百度教程或者自行安装即可,可以参考:https://blog.csdn.net/qq_42154484/article/details/80622411
特别的,如果是amd系的CPU,建议安装Linux版本的Android studio,因为Android studio是基于IntelliJ做的,捆绑了intel的CPU,windows平台,如果不是intel的CPU,无法创建Android模拟器,而在Linux平台,amd CPU的计算机是可以用Android studio创建手机模拟器的,windows平台有一些第三方的手机模拟器,比如夜神模拟器,可以在amd的CPU运行,不过版本都太低,4.4, 5.1什么的,对开发高版本不利,当然,可以用手机真机验证,不过,那样耗机器呀.
2,创建并运行程序
Android Studio-->File-->New-->New Project-->弹出配置框,填一下apk的名字, domain, 存储路径等-->选择最小支持的SDK,我们选择8.0(较旧版本已经发生了一些变化,所以,选8.0或更高比较有学习意义),也及时8.0以下手机不支持运行此程序-->一路Next直到finish,之后,会出现如下图的工程界面(已经是可运行在手机上的程序了):
默认打开了两个文件,MainActivity.java和activity_main.xml,其中前者为执行代码,后者为布局文件,我们打开activity_main.xml,如下图:
可以看到,这个手机界面,所见即所得,此时的代码已经是可以运行的程序了,现在我们就让它运行在模拟器上,首先我们创建一个模拟器,选择Tools-->AVD Manager-->Create Virtual Device-->选择屏幕大小-->Next,选择镜像文件,选择8.0(API 26)及以上的镜像均可,之后finish后,就创建成功了,我们让模拟器运行起来就是这样的效果:
效果上,除了不能控制硬件,具备Android手机的基本功能,模拟器创建好了,我们让刚刚的程序运行起来,我们选择Run-->Run 'app',弹出选择框,选择刚刚创建的模拟器即可(要先安装adb,百度搜),代码会编译,然后会自动通过adb安装到模拟器,并运行,效果如下:
3,View的概念
a)所有的UI控件都继承View类。
b)ViewGroup是View的子类,它可以充当View的容器。
控件直接拖拽的形式或者在xml直接代码的形式都是可以的,下图是拖拽形式:
4,UI布局
ViewGroup直接父类
a)LinearLayout 线性布局
b)RelativeLayout 相对布局
c)FrameLayout 帧布局
d)TableLayout 表格布局
e)AbsoluteLayout 绝对布局
f)ConstraintLayout 约束版面布局
5,UI常用控件及使用
TextView 显示文字
使用:
// 假设textview的id是tv_title1
TextView title = (TextView) findViewById(R.id.tv_title1);
// 设置textview的内容
title.setText("welcome to shanghai");
EditText 用户可编辑 inputType hint ems
使用:
EditText usr = (EditText) findViewById(R.id.usr1);
// 预置的内容,用户时可编辑的,用户输入后,我们可以通过usr.getText()获取内容
usr.setText("username");
Button 事件处理
使用:
Button btn_con = (Button) findViewById(R.id.btn_connect);
btn_con.setOnClickListener(new BtnListener());
// 这里是实现内部类,也可以使用匿名类或者外部类等方式
class BtnListener implements View.OnClickListener {
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.btn_connect:
System.out.println("connected !");
break;
default:
break;
}
}
}
ImageView
使用:
ImageView img = (ImageView) findViewById(R.id.imageView1);
// 这里是通过代码设置图片,也可以在xml中预置图片,不过预置图片遇到代码图片会被替换掉
img.setImageResource(R.mipmap.ic_launcher);
RadioButton和RadioGroup 单选
使用:
// 这里用了一个RadioGroup包了两个radiobutton的形式
RadioGroup rg1 = (RadioGroup) fi