2016年1月29日星期五

Android Studio导入Project、Module的正确方法(ZT)

Gradle Project项目、Module模块导入


最近看到网上很多人在抱怨,Android Studio很难导入github上下载下来的一些项目,主要包括:

1、导入就在下载Gradle;
2、根本导不进。


下面我分2部分来讲解正确的导入姿势:

1、导入完整的Github Project

我们在github上找一个项目

工程目录如上,里面的东西其实分为2部分,工程相关和项目相关
工程相关用于配置整个项目的编译环境和依赖,项目相关就是你的代码和配置文件啦。

我们先来看工程相关,他包含这样几个文件夹:

由于现在Gradle还不是太成熟,所以版本更新会比较快,如果当初项目作者使用的是其他版本的Gradle,而你没有,AS就好默认去下载最匹配的Gradle
然后选择
open exiting,选择我们的Build.gradle文件,就可以打开项目了。


下面我们使用另一种方法,移花接木:
我们先来看看我们自己创建的项目编译好后是什么样子:

多了几个gradle的文件哈,OK,我们把工程相关的gradle文件夹copy过来,替换掉要导入工程的gradle文件夹
copy需要这几个文件夹:
OK,下面再重新导入Exiting Project,选择Build.gradle文件,即可导入Project。

2、导入一个module

如果我们新建了一个工程,需要导入其他工程的一个module怎么弄呢,如同我们上面的那个项目,需要导入他的library。
这个其实就很简单了,我们前面搞那么多,都是因为工程无法找到正确的编译文件,但是module就不一样了,他只是用一个Build.gradle文件来控制它这个module的编译规则,因此,我们只要导入就可以了,工程的编译配置还是我们自己工程的配置,只是导入的时候需要注意下,这里我们需要选择module的目录,而不是再选择Build.gradle文件了。
ok,选择导入,就可以完成module的添加了。

归根到底,gradle的编译方式与Android的Makefile还是有点类似的,这样的方式,项目越大,优势越明显,但在我们平时的小app开发上,确实显得有点臃肿,编译时间实在太长了!!!但愿正式版能有所改善,相信Google能做到。

对于无法导入项目这件事,说到底还是对Gradle语法和编译环境的不熟悉造成的,所以说,学东西,搞清楚原理很重要啊,特别是像这种刚开始普及的东西,哪来那么多现成的东西可以让你借鉴,只能靠自己,Read The Source Code。

2016年1月27日星期三

windows客户端连接到samba服务器(如何使用samba)(ZT)

首先确保你的服务端已经配置好samba并成功启动服务,我们就可以从 Windows 客户端通过Windows网络连接到Samba,这里以 Windows XP 为例,有两种方法:
1、网上邻居-->查看工作组计算机-->Samba Server
2、打开运行(windows键+R),输入配置samba服务器的主机名或者IP(格式: \\192.168.1.98)
3、进入samba可以看到我们配置的共享目录名,
4、第一次登录需要输入用户名和密码,可勾选记住我的密码,以后在此机器访问samba服务器就可以直接登录了。

2016年1月26日星期二

android体系架构

android 平台大的方面的层次可以划分成三个层次,包括一个操作系统,中间件和应用程序,android 的系统框架图如下:
image

图中的软件层次自上而下分成4个层次
  1. 应用程序(Application)
  2. 用用程序框架(Application Framework)
  3. 各种类库(Libraries)和android运行时(Android Runtime)
  4. 操作系统(OS)

一.应用程序(Application)

        应用层是和用户交互的一个层次,用户可以看得见的一些应用,用户可以操作。这类应用基本都是通过Java语言编写的独立的能够完成某些功能的应用程序。Android本身提供了桌面(Home),联系人(Contacts),拨打电话(Phone),浏览器(Browsers)等很多基本的应用程序。开发人员可以使用应用框架提供的API编写自己的应用程序,普通开发人员要做的事情就是开应用层的程序提供该广大消费者使用。

