Android系统结构:
- 学习Android开发首先得了解Android是什么东西,Android其本质就是在标准的Linux系统上增加了Java虚拟机Dalvik,并在Dalvik虚拟机上搭建了一个JAVA的application framework,所有的应用程序都是基于JAVA的application framework之上。
Android主要应用于ARM平台,但不仅限于ARM,通过编译控制,在X86、MAC等体系结构的机器上同样可以运行。 - android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和linux核心层。
关于Android Studio:
开发Android Studio,我选用的是Android Studio;要使用AS首先得先简单了解AS,一下是简要信息。
Android Studio是Google于2013 I/O大会针对Android开发推出的新的开发工具,目前很多开源项目都已经在采用。
- Android Studio是基于IntelliJIDEA,除了IntelliJ功能,Android Studio还提供:
- ①基于Gradle的构建支持;
- ②Android特定重构和快速修复;
- ③提示工具更好地对程序性能、可用性、版本兼容和其他问题进行控制捕捉;
- ④支持ProGuard和应用签名功能;
- ⑤自带布局编辑器,可以让你拖放UI组件,并在多个屏幕配置上预览布局等。
- ①基于Gradle的构建支持;
- Android studio提供以下的东西,帮助我们开发出优秀的应用程序
- 四大组件(活动(Activity),服务(Service),广播接收器(BroadcastReceiver),内容提供商(Content Provider))
- 丰富的系统控件
- SQLite数据库等持久化技术
- 地理位置定位
- 强大的多媒体
- 传感器
Android Studio安装:
接下来主要是android的安装和SDK,jDK环境配置,还有Gradle的版本配置问题
我遇到好几个问题,以下举个例子
经过多次百度得到解决方案:
Build-tools 版本不对的话,可以去SDK Manager里面去查看当前安装的Android SDK Build-tools的版本,当前版本为23.0.3;没有安装的话需要手动去安装。当然还有其他问题,关于安装的问题当都可以百度到解决方案,就不在赘述。
Android Studio目录结构:
由于时间有限,不求详解,只了解了主要的需要手动编码的:
目录图:
- manifests:
AndroidManifest.xml:APP的配置信息 - java:主要为源代码和测试代码
res:主要是资源目录,存储所有的项目资源
drawable:存储一些xml文件,-*dpi表示存储分辨率的图片,用于适配不同的屏幕。 -mdpi:320x480 -hdpi:480x800、480x854 -xhdpi:至少960x720 -xxhdpi:1280x720 layout:存储布局文件 mipmap:存储原声图片资源 values:存储app引用的一些值 - colors.xml: 存储了一些color的样式 - dimens.xml:存储了一些公用的dp值 - strings.xml: 存储了引用的string值 - styles.xml: 存储了app需要用到的一些样式 Gradle Scripts:build.gradle为项目的gradle配置文件
关于Android Studio的一些比较常用的快捷键:
对于新手们或者对Android Studio没有好感的同学们,肯定想学习默认的Studio快捷键,下面整理了下常用的一些快捷键,更多的快捷键还需要大家自己去习惯适应,当然也可以自定义快捷键,这些网上都能找到,就不具体说明。
Action | Mac OSX | Win/Linux |
---|---|---|
注释代码(//) | Cmd + / | Ctrl + / |
注释代码(/**/) | Cmd + Option + / | Ctrl + Shift + / |
格式化代码 | Cmd + Option + L | Ctrl + Alt + L |
清除无效包引用 | Option + Control + O | Alt + Ctrl + O |
查找 | Cmd + F | Ctrl + F |
查找+替换 | Cmd + R | Ctrl + R |
上下移动代码 | Option + Shift + Up/Down | Alt + Shift + Up/Down |
删除行 | Cmd + Delete | Ctrl + Y |
扩大缩小选中范围 | Option + Up/Down | Ctrl + W/Ctrl + Shift + W |
快捷生成结构体 | Cmd + Option + T | Ctrl + Alt + T |
快捷覆写方法 | Ctrl + O | Ctrl + O |
快捷定位到行首/尾 | Cmd + Left/Right | Ctrl + Left/Right |
折叠展开代码块 | Cmd + Plus,Minus | Ctrl + Plus/Minus |
折叠展开全部代码块 | Cmd + Shift + Plus,Minus | Ctrl + Shift + Plus,Minus |
文件方法结构 | Cmd + F12 | Ctrl + F12 |
查找调用的位置 | Ctrl + Option + H | Ctrl + Alt + H |
大小写转换 | Cmd + Shift + U | Ctrl + Shift + U |
个人技术与团队项目:
- 团队项目是文字图片提取和书摘管理
- 我负责的功能界面是调用相机和进入本机图库调用和获取图片资源
以下是一些核心代码(非全部)
以下是布局文件(需要两个Button,一个ImageView)
<?xml version="1.0" encoding="utf-8"?>
<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:background="#fff"
android:orientation="vertical"
tools:context="com.example.administrator.photoapplication.MainActivity">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="从图库找图片"
android:id="@+id/gallery"
android:onClick="gallery"
android:background="#ccc"
android:textSize="20sp"
android:padding="10dp"
android:layout_marginLeft="30dp"
android:layout_marginTop="40dp"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="拍照获取图片"
android:id="@+id/camera"
android:onClick="camera"
android:background="#ccc"
android:textSize="20sp"
android:padding="10dp"
android:layout_marginLeft="30dp"
android:layout_marginTop="40dp"
/>
<ImageView
android:layout_width="300dp"
android:layout_height="300dp"
android:id="@+id/imageView"
android:scaleType="fitXY"
android:background="@mipmap/ic_launcher"
android:layout_marginTop="40dp"
android:layout_marginLeft="30dp"
/>
</LinearLayout>
- 调用android自带的照相机
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); photoUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
startActivityForResult(intent, 1);
- 调用android的图库
Intent i = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(i, 2);
- 在onActivityResult进行处理,,核心代码(非全部)如下
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
...
switch (requestCode) {
case INTENT_CODE_IMAGE_CAPTURE1:
if (resultCode == RESULT_OK) {
Bundle pBundle = data.getExtras();//从intent对象中获取数据,
...
if (pBundle != null) {
...
Bitmap pBitmap = (Bitmap) pBundle.get("data");
if (pBitmap != null) {
...
mIv.setImageBitmap(pBitmap);
}
}
}
...
break;
}
- 以上在Android6.0以前是没有问题的,但在Android6.0以后就会出现问题。android6.0后,推出了动态权限管理。以往我们将涉及到的权限全部写在清单文件中,只要用户安装了该程序,程序在运行过程中都会获得相应权限。android6.0后,对于一些特别敏感的权限,开发者必须在程序中进行声明。拍照和从相册选择图片都是涉及到用户隐私的敏感权限,必须在程序中取得权限。
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
- 最终效果图如下(由于打开AS和模拟机时太卡,非原图):
心得体会:
刚开始接触Android感觉到它很有意思,在界面开发上和web也可以形成了相通的架构,更加方便,视觉上也是非常的酷,在前期我通过的大量的Android SDK开发范例大全中的例子以及Android提供的APIDEMOS进行学习,尽管例子之间的连接比较零散,不过通过这些例子的学习我可以学习到了很多和以前java上相通的思想。
在Android编程过程中接触和熟悉了Java的编程。由于Android应用程序的开发离不开Java的支持,所以基础的Java知识是必须的。Android系统是基于Linux的手机操作系统平台,要深入系统的学习Android,不仅仅是有Java和Android应用开发,必须要具备Linux,C/C++高级编程才能深入的涉及Android Framework和Android内核开发。成为Android开发的高素质人才。所以,在后续对Android的学习中可能会看一些较底层的书籍。
由于这次学习时间较短,对于Android应用程序的高级编程涉及很少,是这次学习中的不足。要想开发一些好的应用程序,还需要更多的知识支持。由于我java基础不够牢固而且时间不长,只能囫囵吞枣,看个大概,等到软工实践之后我会重新深刻地学习并巩固和掌握。在时刻的学习中,遇到了很多平时没有遇到或者没有特别关注的问题,如常见的Activity忘记注册,对SD卡存取需要权限,在写SQL语句时细微的错误就可能导致程序运行错误。这些问题只有自己在实际开发中才能体会到并且解决,并且在解决后可以长时间的记住。
通过Android的学习,我在寒假前,我又掌握了一项新的前沿的开发技能,也有了更多的发展方向,这在以后的找工作的过程中无疑为我增加了砝码,也可以成为我的一项兴趣爱好,可以根据我自己的需要设计一些小的程序。总之,在这次学习中,我获得了很多东西,提高了自己的编程技巧和编程方法,并且认识了Android应用程序的开发,以及加深了对Java的认识。
最后,通过学习,我收获了很多东西,特别是编程方面的,这对即将毕业的我来说,这次学习是一次较为珍贵的充电。