AS中并没有独立的Module 工程,可是能够在普通的Project中增加Module。所谓的Module就是我们通常所指的模块化的一个单元。并经常以jar包的形式存在。以下以一个获取手机信息的样例演示AS中的模块化。

一、项目中新建Module

File—>New Module,具体见下图。





二、新建Java类

新建一个PhoneInfo类,内容例如以下:

package com.linc.mylibrary;

import android.content.Context;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Build;
import android.telephony.TelephonyManager;
import android.text.format.Formatter;
import android.util.Log; import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException; /**
* Created by linc on 15-3-19.
*/
public class PhoneInfo {
private String TAG = "PhoneInfo";
private Context mContext;
private TelephonyManager mPhoneManager; public PhoneInfo(Context context) {
mContext = context;
mPhoneManager = (TelephonyManager)mContext.getSystemService(Context.TELEPHONY_SERVICE);
} public String getDeviceId() {
return mPhoneManager.getDeviceId();
} public String getPhoneModule() {
return Build.MODEL;
} public String getSerialNumber() {
return Build.SERIAL;
} public String getPhoneNumber() {
return mPhoneManager.getLine1Number();
} public String getMacAddress(){
String result = "";
WifiManager wifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
result = wifiInfo.getMacAddress();
Log.i(TAG, "macAdd:" + result);
return result;
} public String[] getCpuInfo() {
String str1 = "/proc/cpuinfo";
String str2 = "";
String[] cpuInfo = {"", ""}; //1-cpu型号 //2-cpu频率
String[] arrayOfString;
try {
FileReader fr = new FileReader(str1);
BufferedReader localBufferedReader = new BufferedReader(fr, 8192);
str2 = localBufferedReader.readLine();
arrayOfString = str2.split("\\s+");
for (int i = 2; i < arrayOfString.length; i++) {
cpuInfo[0] = cpuInfo[0] + arrayOfString[i] + " ";
}
str2 = localBufferedReader.readLine();
arrayOfString = str2.split("\\s+");
cpuInfo[1] += arrayOfString[2];
localBufferedReader.close();
} catch (IOException e) {
}
Log.i(TAG, "cpuinfo:" + cpuInfo[0] + " " + cpuInfo[1]);
return cpuInfo;
} public String getTotalMemory() {
String str1 = "/proc/meminfo";// 系统内存信息文件
String str2;
String[] arrayOfString;
long initial_memory = 0; try {
FileReader localFileReader = new FileReader(str1);
BufferedReader localBufferedReader = new BufferedReader(
localFileReader, 8192);
str2 = localBufferedReader.readLine();// 读取meminfo第一行。系统总内存大小 arrayOfString = str2.split("\\s+");
for (String num : arrayOfString) {
Log.i(str2, num + "\t");
} initial_memory = Integer.valueOf(arrayOfString[1]).intValue() * 1024;// 获得系统总内存,单位是KB,乘以1024转换为Byte
localBufferedReader.close(); } catch (IOException e) {
}
return Formatter.formatFileSize(mContext, initial_memory);// Byte转换为KB或者MB。内存大小规格化
}
}

并在Module的AndroidManifest文件里增加两个权限:

    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

三、app中引入此module

在app的build.gradle中增加此module的dependency。例如以下:

dependencies {
compile 'com.android.support:appcompat-v7:21.0.3'
compile project(':mylibrary')
}

在app的MainActivity中增加測试代码:

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); PhoneInfo info = new PhoneInfo(this);
Log.d(TAG,"devices id: "+info.getDeviceId());
Log.d(TAG,"getPhoneModule: "+info.getPhoneModule());
Log.d(TAG,"getSerialNumber: "+info.getSerialNumber());
Log.d(TAG,"getPhoneNumber: "+info.getPhoneNumber());
Log.d(TAG,"getMacAddress: "+info.getMacAddress());
Log.d(TAG,"getCpuInfo: "+info.getCpuInfo());
Log.d(TAG,"getTotalMemory: "+info.getTotalMemory());
}

四、jar的生成

项目编译之后jar会在以下的文件夹找到:

./mylibrary/build/intermediates/bundles/debug/classes.jar
./mylibrary/build/intermediates/bundles/release/classes.jar

五、Module的移除

先要在File—>Project Structure中将此module“减“掉后才干在项目中Module右键的Delete键可用。

參考:

http://www.cnblogs.com/wuya/p/android-studio-gradle-export-jar-assets.html

http://www.cnblogs.com/helloandroid/articles/2210334.html

