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. [Hapi.js] Managing State with Cookies

    hapi has built-in support for parsing cookies from a request headers, and writing cookies to a respo ...

  2. Timer.4 - Using a member function as a handler

    In this tutorial we will see how to use a class member function as a callback handler. The program s ...

  3. QtXlsxWriter

    Code Issues26 Pull requests2   Pulse Graphs HTTPS clone URL You can clone with HTTPS orSubversion. C ...

  4. Oracle监听静态注册和动态注册

    静态注册和动态注册总结 一.什么是注册? 注册就是将数据库作为一个服务注册到监听程序.客户端不需要知道数据库名和实例名,只需要知道该数据库对外提供的服务名就可以申请连接到数据库.这个服务名可能与实例名 ...

  5. python -序列化

    python中用于序列化的两个模块 json 用于[字符串]和[python基本数据类型]之间进行转换 pickle 用于[python特有的类型] 和 [python基本数据类型]间进行转换 Jso ...

  6. ToString()和Convert.ToString()的区别

    ToString()和Convert.ToString()的区别 一般情况下,这两种方法都可以通用,但是当返回的数据类型中有可能出现null值时如果调用ToString方法了,就会返回NullRefe ...

  7. 使用bootstrapvalidator的remote验证经验

    这里需要说一下,bootstrapvalidator的帮助文档写的比较简单,对于remote验证器的说明更是如此,在经历多方测试之后才明白如何使用这个验证器. 一个典型的ajax验证代码如下: 服务端 ...

  8. alarm函数可以定时

    貌似是可以的,不过感觉好像这样用不是很好,最好还是用回timer_settimer一些列函数吧,不过既然开了头,就看下alarm怎么用吧. 1. 所需头文件  #include<unistd.h ...

  9. swift——设置navigationitemtitle的内容以及格颜色

    1.用UILabel,自定义整个titleview // var TitleText = UILabel() self.TitleText.frame = CGRectMake(0, 0, 100, ...

  10. nginx启动报错(1113: No mapping for the Unicode character exists in the target multi-byte code page)

    使用windows版本的nginx启动时遇到(1113: No mapping for the Unicode character exists in the target multi-byte co ...