二.应用程序框架(Application Framework)

       普通开发者可以使用Android基本应用程序使用的系统API,android 应用框架中的各个模块都可以被复用,各种服务也可以被复用,理解了这个机制,开发人员可以更好的更轻松的开发出优秀的android应用。开发过程中常用到的基本框架组件如下:
  1. 一组View(UI 组件),这些UI组件包括Button(按钮),EidtView(文本框),TextView(标签),List(列表)等等,灵活运用这些组件可以快速方便的创建良好的用户交互界面。
  2. Content Providers(内容提供者),听起来有点抽象,通俗的理解Content Provider 就是提供一种服务,通过这种服务应用程序之间可以实现数据的互相 访问和共享,比如通讯录的存储就使用了这种服务,其它应用也可以访问通讯录中存储的联系人信息。
  3. Resource Manager 顾名思义就是资源管理,android中的资源很多包括图片,用户界面(Layout xml),字体,颜色,UI组件的Id等等都可以称之为资源,这些丰富的资源,都是通过Resource Manager来统一进行管理。
  4. Notification Manager(消息通知管理),它在不影响用户正常操作和使用设备的时候在状态栏上提供消息的提示。比如有短信来的时候,android自动会将这个消息提示在状态栏上,用户可以及时的看到。
  5. Activity Manager(活动管理),Activity管理着应用程序的生命周期,并且控制着应用的导航,扮演控制器的角色。每个Activity类似于Windows应用中的一个window。一般的应用都是通过一个个Activity交互构成的。
  6. Window Manager(窗口管理),管理所有启动的窗口。
  7. Location Manager(位置管理),用来管理地图服务的相关功能。
  8. Telephoney Manager(电话管理),用来管理有关的电话的相关功能。
  9. Package Manager(包管理),管理所有的安装在android系统内的应用程序。

三.库(Libraries)和运行环境(RunTime)

     这部分内容开始涉及底层,开发普通的应用不会直接对这个层进行操作。这层中包含了一组类库(Libraries)和运行时(RunTime),
  1. 系统C库(libc),一个从BSD集成来的标准C系统函数库(libc)它是专门为基于嵌入式Linux的设备定制的。
  2. 媒体库(Media Framework),基于PackeVideo OpenCore,该库支持多种常用的音频,视频格式以及回放和录制,同时支持静态图像文件。编码格式包括:MPEG4、H.264,MP3、AAC、AMR、JPG、PNG。
  3. Surface Manager 对显示子系统的管理,并且为多个应用提供2D,3D图层的无缝融合。
  4. WebKit,一个最新的web浏览器引擎,用来支持Andiroid浏览器或者嵌入的web视图。
  5. SGL 底层的2D图形引擎。
  6. OPENGL|ES,基于OpenGL ES 1.0 APIs实现,该库可以使用硬件3D加速或者使用高度优化的3D软加速。
  7. FreeType,位图(bitmap)和矢量(vector)字图显示支持。
  8. SQLite,一个对所有应用程序可用,功能强大的轻量级关系型数据库引擎。
  9. Core Libraries 该核心库提供了Java编程语言核心库的大多数功能。
  10. Dalvik VM, android平台的一个虚拟机,它相当于PC中Java的虚拟机JVM。

四、操作系统(OS)

     Android 的核心系统服务依赖于Linux 2.6 内核,操作系统为Android提供的服务包括:
  1. 安全性(Security)。
  2. 内存管理(Memory Management)
  3. 进程管理(Process Management)
  4. 网络堆栈(Network Stack)
  5. 驱动程序模型(Driver Model)包含以下这些常规的驱动程序:
    (1)Display Driver
    (2)Keypad Driver
    (3)Camera Driver
    (4)WiFi Driver
    (5)Flash Memory Driver
    (6)Audio Driver
    (7)Binder(IPC) Driver
    (8)Power Management
对android的整体框架有一定的了解后对与理解android的一些机制和应用开发有很大的帮助,只有了解了android框架才能更好的使用android提供的功能和服务。

2016年1月24日星期日

Java程序如何生成Jar、exe及安装文件

第一步:

一、用Eclipse生成Jar文件

1,项目名字上面点右键,选择Export,在选择java\JAR file下一步;如下图:
2),选择,src文件夹,.classpath.project可以去掉不选。Select the export distination(选择输出路径),下一步。
3),去掉Export class files withcompile errors(编译错误时也输出class文件)的选项,单击下一步。
4),在main class中选择含有main方法的类,单击finish
5)、可能会出现警告JAR export finished with warings, see details for additional information. 选择OK
6)、可能会出现的错误:
如果以上过程都能胜利完成,恭喜你,这一过程完成了,生成jar文件成功!但是有时候在第(4)后会出现错误,如:
此时,可通过以下方法解决:
1检查项目下的bin文件夹下的文件是否完整打成jar包的过程实质上是将项目下bin文件夹下的文件(class文件,图片,jar包等文件)压缩成jar包。打开项目的目录结构你会发现:在src文件夹下有的文件在bin文件夹下都一个一样的副本(.java文件对应的是.class文件)。
2)、刷新项目,选择要打包的项目,右击鼠标,选择refresh。作用是可能更改了的内容没有及时复制到bin文件夹下。
3)、在项目的目录下,和src同级建一个META-INF文件夹,
里面建立一个METAINF.MF
里面指定main-class以及程序运行相关的代码,
我写的代码是:
Manifest-Version: 1.0
Main-Class: execute.Structure
Class-Path: .lib/jfreechart-1.0.1.jar lib/liquidlnf.jar lib/nimrodlf-1.0b.jar lib/substance.jar
//导入的包的路径
Created-By: loweifu
在第4步中选择Use exiting manifest from workspace,如下图:

二、使用exe4j生可执行的.exe文件

能够生成.exe文件的软件有很多,自己去查一下,我这里只用 exe4j,先去下载一个exe4j并安装。假设你的项目已经胜利打包成jar文件,那么就可以进行下面的操作了。
首先,在任意目录创建一个文件夹,最好命名和项目名相同,我在E盘创建了一个“DataStructure”文件夹,之后将所有的资源文件以及我们生成的可执行jar文件(我的DataStructure.jar)都拷贝到这个文件夹里, lib目录,如果你要使对方计算机在没有安装JDK的情况下也能使用该程序,就需要将自己机器上的jre目录也拷贝进来,我安装的jre6,最后的目录结构如下:

1、如果你有保存过的项目打包配置文件,那么点>>open打开点击next

2 、Project type-选择打包方式

选择“jar in exe”

3、 Application info-配置生成的应用程序的信息

选择你的应用程序的名称和将要生成的可执行文件的输出文件夹。然后>>next.

4、Executable info -配置可执行文件的参数

如果只允许生成的exe文件同时只能打开一个程序运行,则把 “Allow only a single running instance of the application”这项的选择钩上。“Icon File”项表示生成exe文件后的图标,选择一个“.ico”格式的图片。点击next

5、java invocation-配置运行环境

在class path框下清除原有的class path路径,点击右侧的”+”选择打包好的jar文件
(1)、在Archive中选择要导入的jar文件,如下图:
点击“OK”,结果如下:

(2)、在Main class中选择入口类,即含有main函数的类。
之后点击next
Main Class设置完成后,依次将所有需要的第三方类(即外部类)加到Class Path下,方法同添加“DataStructure.jar”一样,点击“Next”

6、jre-配置jre以下(1)、(2)点很重要

MinimumMaximum中分别填写所允许的最小和最大JDK的版本号。
如果要在这个程序中捆绑jre,则进入Configure search sequence选项:
(1)、将Search Windows registry保留,如果没有该项,请点击绿色,选择search registry,然后点击OK如下图;
(2)再把其它的所有的directory删除,特别是如果有JAVA_HOMEJDK_HOME的话一定要删除,因为他会保存你本机的JAVA_HOME地址,安装时会出现路径找不到的错误;
(3)、点击绿色来选择捆绑的JRE位置
选择刚刚拷贝好的jre如:
  
在preferred VM中选择一种-选择虚拟机类型,我选择的是 Default VM。
7、接下来没有什么特别重要的配置了,可根据需要自己去选一些参数,也可以直接next,next,知道完成。

8、可能出现的问题

生成exe文件之后可能每次打开都会出现提示框:this executable was created with an evaluation version of exe4j
这是因为你还没有注册exe4j软件,注册之后就不会有提示了。网上搜的一个注册码:L-g782dn2d-1f1yqxx1rv1sqd

三、将自己编写的程序制作成能在Windows下安装的软件

首先,自己去下一个Inno setup,安装很简单,就不用说了,直接根据提示安装。下载链接:http://www.crsky.com/soft/7195.html#down
Inno Setup是一个免费 Windows安装程序制作软件,我用的是Inno Setup v5.4.3

方法一:

1、编辑脚本程序

我的脚本程序如下:

[Setup]
AppName=数据结构演示程序
AppVersion=1.5
DefaultDirName={pf}\DataStucture
DefaultGroupName=DataStucture
;UninstallDisplayIcon={app}\MyProg.exe
OutputDir=D:\java

[Files]
Source: "E:\DataStructure\jre\*"; DestDir: "{app}\jre"
Source: "E:\DataStructure\jre\bin\*"; DestDir: "{app}\jre\bin"
Source: "E:\DataStructure\jre\bin\client\*"; DestDir: "{app}\jre\bin\client"