http://blog.csdn.net/hyr83960944/article/details/37519299

Android实战技巧之十九:android studio导出jar包(Module)并获得手机信息的更多相关文章

  1. 【转】Android实战技巧之四十九:Usb通信之USB Host

    零 USB背景知识 USB是一种数据通信方式,也是一种数据总线,而且是最复杂的总线之一. 硬件上,它是用插头连接.一边是公头(plug),一边是母头(receptacle).例如,PC上的插座就是母头 ...

  2. Android Studio导出Jar包

    这篇博客将介绍一下如何用Android Studio导出jar包,希望能给大家带来帮助. 首先需要修改build.gradle文件,在Android Studio中会显示多个build.gradle文 ...

  3. Android Studio 导出jar包

    不像在Eclipse,可以直接导出jar包.AndroidStudio只可以生成aar包. 在网上看到许多朋友问怎么可以像Eclipse一样导出jar包,其实我们只要知道它的原理就可以了. 用jar命 ...

  4. Android实战技巧之十二:Android Studio导入第三方类库、jar包和so库

    第三方类库源码 将一网友的XMPP代码从ADT转到AS时,发现其使用了第三方类库,源码放在了lib下,直接在AS中Import project,第三方类库并没有自动导入进来,看来需要自己动手了. 项目 ...

  5. Android Studio导出Jar包并混淆

    在Android Studio中,自带反编译查看class文件,如果没有混淆的话,class文件跟java文件基本没有区别了,为了保护,还是混淆的好. 网上看了不少资料,都是直接下载proguard额 ...

  6. Android实战技巧之三十八:Handler使用中可能引发的内存泄漏

    问题描写叙述 曾几何时,我们用原来的办法使用Handler时会有以下一段温馨的提示: This Handler class should be static or leaks might occur ...

  7. Android实战技巧:深入解析AsyncTask

    AsyncTask的介绍及基本使用方法 关于AsyncTask的介绍和基本使用方法可以参考官方文档和Android实战技巧:多线程AsyncTask这里就不重复. AsyncTask引发的一个问题 上 ...

  8. Unity 3D与Android Studio安卓交互之-导出jar包

    u3d与安卓 jar 包交互 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享 ...

  9. android studio 使用gradle 导出jar包,并打包assets目录

    警告:本文年久失修. 随着android studio的升级 ,gradle的升级,严格按照本文的代码去做可能不会成功,希望依然可以作为解决问题的思路. 最近项目在做一个sdk,供别的开发者使用,所以 ...

随机推荐

  1. 多校联赛2 Problem2 Warm up 求桥的数目+缩点后的树的直径 当时被不知道原因的爆栈爆到无语了。。

    Warm up Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) Total S ...

  2. jQuery 事件 - error() 方法

    实例 如果图像不存在,则用一段预定义的文本取代它: $("img").error(function(){ $("img").replaceWith(" ...

  3. SVG Loading

    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="64&qu ...

  4. char值码对应大全

    Char("0") 为0的字符Char("1") Char("2") Char("3") Char("4&qu ...

  5. eclipse中运行tomcat找不到jre的解决办法

    一.在eclipse中选择 window--->preferences 二.runtime environment  ----->edit 三.在这个地方就可以进行选择jre了.

  6. 拥有iframe页面的子父类窗口调用JS的方法,并且注意的事项

    一.前言 我页面用的是EasyUI的弹出窗口里面嵌入一个iframe.第一:父窗口打开子窗口是一个新增用户信息的iframe子页面,点击保存后,子窗口iframe则去调用父窗口的function cl ...

  7. Shell glob

    在Linux中,glob是用来匹配路径名的通配符,glob主要包含以下4种: Wildcard Matching * 匹配0个或者多个字符,比如d*,可以匹配d, d1, dd1 ?匹配单个字符,比如 ...

  8. 【Nutch2.2.1基础教程之2.1】集成Nutch/Hbase/Solr构建搜索引擎之一:安装及运行【单机环境】

    1.下载相关软件,并解压 版本号如下: (1)apache-nutch-2.2.1 (2) hbase-0.90.4 (3)solr-4.9.0 并解压至/usr/search 2.Nutch的配置 ...

  9. PHP ReflectionClass

    <?php /** * @desc test reflectionclass * @author songweiqing * @create_time 2015-01-7 * */ class ...

  10. STL之二分查找 (Binary search in STL)

    STL之二分查找 (Binary search in STL) Section I正确区分不同的查找算法count,find,binary_search,lower_bound,upper_bound ...