个人技术博客(α)

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组件,并在多个屏幕配置上预览布局等。
  • 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的认识。  
    最后,通过学习,我收获了很多东西,特别是编程方面的,这对即将毕业的我来说,这次学习是一次较为珍贵的充电。
posted @ 2017-11-16 17:44  霸气发哥  阅读(422)  评论(1编辑  收藏  举报