Source: "E:\DataStructure\jre\lib\*"; DestDir: "{app}\jre\lib"
Source: "E:\DataStructure\jre\lib\audio\*"; DestDir: "{app}\jre\lib\audio"
Source: "E:\DataStructure\jre\lib\cmm\*"; DestDir: "{app}\jre\lib\cmm"
Source: "E:\DataStructure\jre\lib\deploy\*"; DestDir: "{app}\jre\lib\deploy"
Source: "E:\DataStructure\jre\lib\ext\*"; DestDir: "{app}\jre\lib\ext"
Source: "E:\DataStructure\jre\lib\fonts\*"; DestDir: "{app}\jre\lib\fonts"
Source: "E:\DataStructure\jre\lib\i386\*"; DestDir: "{app}\jre\lib\i386"
Source: "E:\DataStructure\jre\lib\im\*"; DestDir: "{app}\jre\lib\im"
Source: "E:\DataStructure\jre\lib\images\cursors\*"; DestDir: "{app}\jre\lib\images\cursors"
Source: "E:\DataStructure\jre\lib\management\*"; DestDir: "{app}\jre\lib\management"
Source: "E:\DataStructure\jre\lib\security\*"; DestDir: "{app}\jre\lib\security"


Source: "E:\DataStructure\jre\lib\zi\*"; DestDir: "{app}\jre\lib\zi"
Source: "E:\DataStructure\jre\lib\zi\Africa\*"; DestDir: "{app}\jre\lib\zi\Africa"

Source: "E:\DataStructure\lib\*"; DestDir: "{app}\lib"
Source: "E:\DataStructure\DataStructure.exe"; DestDir: "{app}";
                                                                                 
[Icons]
Name: "{group}\DataStructure"; Filename: "{app}\DataStructure.exe"

接下来稍微解释一下:
 [Setup这个段包含用于安装程序和卸载程序的全局设置。
AppName(要安装的)程序名称
AppVersion程序版本号
DefaultDirName安装时默认的文件夹
DefaultGroupName快捷菜单或开始菜单的默认文件夹
OutputDir安装程序的输出路径

[Files]这是定义安装程序安装文件到用户系统中的可选文件段。
Source资源文件
DestDir文件安装到用户系统中的目录。
[Icons]这个可选段定义所有创建在开始菜单和/或其它位置 (比如桌面)的快捷方式。
Name要创建的快捷方式的名字和位置。
Filename捷方式的命令行文件名,通常用一个目录常量开头。

2、编译

编辑好脚本程序之后选择“构建”\“编译”完成后即可。

 方法二:

选择"文件"/"新建",打开''Inno Setup脚本向导"创建新的脚本文件。
   
根据提示一步一步来,这个很简单,我就不多说了。

到此,自己写的程序及完全包装好了,宛如一个完整的软件。“哎,自己简直就是一个软件工程师啊!:-D :-D”哈哈……开个玩笑!


2016年1月5日星期二

windows下安卓环境配置顺序

1、安装java和eclipse
2、下载任意版本的ADT
3、设置Android SDK在线更新镜像服务器。参考http://tools.android-studio.org/
4、完成在线升级

解决红米手机于WINDOWS XP下无法驱动MTP的问题(ZT)

红米手机以USB线连接WINDOWS XP 电脑时,只能充电却无法显示手机存储,
成功安装驱动的方法如下:

一、确认WINDOWS XP 已更新到 SP3

二、确认已安装 WINDOWS MEDIA PLAYER 11

三、
1.进入 设备管理器,
在 黄色问号的 MTP -> 点右键 -> 内容 -> 详细资料
显示【属性】资料如下:
USB\VID_XXXX&PID_XXXX&MI_00\..........
此时请记下VID 及 PID后面的四位XXXX (我的电脑显示VID_2717 PID_1240)

2.在档案管理员 找到c:\windows\inf\wpdmtp.inf -> 点右键 -> 编辑
找到 [Generic.NTx86] 原有设定仅一行
%GenericMTP.DeviceDesc%=MTP, USB\MS_COMP_MTP

新增一行设定如下:
%GenericMTP.DeviceDesc%=MTP, USB\VID_XXXX&PID_XXXX&MI_00

用刚刚记下的VID 及 PID后面的四位 XXXX 替换上面的XXXX

3.找到 [Generic.NTamd64] 原有设定仅一行
%GenericMTP.DeviceDesc%=MTP, USB\MS_COMP_MTP

新增一行设定如下:
%GenericMTP.DeviceDesc%=MTP, USB\VID_xxxx&PID_xxxx&MI_00

也用刚刚记下的VID 及 PID后面的四位 XXXX 替换上面的XXXX

4.将 wpdmtp.inf 储存后  -> 点右键 -> 安装

5.安装完成以后(没任何事发生),重新进入装置管理员 -> 点黄色问号的MTP 右键 
->更新驱动程序,成功安装OK。 收工