精华内容
下载资源
问答
  • 运行Hello World 首先打开我们的微信Web开发者工具,然后用自己的微信账号扫码登陆,接着选择小程序就会看到我们接下来的画面: 如: 这里我们点击小程序/小游戏会出现一个测试appid,接下来点击确定,会进...

    前言

    通过上一篇我们已经完成了注册及开发环境的搭建,今天我们来开发我们的第一个微信小程序
    微信小程序开发注册流程

    附微信开发工具下载地址:
    微信开发工具

    方便上一篇没有安装的同学。

    运行Hello World

    首先打开我们的微信Web开发者工具,然后用自己的微信账号扫码登陆,接着选择小程序就会看到我们接下来的画面:
    如图:
    在这里插入图片描述
    这里我们点击小程序/小游戏会出现一个测试appid,接下来点击确定,会进入到我们的开发界面:
    如图:
    在这里插入图片描述
    此时点击
    编译
    按钮
    如图:
    在这里插入图片描述
    现在我们可以在左侧模拟器点击
    获取头像昵称**,授权后就会出现我们自己的头像和昵称信息
    如图:
    在这里插入图片描述
    也可以通过预览真机调试,点击后只需要扫描二维码即可。

    代码构成

    如图:我们可以看到四种类型的文件
    在这里插入图片描述

    1 .json 后缀的 JSON 配置文件

    2 .wxml 后缀的 WXML 模板文件

    3 .wxss 后缀的 WXSS 样式文件

    4 .js 后缀的 JS 脚本逻辑文

    json配置

    我们可以看到在项目的根目录有一个 app.json 和 project.config.json,此外在 pages/logs 目录下还有一个 logs.json,我们依次来说明一下它们的用途。

    小程序配置 app.json

    小程序根目录下的 app.json 文件用来对微信小程序进行全局配置,决定页面文件的路径、窗口表现、设置网络超时时间、设置多 tab 等。

    DEMO里的app.json代码如下:

    {
      "pages":[
        "pages/index/index",
        "pages/logs/logs"
      ],
      "window":{
        "backgroundTextStyle":"light",
        "navigationBarBackgroundColor": "#fff",
        "navigationBarTitleText": "WeChat",
        "navigationBarTextStyle":"black"
      }
    }
    

    我们简单说一下这个配置各个项的含义:

    1、pages字段 —— 用于描述当前小程序所有页面路径,这是为了让微信客户端知道当前你的小程序页面定义在哪个目录。

    2、window字段 —— 定义小程序所有页面的顶部背景颜色,文字颜色定义等。

    更多详细属性参见小程序的配置 app.json

    工具配置 project.config.json

    工具配置就相当于我们对当前的idea进行了界面配置、编译配置等,只不过小程序把这个配置文件写入了工程中,当我们换一台电脑打开同一个工程,你会发现还是原来的味道。避免了有些同学换台电脑就不会编程的痛苦。

    我们看一下DEMO里面的工具配置文件:

    {
    	"description": "项目配置文件",
    	"packOptions": {
    		"ignore": []
    	},
    	"setting": {
    		"urlCheck": true,
    		"es6": true,
    		"postcss": true,
    		"minified": true,
    		"newFeature": true,
    		"autoAudits": false
    	},
    	"compileType": "miniprogram",
    	"libVersion": "2.0.4",
    	"appid": "wxe7c297ecaaaa0735",
    	"projectname": "%E5%B0%8F%E7%A8%8B%E5%BA%8F",
    	"debugOptions": {
    		"hidedInDevtools": []
    	},
    	"isGameTourist": false,
    	"condition": {
    		"search": {
    			"current": -1,
    			"list": []
    		},
    		"conversation": {
    			"current": -1,
    			"list": []
    		},
    		"game": {
    			"currentL": -1,
    			"list": []
    		},
    		"miniprogram": {
    			"current": -1,
    			"list": []
    		}
    	}
    }
    

    我们简单说一下这个配置各个项的含义:
    packOptions 用以配置项目在打包过程中的选项。打包是预览、上传时对项目进行的必须步骤。
    setting 项目设置,包括(是否启用 es6 转 es5,上传代码时样式是否自动补全、上传代码时是否自动压缩、是否进行代码保护等)
    compileType 编译类型
    appid 项目的 appid,只在新建项目时读取
    projectname 项目名字,只在新建项目时读取
    debugOptions 调试配置选项

    更多详细参见 开发者工具的配置

    页面配置 page.json

    这里的 page.json 其实用来表示 pages/logs 目录下的 logs.json 这类和小程序页面相关的配置。

    如果你整个小程序的风格是蓝色调,那么你可以在 app.json 里边声明顶部颜色是蓝色即可。实际情况可能不是这样,可能你小程序里边的每个页面都有不一样的色调来区分不同功能模块,因此我们提供了 page.json,让开发者可以独立定义每个页面的一些属性,例如刚刚说的顶部颜色、是否允许下拉刷新等等。

    我们来看一下DEMO中的logs.jsonindex.json

    logs.json中重新定义了标题

    {
      "navigationBarTitleText": "查看启动日志"
    }
    

    index.json中没有做任何修改,也就是完全使用app.json中的配置信息

    {}
    

    其他配置项细节可以参考文档 页面配置

    WXML 模板

    从事过网页编程的人知道,网页编程采用的是 HTML + CSS + JS 这样的组合,其中HTML 是用来描述当前这个页面的结构,CSS 用来描述页面的样子,JS 通常是用来处理这个页面和用户的交互。

    同样道理,在小程序中也有同样的角色,其中 WXML 充当的就是类似 HTML 的角色。
    我们来看一下首页pages/index/index.wxml

    <!--index.wxml-->
    <view class="container">
      <view class="userinfo">
        <button wx:if="{{!hasUserInfo && canIUse}}" open-type="getUserInfo" bindgetuserinfo="getUserInfo"> 获取头像昵称 </button>
        <block wx:else>
          <image bindtap="bindViewTap" class="userinfo-avatar" src="{{userInfo.avatarUrl}}" mode="cover"></image>
          <text class="userinfo-nickname">{{userInfo.nickName}}</text>
        </block>
      </view>
      <view class="usermotto">
        <text class="user-motto">{{motto}}</text>
      </view>
    </view>
    

    在这里插入图片描述
    和 HTML 非常相似,WXML 由标签、属性等等构成。但是也有很多不一样的地方,我们来一一阐述一下:

    1、标签名字有点不一样

    往往写 HTML 的时候,经常会用到的标签是 div, p, span,开发者在写一个页面的时候可以根据这些基础的标签组合出不一样的组件,例如日历、弹窗等等。小程序的将常用的组件封装了起来,用 view, button, text 等等

    2、多了一些 wx:if 这样的属性以及 {{ }} 这样的表达式

    通过 {{ }} 的语法把一个变量绑定到界面上,我们称为数据绑定。仅仅通过数据绑定还不够完整的描述状态和界面的关系,还需要 if/else, for等控制能力,在小程序里边,这些控制能力都用 wx: 开头的属性来表达。

    更详细的文档可以参考 WXML

    WXSS 样式

    WXSS 具有 CSS 大部分的特性,小程序在 WXSS 也做了一些扩充和修改。

    1、新增了尺寸单位。在写 CSS 样式时,开发者需要考虑到手机设备的屏幕会有不同的宽度和设备像素比,采用一些技巧来换算一些像素单位。WXSS 在底层支持新的尺寸单位 rpx ,开发者可以免去换算的烦恼,只要交给小程序底层来换算即可,由于换算采用的浮点数运算,所以运算结果会和预期结果有一点点偏差。

    2、提供了全局的样式和局部样式。和前边 app.json, page.json 的概念相同,你可以写一个 app.wxss 作为全局样式,会作用于当前小程序的所有页面,局部页面样式 page.wxss 仅对当前页面生效。

    3、此外 WXSS 仅支持部分 CSS 选择器

    /**index.wxss**/
    .userinfo {
      display: flex;
      flex-direction: column;
      align-items: center;
    }
    
    .userinfo-avatar {
      width: 128rpx;
      height: 128rpx;
      margin: 20rpx;
      border-radius: 50%;
    }
    
    .userinfo-nickname {
      color: #aaa;
    }
    
    .usermotto {
      margin-top: 200px;
    }
    

    都是一些常见的属性,看名知意。

    更详细的文档可以参考 WXSS

    JS 交互逻辑

    一个服务仅仅只有界面展示是不够的,还需要和用户做交互:响应用户的点击、获取用户的位置等等。在小程序里边,我们就通过编写 JS 脚本文件来处理用户的操作。

    <view>{{ msg }}</view> <button bindtap="clickMe">点击我</button>
    

    点击 button 按钮的时候,我们希望把界面上 msg 显示成 “Hello World”,于是我们在 button 上声明一个属性: bindtap ,在 JS 文件里边声明了 clickMe 方法来响应这次点击操作:

    Page({
      clickMe() {
        this.setData({msg: 'Hello World'})
      }
    })
    

    响应用户的操作就是这么简单,更详细的事件后续介绍。

    此外,小程序还给我们提供了更多丰富的API,用这些 API 可以很方便的调起微信提供的能力,例如获取用户信息、本地存储、微信支付等。在前边的 QuickStart 例子中,在 pages/index/index.js 就调用了 wx.getUserInfo 获取微信用户的头像和昵称,最后通过 setData 把获取到的信息显示到界面上。
    更多详细API后续介绍。

    小程序API

    扫码关注公众号“伟大程序猿的诞生“,更多干货新鲜文章等着你~

    公众号回复“资料获取”,获取更多干货哦~

    有问题添加本人微信号“fenghuokeji996” 或扫描博客导航栏本人二维码

    展开全文
  • 安卓逆向学习笔记(0)- HelloWorld.apk的文件结构

    千次阅读 多人点赞 2015-01-11 00:54:43
    安卓项目的文件结构与安卓apk的文件结构存在着一一对应的关系。安卓应用开发的本质是:将源代码和各种资源文件编译整合成一个apk。安卓逆向的本质是:想办法将apk转化为源代码和资源文件。 简单来说,apk就是一个带...
    0.什么是apk?
           apk是AndroidPackage的缩写,即Android应用安装包(apk)。

           新建一个安卓工程HelloWorld(本文采用的SDK版本为android 4.4),该工程的源代码结构如图1所示:


    图1 HelloWorld源代码的结构

            编译运行该工程,我们会在HelloWorld文件夹的bin目录下面得到一个HelloWrold.apk,这个就是我们所要的apk文件。

    1. apk是怎样练成的

            我们在进行安卓应用开发的时候,只需要右击项目 -> Run as -> 1Android Application就可以生成一个apk。看起来这一切都非常简单,但是实际上生成apk的过程是比较复杂的。对于安卓应用开发者来说,我们不需要在意apk的生成过程,但是对于逆向人员来说,了解apk的编译和生成过程是很有必要的,因为这样能够帮助我们更好地了解apk的体系架构。一个apk的生成需要经历几个步骤,中间需要用到很多工具,具体流程如图2所示:



    图2 apk的编译和生成过程(图片来源:Android工程的编译过程

    2.一个apk的文件结构

            apk文件实质上是一个.zip格式的压缩包,所以我们可以将HelloWorld.apk修改为HelloWorld.zip。然后用WinRAR或者其他压缩软件打开HelloWorld.zip,我们会看到以下文件结构,如图3所示:



    图3 HelloWorld.apk的文件结构

             将HelloWorld.zip解压后,我们会得到5个文件(文件夹),如图4所示:


    图4 HelloWorld.zip解压缩后得到的文件

           下面,我们分别来看一下这5个文件(文件夹)的内容。

    2.1 AndroidManifest.xml

           这里的AndroidManifest.xml就是源代码中的AndroidManifest.xml编译后所得到的文件。AndroidManifest.xml是安卓应用程序的全局配置文件,该文件保存了apk的包名,版本信息,sdk版本,Activity ,Service, Boardcast Receiver, Content Provider等应用组件的配置信息。还有程序所需要的权限也是在AndroidManifest.xml这个文件中声明的。关于AndroidManifest.xml的详细信息,请参考这篇文章:AndroidManifest.xml配置文件详解 

    2.2 classes.dex

            虽然Android开发的源语言是java,但是Android应用程序却不在标准的java虚拟机上运行。Google为Android平台专门设计了一套用于运行Android程序的虚拟机,这就是Dalvik虚拟机(Dalvik Virtual Machine)。而classes.dex就是运行在Dalvik虚拟机上的可执行文件。从图2中可以看出,我们编写的java源代码经过java编译器编译后会生成.class文件;而Android SDK自带的dx工具(dx.bat在\sdk安装目录\sdk\build-tools\android-4.4这条路径下,dx.jar在\sdk安装目录\sdk\build-tools\android-4.4\lib这条路径下)会将这些.class文件转换为classes.dex。值得一提的是,在Android5.0中,Dalvik虚拟机已经被ART虚拟机(Android Runtime)所取代。有兴趣的童靴可以看这篇文章: Android ART运行时无缝替换Dalvik虚拟机的过程分析

            虽然在Android5.0中ART虚拟机已经取代了Dalvik虚拟机,但是使用Android5.0 SDK生成的apk与低版本SDK生成的apk相比,二者的文件结构变化不大。采用Android5.0 SDK生成的apk中也有classes.dex这个文件。   

    2.3 resources.arsc

            arsc,全称为application resource files,是一个包含了已被编译好的资源的二进制格式文件。我们知道,一个安卓应用程序往往包含了很多的资源(例如:layout文件,图片,字符串,菜单)。那么程序在运行时,是怎么调用这些资源的呢?其实在apk编译和生成过程中(参考图2),AAPT一方面会在源代码中为每个资源文件都赋予一个32位的整数做为标记,这些整数全部保存在R.java这个源文件中,R.java是系统自动生成的,用户是无法对其进行修改的。这里需要注意一点:assets文件夹中的资源文件是不会被编译的,关于assets文件夹与res文件夹的区别,感兴趣的童靴请看这篇文章:Android中资源文件夹res/raw和assets的使用 。另一方面,AAPT会生成一个resources.arsc文件,这个二进制文件包含了所有的资源名字以及标记这些资源的数字。resources.arsc的作用是当app运行时,手机设备通过该文件能够很方便匹配和解析apk中的资源。
    2.4 res文件夹

            apk中的res文件夹由drawable文件夹,layout文件夹,menu文件夹这3个子文件夹组成。其中,drawable文件夹用于存放apk的图片资源,layout文件夹用于存放布局文件,menu文件夹用于存放菜单文件。与原工程项目中的res文件夹相比,apk中的res文件夹少了values这个文件夹。(至于为什么少了values这个文件夹,我也不知道,还请路过的大牛指点一下)

    2.5 META-INF文件夹

            META-INF文件夹存放着apk的签名信息。如果你还不了解安卓签名机制,请看这篇文章:[014] Android应用程序签名详解
            打开META-INF文件夹,可以看到3个文件:CERT.RSA,CERT.SF,MANIFEST.MF。其中CERT.RSA包含了公钥信息和发布机构信息;MANIFEST.MF中保存了除自身以外所有其他文件的SHA-1并进行base64编码后的值(注意:对于xml等文本格式的资源文件,系统先将这些文本文件编译成二进制文件,再获取二进制文件的SHA-1值并进行base64编码);CERT.SF的生成过程分两步:(1)读取MANIFEST.MF文件的SHA-1,然后将该SHA-1值base64编码后保存为SHA1-Digest-Manifest,所以与MANIFEST.MF文件相比,CERT.SF会多出一个SHA1-Digest-Manifest值,(2)然后再逐个读取MANIFEST.MF中每个资源文件的Name和SHA1-Digest值再添加2个空行后进行SHA-1,将该SHA-1值进行base64编码后依次写到CERT.SF中。是否听得迷迷糊糊,下面小弟就用HelloWorld.apk举个栗子,手动模拟MANIFEST.MF文件生成classes.dex的SHA1-Digest的过程:
          (1)通过HashTab插件(该插件下载地址见文章末尾)可以查看到classes.dex文件的SHA-1,如图5所示:


    图5 classes.dex文件的SHA-1值

          (2)可以得知classes.dex文件的SHA-1值为:AF37C43BD22A4022FA1998F82F08B278B8844EDB(请注意:这是一串16进制数字,不是字符串),然后在线对该SHA-1值进行base64编码可以得到其对应的base64编码为: rzfEO9IqQCL6GZj4LwiyeLiETts=
    打开MANIFEST.MF文件,可以看到classes.dex的SHA1-Digest值为 rzfEO9IqQCL6GZj4LwiyeLiETts= 如图6所示:

    图6 MANIFEST.MF中的classes.dex的SHA1-Digest

           这与我们所得到的base64编码是一样的,由此可见我们手动生成MANIFEST.MF中classes.dex的SHA1-Digest值是正确的。

           下面是手动模拟CERT.SF生成classes.dex的SHA1-Digest的过程:

          (1)新建一个文本文件,将MANIFEST.MF中的classes.dex的Name和SHA1-Digest这两行拷贝出来,后面跟上两个空行,保存到文件中,如图7所示:


    图7  用于保存MANIFEST.MF文件中classes.dex所对应的Name与SHA1-Digest值的文本文件

         (2)通过HashTab插件查看该文本文件的SHA-1值,如图8所示:


    图8 文本文件的SHA-1值


           可以看出该文本文件的SHA-1值为: 3AD0EBD342ABC2CF801CFAACFAAA45334E0A4337, 将该SHA-1值进行base64编码可以得到base64编码值:OtDr00Krws+AHPqs+qpFM04KQzc=
    (3)打开CERT.SF文件,我们可以看到在文件中classes.dex对应的SHA1-Digest值为: OtDr00Krws+AHPqs+qpFM04KQzc= 

             如图9所示:

    图9 CERT.SF文件中classes.dex对应的SHA1-Digest值

            第(2)步最后得到的base64值与该SHA1-Digest值一致,所以可以证明我们手动模拟生成classes.dex的SHA1-Digest值是正确的。关于这3个文件的详细介绍,有兴趣的童靴请看这篇文章:android APK签名汇总整理  。如果从事安卓逆向,我们必须要清楚一点:没有签名的apk是无法在真机(模拟器)上安装运行的,所以签名文件对apk是很重要的。
    3.总结

           安卓项目的文件结构与安卓apk的文件结构存在着一一对应的关系。安卓应用开发的本质是:将源代码和各种资源文件编译整合成一个apk。安卓逆向的本质是:想办法将apk转化为源代码和资源文件。 简单来说,apk就是一个带有签名的zip格式的压缩包,签名为了保护开发者的权益和标识apk。做为android逆向学习的第一步,了解apk的文件结构和生成过程是很有必要的。这篇文章总结了很多安卓大牛博客的知识点,主要介绍了HelloWorld.apk的文件结构和生成过程,但是真实的商业apk的文件结构会更复杂,为了提升apk的安全性能,现在很多安卓应用程序的核心代码都采用NDK开发,所以生成的apk中会多出一个lib文件夹用于存放so文件。我对android逆向很感兴趣,希望通过博客来记录自己的逆向学习之路,从而提升自己的能力。小弟刚接触安卓逆向,本文如果有什么地方错了,还请路过的大牛指正!

            本文资源下载地址:安卓逆向学习笔记(0)资源下载

    展开全文
  • 一, 环境搭建及HelloWorld ——工欲善其事必先利其器 引言 在开始Android开发之旅启动之前,首先要搭建环境,然后创建一个简单的HelloWorld。本文的主题如下: 1、环境搭建 1.1、JDK安装1.2、Eclipse安装1.3...


    一, 环境搭建及HelloWorld

    ——工欲善其事必先利其器

    引言


    在开始Android开发之旅启动之前,首先要搭建环境,然后创建一个简单的HelloWorld。本文的主题如下:

    • 1、环境搭建
      • 1.1、JDK安装
      • 1.2、Eclipse安装
      • 1.3、Android SDK安装
      • 1.4、ADT安装
      • 1.5、创建AVD
    • 2、HelloWorld

    1、环境搭建

    1.1、JDK安装

    如果你还没有JDK的话,可以去这里下载,接下来的工作就是安装提示一步一步走。设置环境变量步骤如下:

    1. 我的电脑->属性->高级->环境变量->系统变量中添加以下环境变量:
    2. JAVA_HOME值为: D:\Program Files\Java\jdk1.6.0_18(你安装JDK的目录
    3. CLASSPATH值为:.;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\bin;
    4. Path:  在开始追加 %JAVA_HOME%\bin;
    5. NOTE:前面四步设置环境变量对搭建Android开发环境不是必须的,可以跳过。

    安装完成之后,可以在检查JDK是否安装成功。打开cmd窗口,输入java –version 查看JDK的版本信息。出现类似下面的画面表示安装成功了:

    image

    图1、验证JDK安装是否成功

    1.2、Eclipse安装

    如果你还么有Eclipse的话,可以去这里下载,下载如下图所示的Eclipse IDE for Java Developers(92M)的win 32bit版:

    image图2、Eclipse下载

    解压之后即可使用。

    1.3、Android SDK安装

    在Android Developers下载android-sdk_r05-windows.zip,下载完成后解压到任意路径。

    • 运行SDK Setup.exe,点击Available Packages。如果没有出现可安装的包,请点击Settings,选中Misc中的"Force https://..."这项,再点击Available Packages 。
    • 选择希望安装的SDK及其文档或者其它包,点击Installation Selected、Accept All、Install Accepted,开始下载安装所选包
    • 在用户变量中新建PATH值为:Android SDK中的tools绝对路径(本机为D:\AndroidDevelop\android-sdk-windows\tools)。

    image图2、设置Android SDK的环境变量

    “确定”后,重新启动计算机。重启计算机以后,进入cmd命令窗口,检查SDK是不是安装成功。 
    运行 android –h 如果有类似以下的输出,表明安装成功:

    image图3、验证Android SDK是否安装成功

    1.4、ADT安装

    • 打开 Eclipse IDE,进入菜单中的 "Help" -> "Install New Software"
    • 点击Add...按钮,弹出对话框要求输入Name和Location:Name自己随便取,Location输入http://dl-ssl.google.com/android/eclipse。如下图所示:

    image

    • 确定返回后,在work with后的下拉列表中选择我们刚才添加的ADT,我们会看到下面出有Developer Tools,展开它会有Android DDMS和Android Development Tool,勾选他们。 如下图所示:

    image

    • 然后就是按提示一步一步next。

    完成之后:

    • 选择Window > Preferences...
    • 在左边的面板选择Android,然后在右侧点击Browse...并选中SDK路径,本机为: 
      D:\AndroidDevelop\android-sdk-windows
    • 点击Apply、OK。配置完成。

    1.5、创建AVD

    为使Android应用程序可以在模拟器上运行,必须创建AVD。

    • 1、在Eclipse中。选择Windows > Android SDK and AVD Manager
    • 2、点击左侧面板的Virtual Devices,再右侧点击New
    • 3、填入Name,选择Target的API,SD Card大小任意,Skin随便选,Hardware目前保持默认值 
    • 4、点击Create AVD即可完成创建AVD

    注意:如果你点击左侧面板的Virtual Devices,再右侧点击New ,而target下拉列表没有可选项时,这时候你:

    image

      • 然后点击Install Selected按钮,接下来就是按提示做就行了

    要做这两步,原因是在1.3、Android SDK安装中没有安装一些必要的可用包(Available Packages)。

    2、HelloWorld

    • 通过File -> New -> Project 菜单,建立新项目"Android Project"
    • 然后填写必要的参数,如下图所示:(注意这里我勾选的是Google APIs,你可以选你喜欢的,但你要创建相应的AVD)

    image

    相关参数的说明:

    1. Project Name: 包含这个项目的文件夹的名称。
    2. Package Name: 包名,遵循JAVA规范,用包名来区分不同的类是很重要的,我用的是helloworld.test。
    3. Activity Name: 这是项目的主类名,这个类将会是Android的Activity类的子类。一个Activity类是一个简单的启动程序和控制程序的类。它可以根据需要创建界面,但不是必须的。
    4. Application Name: 一个易读的标题在你的应用程序上。
    5. 在"选择栏"的 "Use default location" 选项,允许你选择一个已存在的项目。
    • 点击Finish后,点击Eclipse的Run菜单选择Run Configurations…
    • 选择“Android Application”,点击在左上角(按钮像一张纸上有个“+”号)或者双击“Android Application”, 有个新的选项“New_configuration”(可以改为我们喜欢的名字)。
    • 在右侧Android面板中点击Browse…,选择HelloWorld
    • 在Target面板的Automatic中勾选相应的AVD,如果没有可用的AVD的话,你需要点击右下角的Manager…,然后新建相应的AVD。如下图所示:

    image

    • 然后点Run按钮即可,运行成功的话会有Android的模拟器界面,如下图所示:

    image












    二, HelloWorld项目的目录结构


    我们介绍了如何搭建Android开发环境及简单地建立一个HelloWorld项目,本篇将通过HelloWorld项目来介绍Android项目的目录结构。本文的主要主题如下:

    • 1、HelloWorld项目的目录结构
      • 1.1、src文件夹
      • 1.2、gen文件夹
      • 1.3、Android 2.1文件夹
      • 1.4、assets 
      • 1.5、res文件夹
      • 1.6、AndroidManifest.xml
      • 1.7、default.properties

    1、HelloWorld项目的目录结构

    (这个HelloWorld项目是基于Android 2.1的)在Eclipse的左侧展开HelloWorld项目,可以看到如下图的目录结构:

    image图1、HelloWorld项目目录结构

    下面将分节介绍上面的各级目录结构。

    1.1、src文件夹

    顾名思义(src, source code)该文件夹是放项目的源代码的。打开HelloWorld.java文件会看到如下代码:

    HelloWorld.java

    可以知道:我们新建一个简单的HelloWorld项目,系统为我们生成了一个HelloWorld.java文件。他导入了两个类android.app.Activityandroid.os.Bundle,HelloWorld类继承自Activity且重写了onCreate方法。

    以下说明针对没有学过Java或者Java基础薄弱的人

    @Override

    在重写父类的onCreate时,在方法前面加上@Override 系统可以帮你检查方法的正确性。例如,public void onCreate(Bundle savedInstanceState){…….}这种写法是正确的,如果你写成public void oncreate(Bundle savedInstanceState){…….}这样编译器回报如下错误——The method oncreate(Bundle) of type HelloWorld must override or implement a supertype method,以确保你正确重写onCreate方法。(因为oncreate应该为onCreate)

    而如果你不加@Override,则编译器将不会检测出错误,而是会认为你新定义了一个方法oncreate。

    android.app.Activity类:因为几乎所有的活动(activities)都是与用户交互的,所以Activity类关注创建窗口,你可以用方法setContentView(View)将自己的UI放到里面。然而活动通常以全屏的方式展示给用户,也可以以浮动窗口或嵌入在另外一个活动中。有两个方法是几乎所有的Activity子类都实现的:

    1. onCreate(Bundle):初始化你的活动(Activity),比如完成一些图形的绘制。最重要的是,在这个方法里你通常将用布局资源(layout resource)调用setContentView(int)方法定义你的UI,和用findViewById(int)在你的UI中检索你需要编程地交互的小部件(widgets)。setContentView指定由哪个文件指定布局(main.xml),可以将这个界面显示出来,然后我们进行相关操作,我们的操作会被包装成为一个意图,然后这个意图对应有相关的activity进行处理。
    2. onPause():处理当离开你的活动时要做的事情。最重要的是,用户做的所有改变应该在这里提交(通常ContentProvider保存数据)。

    更多的关于Activity类的详细信息此系列以后的文章将做介绍,如果你想了解更多请参阅相关文档。

    android.os.Bundle类:从字符串值映射各种可打包的(Parcelable)类型(Bundle单词就是捆绑的意思,所有这个类很好理解和记忆)。如该类提供了公有方法——public boolean containKey(String key),如果给定的key包含在Bundle的映射中返回true,否则返回false。该类实现了Parceable和Cloneable接口,所以它具有这两者的特性。

    1.2、gen文件夹

    该文件夹下面有个R.java文件,R.java是在建立项目时自动生成的,这个文件是只读模式的,不能更改。R.java文件中定义了一个类——R,R类中包含很多静态类,且静态类的名字都与res中的一个名字对应,即R类定义该项目所有资源的索引。看我们的HelloWorld项目是不是如此,如下图:

    R图2、R.java对应res

    通过R.java我们可以很快地查找我们需要的资源,另外编绎器也会检查R.java列表中的资源是否被使用到,没有被使用到的资源不会编绎进软件中,这样可以减少应用在手机占用的空间。

    1.3、Android 2.1文件夹

    该文件夹下包含android.jar文件,这是一个Java 归档文件,其中包含构建应用程序所需的所有的Android SDK 库(如Views、Controls)和APIs。通过android.jar将自己的应用程序绑定到Android SDK和Android Emulator,这允许你使用所有Android的库和包,且使你的应用程序在适当的环境中调试。例如上面的HelloWorld.java源文件中的:

    import android.app.Activity;
    import android.os.Bundle;

    这里两行代码就是从android.jar导入包。

    1.4、assets

    包含应用系统需要使用到的诸如mp3、视频类的文件。

    1.5、res文件夹

    资源目录,包含你项目中的资源文件并将编译进应用程序。向此目录添加资源时,会被R.java自动记录。新建一个项目,res目录下会有三个子目录:drawabel、layout、values。

    • drawabel-?dpi:包含一些你的应用程序可以用的图标文件(*.png、*.jpg)
    • layout:界面布局文件(main.xml)与WEB应用中的HTML类同,没修改过的main.xml文件如下(HelloWorld的就没有修改过):
    main.xml

    • values:软件上所需要显示的各种文字。可以存放多个*.xml文件,还可以存放不同类型的数据。比如arrays.xml、colors.xml、dimens.xml、styles.xml

    1.6、AndroidManifest.xml

    项目的总配置文件,记录应用中所使用的各种组件。这个文件列出了应用程序所提供的功能,在这个文件中,你可以指定应用程序使用到的服务(如电话服务、互联网服务、短信服务、GPS服务等等)。另外当你新添加一个Activity的时候,也需要在这个文件中进行相应配置,只有配置好后,才能调用此Activity。AndroidManifest.xml将包含如下设置:application permissions、Activities、intent filters等。

    如果你跟我一样是ASP.NET出生或者学过,你会发现AndroidManifest.xml跟web.config文件很像,可以把它类同于web.config文件理解。

    如果你不是,你可以这样理解——众所周知xml是一种数据交换格式,AndroidManifest.xml就是用来存储一些数据的,只不过这些数据时关于android项目的配置数据。

    HelloWorld项目的AndroidManifest.xml如下所示:

    AndroidManifest.xml

    关于AndroidManifest.xml现在就讲这么多,此系列后面的文章将单独详细介绍。

    1.7、default.properties

    记录项目中所需要的环境信息,比如Android的版本等。 HelloWorld的default.properties文件代码如下所示,代码中的注释已经把default.properties解释得很清楚了:

    default.properties





    三, android架构

    我们对android有了个大致的了解,知道如何搭建android的环境及简单地写一个HelloWorld程序,而且知道一个android项目包括哪些文件夹和文件及相应的作用。本篇将站在顶级的高度——架构,来看android。我开篇就说了,这个系列适合0基础的人且我也是从0开始按照这个步骤来学的,谈架构是不是有点螳臂挡车,自不量力呢?我觉得其实不然,如果一开始就对整个android的架构了然于胸,就不会误入歧途,能够很好地把握全局。本文的主题如下:

    • 1、架构图直观
    • 2、架构详解
      • 2.1、Linux Kernel
      • 2.1、Android Runtime
      • 2.3、Libraries
      • 2.4、Application Framework
      • 2.5、Applications
    • 3、总结

    1、架构图直观

    下面这张图展示了Android系统的主要组成部分:

    Android_system_architecture

    图1、Android系统架构(来源于:android sdk)

    可以很明显看出,Android系统架构由5部分组成,分别是:Linux Kernel、Android Runtime、Libraries、Application Framework、Applications。第二部分将详细介绍这5个部分。

    2、架构详解

    现在我们拿起手术刀来剖析各个部分。其实这部分SDK文档已经帮我们做得很好了,我们要做的就是拿来主义,然后再加上自己理解。下面自底向上分析各层。

    2.1、Linux Kernel

    Android基于Linux 2.6提供核心系统服务,例如:安全、内存管理、进程管理、网络堆栈、驱动模型。Linux Kernel也作为硬件和软件之间的抽象层,它隐藏具体硬件细节而为上层提供统一的服务。

    如果你学过计算机网络知道OSI/RM,就会知道分层的好处就是使用下层提供的服务而为上层提供统一的服务,屏蔽本层及以下层的差异,当本层及以下层发生了变化不会影响到上层。也就是说各层各司其职,各层提供固定的SAP(Service Access Point),专业点可以说是高内聚、低耦合。

    如果你只是做应用开发,就不需要深入了解Linux Kernel层。

    2.2、Android Runtime

    Android包含一个核心库的集合,提供大部分在Java编程语言核心类库中可用的功能。每一个Android应用程序是Dalvik虚拟机中的实例,运行在他们自己的进程中。Dalvik虚拟机设计成,在一个设备可以高效地运行多个虚拟机。Dalvik虚拟机可执行文件格式是.dex,dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。

    大多数虚拟机包括JVM都是基于栈的,而Dalvik虚拟机则是基于寄存器的。两种架构各有优劣,一般而言,基于栈的机器需要更多指令,而基于寄存器的机器指令更大。dx 是一套工具,可以將 Java .class 转换成 .dex 格式。一个dex文件通常会有多个.class。由于dex有時必须进行最佳化,会使文件大小增加1-4倍,以ODEX结尾。

    Dalvik虚拟机依赖于Linux 内核提供基本功能,如线程和底层内存管理。

    2.3、Libraries

    Android包含一个C/C++库的集合,供Android系统的各个组件使用。这些功能通过Android的应用程序框架(application framework)暴露给开发者。下面列出一些核心库:

    • 系统C库——标准C系统库(libc)的BSD衍生,调整为基于嵌入式Linux设备
    • 媒体库——基于PacketVideo的OpenCORE。这些库支持播放和录制许多流行的音频和视频格式,以及静态图像文件,包括MPEG4、 H.264、 MP3、 AAC、 AMR、JPG、 PNG
    • 界面管理——管理访问显示子系统和无缝组合多个应用程序的二维和三维图形层
    • LibWebCore——新式的Web浏览器引擎,驱动Android 浏览器和内嵌的web视图
    • SGL——基本的2D图形引擎
    • 3D库——基于OpenGL ES 1.0 APIs的实现。库使用硬件3D加速或包含高度优化的3D软件光栅
    • FreeType ——位图和矢量字体渲染
    • SQLite ——所有应用程序都可以使用的强大而轻量级的关系数据库引擎

    2.4、Application Framework

    通过提供开放的开发平台,Android使开发者能够编制极其丰富和新颖的应用程序。开发者可以自由地利用设备硬件优势、访问位置信息、运行后台服务、设置闹钟、向状态栏添加通知等等,很多很多。

    开发者可以完全使用核心应用程序所使用的框架APIs。应用程序的体系结构旨在简化组件的重用,任何应用程序都能发布他的功能且任何其他应用程序可以使用这些功能(需要服从框架执行的安全限制)。这一机制允许用户替换组件。

    所有的应用程序其实是一组服务和系统,包括:

    • 视图(View)——丰富的、可扩展的视图集合,可用于构建一个应用程序。包括包括列表、网格、文本框、按钮,甚至是内嵌的网页浏览器
    • 内容提供者(Content Providers)——使应用程序能访问其他应用程序(如通讯录)的数据,或共享自己的数据
    • 资源管理器(Resource Manager)——提供访问非代码资源,如本地化字符串、图形和布局文件
    • 通知管理器(Notification Manager——使所有的应用程序能够在状态栏显示自定义警告
    • 活动管理器(Activity Manager——管理应用程序生命周期,提供通用的导航回退功能

    2.5、Applications

    Android装配一个核心应用程序集合,包括电子邮件客户端、SMS程序、日历、地图、浏览器、联系人和其他设置。所有应用程序都是用Java编程语言写的。更加丰富的应用程序有待我们去开发!

    3、总结

    从上面我们知道Android的架构是分层的,非常清晰,分工很明确。Android本身是一套软件堆叠(Software Stack),或称为「软件叠层架构」,叠层主要分成三层:操作系统、中间件、应用程序。从上面我们也看到了开源的力量,一个个熟悉的开源软件在这里贡献了自己的一份力量。

    现在我们对android的系统架构有了一个整体上的了解,我将用一个例子来深入体会一下,但是考虑到此系列希望0基础的人也能看懂,在介绍例子之前将介绍一下Android应用程序的原理及一些术语,可能需要几篇来介绍。敬请关注!









                              

        从上图中可以看出,Android系统架构为四层结构,从上层到下层分别是应用程序层、应用程序框架层、系统运行库层以及Linux内核层,分别介绍如下:

        1)应用程序层

             Android平台不仅仅是操作系统,也包含了许多应用程序,诸如SMS短信客户端程序、电话拨号程序、图片浏览器、Web浏览器等应用程序。这些应用程序都是       用Java语言编写的,并且这些应用程序都是可以被开发人员开发的其他应用程序所替换,这点不同于其他手机操作系统固化在系统内部的系统软件,更加灵活和个    性化。

        2)应用程序框架层

             应用程序框架层是我们从事Android开发的基础,很多核心应用程序也是通过这一层来实现其核心功能的,该层简化了组件的重用,开发人员可以直接使用其提    供的组件来进行快速的应用程序开发,也可以通过继承而实现个性化的拓展。

             a) Activity Manager(活动管理器)

                  管理各个应用程序生命周期以及通常的导航回退功能

             b) Window Manager(窗口管理器)

                  管理所有的窗口程序

             c)  Content Provider(内容提供器)

                  使得不同应用程序之间存取或者分享数据

             d) View System(视图系统)

                  构建应用程序的基本组件

             e) Notification Manager(通告管理器)

                  使得应用程序可以在状态栏中显示自定义的提示信息

             f) Package Manager(包管理器) 

                  Android系统内的程序管理

             g)Telephony Manager(电话管理器)

                  管理所有的移动设备功能

             h)Resource Manager(资源管理器)

                  提供应用程序使用的各种非代码资源,如本地化字符串、图片、布局文件、颜色文件等

             i)Location Manager(位置管理器)

                 提供位置服务

             j)XMPP Service(XMPP服务)

                 提供Google Talk服务 

      

        3)系统运行库层

             从图中可以看出,系统运行库层可以分成两部分,分别是系统库和Android运行时,分别介绍如下:

             a)系统库

                  系统库是应用程序框架的支撑,是连接应用程序框架层与Linux内核层的重要纽带。其主要分为如下几个:

                  Ø  Surface Manager

                      执行多个应用程序时候,负责管理显示与存取操作间的互动,另外也负责2D绘图与3D绘图进行显示合成。 

         Ø  Media Framework 

                      多媒体库,基于PacketVideo OpenCore;支持多种常用的音频、视频格式录制和回放,编码格式包括MPEG4、MP3、H.264、AAC、ARM。

                  Ø  SQLite:

                      小型的关系型数据库引擎 

                  Ø  OpenGL|ES

                      根据OpenGL ES 1.0API标准实现的3D绘图函数库 

                  Ø  FreeType

                      提供点阵字与向量字的描绘与显示 

                  Ø  WebKit

                      一套网页浏览器的软件引擎

                  Ø  SGL

                      底层的2D图形渲染引擎 

                  Ø  SSL

                      在Andorid上通信过程中实现握手 

                  Ø  Libc

                 从BSD继承来的标准C系统函数库,专门为基于embedded linux的设备定制

     

             b)Android运行时

                 Android应用程序时采用Java语言编写,程序在Android运行时中执行,其运行时分为核心库和Dalvik虚拟机两部分。

                 Ø  核心库

                     核心库提供了Java语言API中的大多数功能,同时也包含了Android的一些核心API,如android.os、android.net、android.media等等。

                 Ø  Dalvik虚拟机

                     Android程序不同于J2me程序,每个Android应用程序都有一个专有的进程,并且不是多个程序运行在一个虚拟机中,而是每个Android程序都有一                个Dalivik虚拟机的实例,并在该实例中执行。Dalvik虚拟机是一种基于寄存器的Java虚拟机,而不是传统的基于栈的虚拟机,并进行了内存资源使用的优化          以及支持多个虚拟机的特点。需要注意的是,不同于J2me,Android程序在虚拟机中执行的并非编译后的字节码,而是通过转换工具dx将Java字节码转成dex格          式的中间码。

      

        4)Linux内核层 

            Android是基于Linux2.6内核,其核心系统服务如安全性、内存管理、进程管理、网路协议以及驱动模型都依赖于Linux内核。









     Android的系统架构采用了分层架构的思想,如图1所示。从上层到底层共包括四层,分别是应用程序程序层、应用框架层、系统库和Android运行时和Linux内核。

          图1:Android系统架构图

          每层功能简要介绍如下:

          一 应用程序层

          该层提供一些核心应用程序包,例如电子邮件、短信、日历、地图、浏览器和联系人管理等。同时,开发者可以利用Java语言设计和编写属于自己的应用程序,而这些程序与那些核心应用程序彼此平等、友好共处。

         二 应用程序框架层

         该层是Android应用开发的基础,开发人员大部分情况是在和她打交道。应用程序框架层包括活动管理器、窗口管理器、内容提供者、视图系统、包管理器、电话管理器、资源管理器、位置管理器、通知管理器和XMPP服务十个部分。在Android平台上,开发人员可以完全访问核心应用程序所使用的API框架。并且,任何一个应用程序都可以发布自身的功能模块,而其他应用程序则可以使用这些已发布的功能模块。基于这样的重用机制,用户就可以方便地替换平台本身的各种应用程序组件。

         三 系统库和Android运行时

         系统库包括九个子系统,分别是图层管理、媒体库、SQLite、OpenGLEState、FreeType、WebKit、SGL、SSL和libc。Android运行时包括核心库和Dalvik虚拟机,前者既兼容了大多数Java语言所需要调用的功能函数,又包括了Android的核心库,比如android.os、android.net、android.media等等。后者是一种基于寄存器的java虚拟机,Dalvik虚拟机主要是完成对生命周期的管理、堆栈的管理、线程的管理、安全和异常的管理以及垃圾回收等重要功能。

         四 Linux内核

         Android核心系统服务依赖于Linux2.6内核,如安全性、内存管理、进程管理、网络协议栈和驱动模型。Linux内核也是作为硬件与软件栈的抽象层。驱动:显示驱动、摄像头驱动、键盘驱动、WiFi驱动、Audio驱动、flash内存驱动、BinderIPC)驱动、电源管理等。

         总结:

         1 Android的系统架构采用分层架构的思想,架构清晰,层次分明,协同工作。

         2 Android的系统架构不仅从宏观上认识了Android系统,同时,也给我们的学习与实践指明了方向。若是从事Android应用开发,那应该研究Android的应用框架层和应用程序层;若是从事Android系统开发,那应该研究Android的系统库和Android运行时;若是从事Android驱动开发,那应该研究Android的Linux内核。总之,找准切入点,实践出真知。


    展开全文
  • IntelliJ IDEA使用教程 (总目录篇) ...然后我就示范一下,如何使用这个IntelliJ IDEA 创建一个Java web 项目的hello world项目。 因为maven的中央仓库不一定是国产的,所以,你在跟我测试的时候,可能...

    IntelliJ IDEA使用教程 (总目录篇)

    学Java的大部分吧都是要整Java web开发项目的,那么最好用的编辑器估计就是这个 IntelliJ IDEA,然后现在maven管理项目是很流行的。

    然后我就示范一下,如何使用这个IntelliJ IDEA 创建一个Java web 项目的hello world项目。
    因为maven的中央仓库不一定是国产的,所以,你在跟我测试的时候,可能会下载的很慢。
    不怕,湿胸我已经解决了这个问题,即使你没有vpn也可以,因为国内有复制的类似的仓库。阿里云仓库吧。
    我会把我的配置文件放在下面。方便你我他的学习。
    不要因为太过简单,就觉得没有总结的必要。

    这个编辑器我就不再多做介绍了。直接开始新建maven hello world 的Java web项目啦

    你电脑上得有(准备环境,我就不多说啦,底部评论39楼因为没tomcat,搞了半天,也是醉了。)

    1,jdk1.7,或者1.8,

    2,maven3.x吧,

    3,tomcat7以上吧。

    4,还得有我这个编辑器。

    这些是准备条件

    下面就直接开始看图啦:

    这个我刚刚开始没注意细看,原来web app 的骨架有2个呢,

    我一开始一直选择的是第一个,因为搜索的时候,一直以为匹配结果就一个,

    后来才发现下面的那个才是我想要的。

    所以,你也要注意咯 

    这个就是我有一篇文章说的,给自己的项目的本地仓库,默认是在c盘的.m2文件夹下,

    但是这很是占用c盘本来就不算大的系统盘的地方

    所以这里可以这么配置就可以把本地仓库移动到c盘之外的任意地方。就这么做就可以啦。

    另外使用的是国内的阿里的仓库。下载速度快。

    想知道细节的,可以看下下面的2个文章。

    不想的也可以不看,跟着我搞,最后,也是OK的。

    参考下文链接:

    1, maven 本地仓库的配置以及如何修改默认.m2仓库位置

    2,maven 阿里云 国内镜像 中央仓库 亲测可用

    上面截图上说的有点不地道不能一个项目使用一个仓库这样的话重复的东西会太多,是我表述不清楚了,其实目的是,节约c盘的地方。可以按照上面的链接把这个仓库按照到c盘之外的其他地方就OK啦。

    新建完成的时候,点上面的那个图的那个“import changes”,然后 等待,时间可能有点长,小白们,表着急。等等src目录啥的再继续。。。

    (2017.12.22 更新开始)

    有老铁,看文章很仔细啊,发现我上面的这个图里面的groupId和那个artifactId和我前面的截图不一致。

    我先解释一下,为啥不一致。因为湿胸这么长的文章,也不是一次就写完的。所以,半道上,发现上面那个importChanges 很有必要展示一下,所以,又重新搞了一次,放了这个截图。又重新来一遍的时候,好像报错说是这个groupId和那个artifactId已经存在还是怎么滴,冲突啦,湿胸我就换了个名字。然后,放了这张图。

    现在,我补上,正确的,他们的,对应关系的图。如下。

    这才是正儿八经的对应图的关系。

    (2017.12.22 更新结束)

     

    这个时候,可以看到,图中蓝色的地址,看到aliyun这个词了吧,就是阿里整的这个国内镜像仓库吧。下载速度还是很快的,嗖嗖嗖就好啦。

    点击图上的Import Changes,因为是maven项目,所以当依赖包发生变化时,也就是pom.xml文件有修改的时候

    他就得重新检查下包的依赖,没有的,自己会去下载的。这个要记住啦,因为maven项目的话,这个基本是天天见的,要熟悉。

    执行完之后,你可以去看,你刚刚新建的那个本地仓库的那个空文件夹,发现你需要的项目依赖的各种jar包都下载下来啦。

     

    如果一切都OK的话,那么下面就该准备tomcat啦。

    继续看图。

    到这之后,有的同学,反应:“我的编辑器这,怎么没有这一行呢?”

    请看下面链接,如何把这个给搞出来。hello world项目跑完,顺带学习一下怎么使用这个编辑器,也是极好的。

    IntelliJ IDEA中如何显示和关闭----工具栏,目录栏,

    这一行里面的按钮还是比较常用的。。。

     

    注意,是点那个加号,再去配置的,而不是直接点下面的,注意哦。

    大概给小白们解释一下图中的信息:也是2017.12.22 更新的哟。

    可以,看到图里面有个你新建这个tomcat服务器的名称,我这叫lxk,这个随意。没啥要求。

    选择使用的tomcat的版本,因为我这使用的容器是tomcat,也许你使用的是jboss,也许就是在这配置的吧,因为我这没jboss容器,所以我使用"也许"这个词。

    选择打开的浏览器,选择端口,一般都8080,当然有时候,有些老铁要是出现端口被占用的问题,你换一个就可以啦。

     

    2017/06/29更新

    女士们,先生们,attention please!!!

    估计有的小伙伴们到这个地方,哎,发现,我怎么就只有一个选项呀,artifact这个选项怎么没有呢?

    不要惊慌,

    方法一:

    先看文章最底部的更新内容,看看是不是因为安装的编辑器不是开发版,也就是说你安装的是免费版的,那可能就是少了下面的插件。

    看看安装之后,是不是就可以搞定问题啦。

    后经有同学反应,你搜索不到插件的,是因为你使用的阉割版的,建议安装专业版,也就是付费的,文章底部有截图的,我也附上我云盘的链接啦。

    方法二:

    到这,你就可以添加了,或者直接点右下角的那个fix,估计一下就自动,给搞定了,继续吧。

    更新完毕。

     

    在这里,有没有小伙伴,很好奇,这2个之间的差别是啥啊,为啥,我选下面带explored的不选上面的那个war呢?

    有这疑问的小伙伴们,可以点下一行的链接:湿胸我简单总结一下。

    artifact什么意思--刚刚搞web开发的同学可能要问个为什么

     

    这个,没搞过web开发的小伙伴,可能不大好理解。

    在 Java Web 开发中, 一般更新了 Java 文件后要手动重启 Tomcat 服务器, 才能生效, 有印象没?我是真的遇到过,当时用的编辑器是eclipse,使用的服务器好像是jboss,浪费不少生命啊, 你如上配置的话, 不论是更新 class 类,css文件,html文件,js文件,还是更新 Spring 配置文件都能做到立马生效,大大提高开发效率。

    我最下面示范的,我说一刷新页面,就可以看到我修改后的效果,就是简单给你演示下热部署功能的好处。

    给你省去了重启tomcat的时间。

    有的同学反应,他没有如上我箭头指向的这一栏,这个是你配置tomcat之后,才有的,OK?

    这个也许你知道呢,但是我就爱啰嗦。

    debug就是启动的时候,你可以直接在代码里面点个断点就可以debug调试啦,你要是直接启动,那么你就不能debug调试啦。

    当然啦在实际开发中,一般都是debug模式启动的,因为你开发过程中要调试各种代码和bug。

    所以,debug启动在开发过程使用的是很多的。

    我这说自动弹出个网页,是因为你在上面配置tomcat的时候,自己配置的,造吗?回头看一下,有个open browse after launch,配置打开的还是chrome浏览器。

    chrome浏览器,是web开发建议使用的浏览器。

     

    至此,这个创建maven 管理的Java web项目的hello world就算完成 了。

     

    你要是掌握了这个,那么基本上Java web开发都是这么个套路,起码创建tomcat这个套路就是这么滴。学会这个就很好啦。

    下面再 给看看新建的项目的文件目录结构的样子。

    有小伙伴表示,我怎么没有target这个文件夹呢?

    表着急,这个是web项目运行之后,把东西打包到这个地方的。自动生成的,你项目页面还没跑起来,先表激动为啥我没有这个文件夹.

     

    我表示,我现在基本上天天看的都是这么个界面吧,大同小异啦。

    所以,作为观众的你,提前熟悉一下,也是没什么坏处的咯。

    这个我就是给你示范一下,实际开发中,为什么要在tomcat里面那么配置个热部署的功能吧算是。

    因为你在开发的时候,你修改个页面的文字啥的,总是去停了再启动一下tomcat,太啰嗦。

    所以,你按我上面配置tomcat的姿势,配置好了tomcat之后,修改完之后,只要刷新下浏览器页面,就可以发现,刚刚做的修改,在没有重启tomcat的情况下 ,就可看到效果。这就完美的解决“动不动就重启下tomcat服务器,浪费时间”的这个重复的问题,多好。

    我说的这些,可能你花钱去培训也不一定知道哦。

    这张图,是我在index.jsp文件上添加了汉字之后,没有重启tomcat,直接在浏览器页面,刷新一下,就看到了效果啦。

    呵呵,小意外。乱码了。。。。。。。。。。。

    虽然,你看到我的页面上出了乱码,但是实际开发过程中,你也可能出现这个情况,现在我告诉你怎么解决,其实就这一张图就是一个问题。

    就是你的网页上某个地方乱码啦,你怎么去处理。

    因为我没有对这个页面的编码方式进行设置,所以,就 乱码啦,具体解决方案就看下一张图。

    我又在文件上添加了一行代码,然后再次刷新下浏览器页面,OK。

    页面上的汉字就显示正常啦。 

    把用到的这句话放这儿吧,估计看官的你也懒得敲。就想着复制粘贴呢。还不知道你。。。。哼。

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

    这下看到了,我在实际开发中也出现过类似的问题,就是某个模块,就是乱码,不知道为啥,当然,也是浪费了点时间,知道在页面上没有设置编码格式,所以才会乱码的,那么你现在看到我告诉你如何解决这个问题啦,你要是在实际工作中也遇到这个问题的话,那么,你就可以很轻松的解决这个问题。这个也是极好的啦。

     

    下面说,我的那个maven的配置文件的内容。主要里面就配置了2点。

    1,就是把本地仓库的地址,自定义到我的e盘的某个文件夹下。

    2,配置国内的镜像仓库地址,使用阿里云的maven镜像仓库。

    具体内容如下:

    如果你不想去看上面的2个链接的话:直接复制下面内容,然后再修改你自己电脑上的某个文件夹作为你的本地仓库地址就可以啦。

    哎,算了,太长了。我就只贴出来关键代码,你自己去你安装的maven的文件目录下复制个setting.xml文件过来修改吧。我就不整个贴啦。

    还是看图吧:

    关于图中的镜像仓库的地址的文字如下:

    <mirror>  
      <id>alimaven</id>  
      <name>aliyun maven</name>  
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>  
      <mirrorOf>central</mirrorOf>          
    </mirror>  

    这个配置文件以及配置文件里面配置的本地仓库的地址,都是我们在新建mavne项目的时候,使用的,可以回头看看我刚刚新建项目的时候,是不是用的就是这个文件,以及这个本地仓库地址。

     

    至此,湿胸我算是,毫无保留,事无巨细的,全都给说的明明白白,清清楚楚。相信,就算是新手,或者不是计算机专业的看了这个也可以把这个hello world项目给整起来啦吧。

    咱点个赞啥的,不算过分吧。当然,不愿意,也不要踩我的文章嘛,最烦有些人肆意践踏别人的劳动成果啦。

    等什么时候有空了,再把这个整个复杂的,带上springMVC框架,再带个mongo数据库啥的,就更接近实战啦。

    springmvc Java web maven的hello world项目的链接地址如下:

    Java springmvc web项目,基于maven的hello world入门级项目使用IntelliJ IDEA 2017版本

    上面更新的这个,也就是简单的springmvc web项目都有的,我这主要说是后台,简单的分三层controller,service,dao,前台页面发请求,可以对应到后台的controller,至于前台的代码,就略显的水了很多啦。还请多多担待些吧。请求也只是简单的get请求,没有添加js支持。所以,就没有通过ajax发送各种类型的get,post请求。

     

    这个就是最简单的,没有涉及到项目里面有很多不同的模块的项目的时候,比如一个公司他可能有很多项目,那么也要maven同时管理好多个模块项目,到时候,就不是这么简单啦。当然啦,那都是后话啦。

    那就涉及到maven的依赖管理,继承,聚合,这都是maven的高级应用啦,立个flag,改天继续ing。

     

    更新于:2017/05/31

    鉴于部分小伙伴的这个编辑器可能是在安装的时候,没有安装tomcat插件,或者说使用的不是开发版,而是那个交流版的。那么你在用的这个编辑器,可能没有办法像我上面那样,一帆风顺的,配置tomcat,然后,顺利的将项目跑起来。那么可以参考下面的配图。自己去安装个试试,看能不能行。

    各位没tomcat的可以看看这个,操作一下,看行不行,要是行了,那就好,不行呢,还请留言告知湿胸你们的问题。

    (2017/07/10又更新的。

    小伙伴们注意了:

    有的同学不是找不到我这个上图的tomcat 插件吗,你就是搜索一下,发现还是没有,那就对啦。问题在哪呢?

    看到没,你确定你下载的是哪个,前面这个是专业版的。功能齐全。后面这个就是阉割版的。要是你安装的是这个,你就卸载了,再来吧。

    至于,注册,配置啥的,我这有一应俱全。

    先是安装包。

    注意,评论里面有最新也就是2017.1,现在已经不是最新的啦。的安装包。以及激活码。

    IntelliJ IDEA 15,16 win 7 64位安装包以及注册码 百度云盘,评论里留的云盘地址是比较新的版本。

    再是注册这个专业版。

    IntelliJ IDEA(或者JetBrains PyCharm)中弹出“IntelliJ IDEA License Activation”时怎么办

    Intellij IDEA 弹窗License activation 报 this license BIG3CLIK6F has been cancelled 错误的解决。

    上面这个链接,是新的注册解决之法。

    然后就是如何配置。

    详细图解 IntelliJ IDEA 刚刚使用时,常用且必须知道和设置的配置

    这个链接是说具体的详细配置。

    最后,在附上,debug和svn使用的总结链接。

    Intellij IDEA debug 使用详解 (2017版编辑器)

    IntelliJ IDEA SVN使用的详细总结

     

    过些日子,我再总结一篇文章,把我的这个关于intellJ的文章给总结到一个文章去,弄一个类似目录的东西出来,方便各位学习观看。

    IntelliJ IDEA使用教程 (总目录篇)

     

    感谢湿胸的传送门链接如下:

    老铁,支付宝扫描领红包的同时,顺便感谢湿胸一下,如何?

     

    展开全文
  • 一、增加内核启动Hello World 任务: 内核启动的时候加载Hello驱动,并打印出Hello World 步骤: (1)在drivers目录下新建hello文件夹,在里面实现相应的hello.c、Makefile、Kconfig (2)修改上一级(linux-3.4.2/...
  • WorldFinal 选手对学习算法的一点总结。五张思维导解决你的困惑
  • 机器学习 tensorflow 2 的hello world

    千次阅读 2019-10-24 08:34:31
    我们学习什么都是学习一个最简单例子开始,有时就叫hello world。 我们学basic, c,c++,python,最简单的程序就是打印显示一个hello world。 ...写一个最简单的tensorflow 程序,演示其基本结构...
  • K8S HelloWorld

    千次阅读 2020-03-14 17:21:29
    本文使用K8S按如下结构图关系部署 HelloWorld 容器。 () 步骤 1、创建deployment文件(RS=3个副本) 2、创建service文件(NodePort 模式) 3、创建deployment和service 4、查看结果 5、访问验证 # 在所有...
  • 最简单的JVM内存结构图

    千次阅读 2021-03-11 20:42:03
    JVM内存结构图 方法区 堆 栈 程序计数器 本地方法栈 直接内存 内存分配性能优化-逃逸分析 总结 JVM内存结构图 大家好,好几天没有更新了,今天的内容有点多,我们详细介绍下JVM内部结构图,还是和之前...
  • main.js主要创建Vue实例,使路由router文件和总组件App结合起来,具体代码作用见下 import Vue from 'vue' import App from './App.vue' /* 引入组件文件 */ import router from './router' /* 引入...
  • GO - HelloWorld

    千次阅读 2013-01-28 23:33:18
    本节将通过Hello World带领大家进入Go的世界,并由此介绍Go代码的主要结构、部分关键字和包的一些特性。为阅读后面的打下基础。 1. Let's go     咱们以往学习任何程序都会以Hello World作为第一个实例,...
  • HBase一对多关系的表结构设计

    千次阅读 2017-03-22 10:27:03
    最近有个任务是把系统中的站内消息移到HBase当中去,才开始查HBase中的一对多关系,发现网上的资料讲的都不甚详尽,这篇blog记录一下我的设计和想法,这些想法毕竟未经证实,尚需验证。如果有大虾认为有不妥甚至错误...
  • 教你玩转HelloWorld

    千次阅读 2016-07-17 01:09:14
    这次我们不使用开发工具,用命令行将HelloWorld编译运行出来,将其中的原理搞清楚。1)将下载好的 JDK 无脑安装(即下一步、下一步)或者指定安装目录,不过自己要记得安装到哪了。2)配置环境变量JAVA_HOME(新建) ...
  • django版 helloworld

    千次阅读 2013-08-17 11:04:07
    2.要创建一个django 项目非常简单,需要 startproject命令即可,输入命令:django-admin.py startproject 项目名称(此处为helloworld) 3.django会在当前目录下生自动生成一个helloworld文件,其目录如下: 以上...
  • 什么是是一种复杂的非线性结构。 在线性结构中,数据元素之间满足唯一的线性关系,每个数据...而在图形结构中,节点之间的关系是任意的,中任意两个数据元素之间都有可能相关。G由两个集合V(顶点Vertex)和
  • 第1章 HelloWorld

    千次阅读 2015-12-18 16:49:35
    第1章 HelloWorld 一、创建你的第一个Android项目 任何一个编程语言写出的第一个程序毫无疑问都会是Hello World,这已经是自20世纪70年代一直流传下来的传统,在编程界已成为永恒的经典,那我们当然也不会搞...
  • 数据结构

    千次阅读 多人点赞 2017-07-05 16:07:40
    第一章一、选择题 1、数据结构的研究的3大方面...二、填空题 1、数据的逻辑结构正确的是 数据的逻辑结构是数据间的关系的描述。 2、以下术语与数据的存储结构无关的是 队列。 3、下列算法的时间复杂度是 O( n)
  • hello world解析一

    2012-10-31 20:04:24
    hello world 解析一  hello world 是cocos2d-x 中自行附带...今天分为两大板块讲,一个是hello world的一个整体运行结构,再是每个语句的解释。语句的解释在《hello world 解析二》中。 hello world 的整体运
  • 【java基础】hello, world

    千次阅读 2020-04-28 14:19:01
    背景 在学习每一个编程语言的时候,在第一次使用这个编程语言编程时,我们都应该...因为《The C Programming Language》中使用它为第一个演示程序,非常著名,所以后来的程序员在学习编程或进行设备调试时延续了这...
  •  数据库Neo4j之爱的初体验 ----与君初相识,犹似故人归在如今大数据(big data)横行的时代,传统的关系型数据库如oracle,mysql在大数据量,高并发的场景下显得力不从心。于是乎,NoSQL横空出世,如column-based...
  • Spring MVC 简单的hello world

    万次阅读 2020-01-13 16:46:08
    一、项目搭建 1、可以在新建项目的使用SpringMVC框架。或者创建一个简单的项目之后再用Add ...目录结构如下。 3、pom文件。加载完成之后才能进行下一步。 <?xml version="1.0" encoding="UTF-8"?&g...
  • xilinx zynq 7000 hello world

    千次阅读 2014-08-11 12:47:10
    让ZYNQ输出"HELLO,WORLD"非常简单,ZEDBOARD.ORG网站上已有ZedBoard_CTT_v14.1文档,大家按照文档中的步骤就能通过串行...1就是main函数的截图,可以看到该函数非常的简单,首先初始化 平台,然后利用“重定向把pri
  • ExtJS学习之HelloWorld

    千次阅读 2014-02-25 17:28:14
    ExtJS学习之HelloWorld ExtJS学习的第一步,如何开始学习ExtJS
  • 本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅个人技术交流分享,不任何商业用途。如有不对之处,请留言,本人及时更改。1、 Esp8266之 搭建开发环境,开始一个“hellow world”串口打印。 2、 Esp...
  • 一部分是Spring框架的介绍,另一部分是基于IOC注入的一个Demo。Spring框架可以看出Spring整体分为5部分: Test 测试模块支持对具有 JUnit 或 TestNG 框架的 Spring 组件的测试。 核心容器 1
  • VC6.0创建hello-World程序

    万次阅读 2014-09-18 11:02:34
    最近在看《数据结构》,想用C语言写个算法,想到了用VC6.0,本科期间,对C语言这门课是很自豪的,无奈时间长没 碰,一个helloWorld都写不成了。看来语言和IDE都是要经常去碰的,否则真的会生疏,闲话少叙,下面开始...
  • TensorFlow2.0 Hello world

    万次阅读 多人点赞 2019-03-26 17:23:32
      第一个神经网络的demo,用来构建一元线性回归模型,具体函数如下所示: ...  接下来的任务就是通过训练集数据({xs,ys{x_{s}}, {y_{s}}xs​,ys​})拟合出上述的线性关系。 导包 import tensorflow as tf im...
  • c/c++常用算法(6) -- 数据结构()

    千次阅读 2013-12-19 16:21:47
     图结构:是研究数据元素之间的多对多的关系。在这种结构中,任意两个元素之间可能存在关系。即结点之间的关系可以是任意的,中任意元素之间都可能相关。  树结构:是研究数据元素之间的一对多的关系。在这种...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 139,721
精华内容 55,888
关键字:

world做结构关系图