当前开发android的工具_android开发者选项里面各种开发工具使用 - CSDN
  • ADT是Google在Eclipse基础上封装了Android开发工具的环境,最新版本是2014年7月2日发布的adt-bundle-windows-x86_64-20140702,之后Google推出自己的开发环境Android Studio,就不再更新ADT了。不过基于Eclipse的...

    Eclipse/ADT

    ADT是Google在Eclipse基础上封装了Android开发工具的环境,最新版本是2014年7月2日发布的adt-bundle-windows-x86_64-20140702,之后Google推出自己的开发环境Android Studio,就不再更新ADT了。不过基于Eclipse的广泛使用,当前还是有不少app使用ADT进行开发。


    在Eclipse上安装插件的步骤如下:依次选择菜单“Help”——“Install New Software...”——“Add”——输入插件名称和更新地址然后点击OK——回到Install页面勾选要安装的插件然后点击Next完成安装。下面是几个常用的Eclipse插件:


    版本控制插件

    SVN插件可让开发者在eclipse内部直接进行代码的版本控制操作,如检出项目、提交文件、更新文件、查看日志等等。
    SVN插件的名称: Subclipse
    更新地址: http://subclipse.tigris.org/update_1.12.x
    下图是操作svn功能菜单的截图:



    反编译插件

    反编译插件使得我们能够在eclipse中直接查看sdk的源码,以及其他第三方sdk的源码,方便迅速了解各功能的实现原理。
    反编译插件的名称: Eclipse Class Decompiler
    更新地址: http://opensource.cpupk.com/decompiler/update


    代码着色插件

    该插件帮助开发者快速构建不用风格的编辑配色方案,使eclipse告别枯燥的白色背景,变得更加个性化。
    代码着色插件的名称: Color Themes
    更新地址: http://eclipse-color-theme.github.com/update


    数据库管理插件

    该插件支持在eclipse中直接查看sqlite数据库里的表记录,方便开发者管理数据库记录。
    反编译插件的名称: SQLiteManger
    安装包下载地址: http://download.csdn.net/detail/aqi00/9616510 ,下载之后放到eclipse安装路径下的plugins目录。
    下面是该插件的使用截图,注意只能查看扩展名为db的数据库文件。




    文件浏览器插件

    使用过Xcode开发的人都知道,其有一个很实用的功能show in finder,即可快速定位到文件。这款插件就是让开发者能够打开选中文件所在的目录,只要在代码文件上右击,选择右键菜单中的“Explore in File System”,即可在文件管理窗口中查看该文件。
    文件浏览器插件的名称: ExploreFS
    更新地址: http://www.junginger.biz/eclipse/
    下面是该插件的右键菜单截图:



    Android Studio

    Android Studio是Google自己搞的Android开发工具,当前稳定版本已经到了2.1.1,随着Android Studio的不断完善,后续会有越来越多的app迁移到该平台上。


    常见问题

    下面是我在使用Android Studio过程中遇到的几个问题:
    1、第一次打开Studio报错“Unable to access Android SDK add-on list”
    这个界面不用管,点击Cancel。进入到Studio主页面后,在“File”——“Project Structure”——“SDK Location”中分别设置sdk、jdk、ndk的路径。设置完毕,以后再打开就不会再报错了。
    2、在Studio上创建一个新项目报错“Failed to resolve: com.android.support:appcompat-v7:23”
    原因是“Android Support Library”这个库的版本低于23,需要打开“SDK Manager.exe”把该库升级到最新。升级完毕,重启Studio后自动重编译,就不会报这个错了。另外注意build.gradle文件中的dependencies段的compile值与“Android Support Library”的库版本保持一致,不然也会报错。
    3、Studio上时常报错“Cannot resolve symbol ‘R’”
    Studio会间歇性抽风,原因不明,可选择“Build”——“Clean Project”后重编。
    4、运行工程时报错“compileSdkVersion 'android-24' requires JDK 1.8 or later to compile.”
    Studio默认指定最高版本的sdk(当前是24)进行编译,如果开发者机器上的jdk不是1.8版本,就会报错。解决办法有两种,一种是把jdk升级到1.8,另一种是修改build.gradle文件把compileSdkVersion的值降下来(如降到版本19)。


    使用SVN

    Android Studio自带了SVN插件,即Subversion,但还需要开发者进行相关配置后,才能正常使用svn功能。具体配置步骤如下:
    1、安装TortoiseSVN
    安装TortoiseSVN时要选择“command line client tools”,这样在安装后的bin目录下才能找到命令行工具svn.exe。
    2、在Android Studio中配置TortoiseSVN的命令行工具
    “File”——“Settings”——“Version Control”——“Subversion”——“user command line client”右侧的浏览按钮选择本地安装的svn.exe
    3、在Android Studio中使用svn检出项目
    “VCS”——“Checkout from Version Control”——“Subversion”
    4、更新/提交svn
    右击项目,在右键菜单中选择“Subversion”——“Update File...”(从svn更新文件)或者“Commit File...”(向svn提交文件)


    安装插件

    在Android Studio中安装插件的步骤与eclipse类似,具体步骤为:依次选择菜单“File”——“Settings”——“Plugins”——“Browser repositories...”,然后弹出一个当前可用插件列表的窗口,在该窗口的Category框中选择“Code tools”——选中指定插件——点击右边窗口的“Install”按钮,安装后重启Studio即可正常使用该插件的功能。下面是几个常用的Studio插件:


    Android Parcelable code generator

    该插件可自动生成Parcelable接口的代码。开发者先写好一个类及内部变量的定义,然后在代码中按下Alt+Insert,弹出的菜单列表下方就有“Parcelable”项,截图如下:

    选中该项,即在类中插入实现了Parcelable接口的代码。


    Android Code Generator

    该插件可根据布局文件快速生成对应的Activity、Fragment、Adapter、Menu等代码。在布局文件上右击,或者在布局文件内部右击,弹出的右键菜单多了一个“Generate Android Code”选项,具体的菜单截图如下:

    选中生成项后,便会弹出代码窗口,把已生成的代码复制出来即可。不过注意该插件对汉字的支持不好,如果xml文件中有汉字,则代码会生成失败。


    GsonFormat

    该插件能够快速将json字符串转换成代码段,包含变量定义,以及set和get函数。在代码中按Alt+S,弹出如下的json格式化窗口,往窗口中粘贴json字符串,点击OK按钮,即可在代码中插入生成好的代码段。GsonFormat的弹窗截图如下所示:



    Android Postfix Completion

    该插件支持在代码中快速生成Toast、Log等代码行,开发者在代码中输入字符串,后面跟上“.toast”并回车,即可生成Toast.makeText代码行;输入字符串后,紧接着输入“.log”并回车,即可生成Log.d代码行。下面是具体的操作截图:



    Android Drawable Importer

    该插件可对一张图片自动生成不同分辨率的图片,从而让图片对不同屏幕的适配工作变得更加容易。右击任意目录,在右键菜单中选择“New”,右方弹出的菜单列表末尾会出现“*** Drawable Importer”之类的菜单项,截图如下所示:

    我们通常选中“Batch Drawable Import”,在弹出的窗口中选择图片文件路径,并勾选需要自动生成的分辨率,然后点击OK按钮,即可在drawabe各分辨率的目录下生成对应的图片。





    点此查看Android开发笔记的完整目录
    展开全文
  • )English README关于AndroidTools这个项目包含了我们Android开发中常用的工具类。集成这个项目后,我们自己就不用写各种Utils类了,这将会简化你的代码,节省开发者的宝贵时间,让我们把注意力转到最重要的

    # AndroidTools

    持续更新请star项目 github地址:AndroidTools (喜欢这个工具的,可以star一下,以后方便找到,Happy coding!)

    English README

    关于AndroidTools

    这个项目包含了我们Android开发中常用的工具类。集成这个项目后,我们自己就不用写各种Utils类了,这将会简化你的代码,节省开发者的宝贵时间,让我们把注意力转到最重要的业务上来,使我们的开发变得更容易。Happy coding!

    如何使用AndroidTools

    1.在根目录的build.gradle文件中repositories的末尾添加如下:

    allprojects {
          repositories {
              ...
              maven { url 'https://jitpack.io' }
          }
      }
    

    2.在你的app/build.gradle文件中添加依赖:

    dependencies {
            compile 'com.github.mazouri:AndroidTools:1.0'
      }
    

    3.在你的application类中初始化AndroidTools:

    public class YourApplication extends Application {
    
      @Override
      public void onCreate() {
          super.onCreate();
    
            //必须调用init方法
          Tools.init(this); 
    
          //可选 如果你想看到AndroidTools内部打印的log, 要加上这一行
          Tools.openToolsLog(true); 
      }
    }
    

    4.然后你可以像下面这样使用【Tools.工具类型.具体方法】:

    // 日志工具,此方法为指定tag打印log
    Tools.log().tag(App.class.getSimpleName()).d("print log with tag()"); 
    
    // 字符串工具,此方法为 判断字符串是否为空
    Tools.string().isEmpty(App.class.getSimpleName()); 
    
    // 网络工具类,此方法为 判断是否连接wifi
    Tools.network().isWifiConnected(this);  
    

    Screenshots

    device_info.gif

    归类总结,方便大家查阅

    你也可以通过docs进行查阅.

    Tools

    Tools.app() 获取Application, 即Context

    All tools list: AppTool, ApkTool, InputMethodTool, IntentTool, ProcessTool, SnackbarTool, ToastTool, ConstantsTool, ConvertTool, DeviceTool, NetworkTool, BitmapTool, CloseTool, ExternalStorageTool, FileTool, SPTool, LogTool, RegexTool, SecureTool, ShellTool, StringTool, TimeTool, UnitTool.

    AppTool

    //usage examples:
    Tools.appTool().getAllRunningService(Tools.app()); //获取所有运行的服务
        Tools.appTool().startService(Tools.app(), MockService.class); //启动服务
    
    getAllRunningService 获取所有运行的服务
    startService 启动服务
    stopService 停止服务
    bindService 绑定服务
    unbindService 解绑服务
    getAppVersionCode 获取应用版本号
    getLauncherActivity 获取launcher activity
    getPackageName 获取应用包名
    getTopActivityName 获取顶层activity名称
    getVersionNameFromPackage 获取应用版本名称
    isActivityExists 判断是否存在Activity
    isAppForeground 判断App是否处于前台
    isProessRunning 进程是否运行
    isProessRunning 进程是否运行
    isRunningForeground 判断应用是否在前台运行
    isServiceRunning 服务是否运行
    launchActivity 打开Activity

    ApkTool

    //usage examples:
    Tools.apk().getAppDetailsSettings(Tools.app()); // 获取App具体设置
    
    getAppDetailsSettings 获取App具体设置
    getAppIcon 获取App图标
    getAppName 获取App名称
    getAppPath 获取App路径
    getAppSignature 获取App签名
    getAppSignatureSHA1 获取应用签名的的SHA1值
    getChannelFromApk 从apk中获取版本信息
    installApp 安装App
    installAppSilent 静默安装App
    uninstallAppSilent 静默卸载App
    isAppDebug 判断App是否是Debug版本
    isAppInstall 检查手机上是否安装了指定的软件
    isAppRoot 判断App是否有root权限
    isSystemApp 判断App是否是系统应用
    launchApp 打开App
    uninstallApp 卸载App

    InputMethodTool

    //usage examples:
    Tools.inputMethod().isActiveSoftInput(Tools.app()); // 判断输入法是否处于激活状态
    
    hideInputSoftFromWindowMethod 隐藏键盘 :强制隐藏
    isActiveSoftInput 判断输入负是否处于激活状态
    showInputSoftFromWindowMethod 显示输入法

    ProcessTool

    //usage examples:
    Tools.process().getAllBackgroundProcesses(); // 获取后台服务进程
    
    getAllBackgroundProcesses 获取所有的后台服务进程
    getForegroundProcessName 获取前台线程包名
    killAllBackgroundProcesses 杀死所有的后台服务进程
    killBackgroundProcesses 杀死后台服务进程

    IntentTool

    //usage examples:
    Tools.intent().getInstallAppIntent("/sdcard/mock.apk"); // 获取安装App的意图
    
    getAppDetailsSettingsIntent 获取App具体设置的意图
    getCaptureIntent 获取拍照的意图
    getComponentIntent 获取其他应用组件的意图
    getInstallAppIntent 获取安装App的意图
    getLaunchAppIntent 获取打开App的意图
    getShareImageIntent 获取分享图片的意图
    getShareTextIntent 获取分享文本的意图
    getShutdownIntent 获取分享文本的意图
    getUninstallAppIntent 获取分享文本的意图

    SnackbarTool

    //usage examples:
    Tools.snackbar().dismissSnackbar()(); // 取消snackbar显示
    
    addView 为snackbar添加布局 在show…Snackbar之后调用
    dismissSnackbar 取消snackbar显示
    showIndefiniteSnackbar 显示自定义时长snackbar
    showLongSnackbar 显示长时snackbar
    showShortSnackbar 显示短时snackbar

    ProcessTool

    //usage examples:
    Tools.process().getAllBackgroundProcesses(); // 获取后台服务进程
    
    getAllBackgroundProcesses 获取后台服务进程

    ToastTool

    //usage examples:
    Tools.toast().showToast(Toast.app, "show toast"); // 获取后台服务进程
    
    showToast 显示Short型Toast
    showToastLong 显示Long型Toast

    ConvertTool

    //usage examples:
    Tools.convert().dp2px(50f); // dp转px
    
    bitmap2Bytes bitmap转byteArr
    bitmap2Drawable bitmap转drawable
    bits2Bytes bits转bytes
    byte2FitMemorySize 字节数转合适内存大小 保留3位小数
    byte2MemorySize 字节数转以unit为单位的内存大小
    bytes2Bitmap byteArr转bitmap
    bytes2Bits bytes转bits
    bytes2Chars byteArr转charArr
    bytes2Drawable byteArr转drawable
    bytes2HexString byteArr转hexString
    bytes2InputStream byteArr转inputStream
    bytes2OutputStream outputStream转byteArr
    dp2px dp转px
    px2dp px转dp
    px2sp px转sp
    sp2px sp转px
    drawable2Bitmap drawable转bitmap
    drawable2Bytes drawable转byteArr
    hexString2Bytes hexString转byteArr
    input2OutputStream inputStream转outputStream
    inputStream2Bytes inputStream转byteArr
    inputStream2String inputStream转string按编码
    memorySize2Byte 以unit为单位的内存大小转字节数
    millis2FitTimeSpan 毫秒时间戳转合适时间长度
    millis2TimeSpan 毫秒时间戳转以unit为单位的时间长度
    output2InputStream outputStream转inputStream
    outputStream2Bytes outputStream转byteArr
    outputStream2String outputStream转string按编码
    string2InputStream string转inputStream按编码
    string2OutputStream string转outputStream按编码
    timeSpan2Millis 以unit为单位的时间长度转毫秒时间戳
    view2Bitmap view转Bitmap

    DeviceTool

    //usage examples:
    Tools.device().getAllSDCardSize(); // 获取SD大小
    
    coptyToClipBoard 复制到剪切板
    existSDCard 判断SDCard是否可用
    getAllSDCardSize 获取SD大小
    getAppPackageNamelist 获取非系统应用包名
    getAvailaleSDCardSize 获取可用空间大小
    getIMEI 获取IMEI
    getLatestCameraPicture 获取最后一次拍照的图片
    getLocalIPAddress 获取本机IP地址
    getMac 获取MAC地址
    getNavigationBarHeight 获取navigationbar高度
    getScreenPix 获取手机大小(分辨率)
    getStatusBarHeight 获取statusbar高度
    getTopBarHeight 获取状态栏高度+标题栏(ActionBar)高度
    getUDID 获取UDID
    goHome 主动回到Home,后台运行
    isOnline 是否有网络
    isSoftKeyAvail 判断是否有软控制键
    isSoftKeyAvail 判断是否有软控制键
    vibrate 震动

    NetworkTool

    //usage examples:
    Tools.network().getDataEnabled()(); // 判断移动数据是否打开
    
    getDataEnabled 判断移动数据是否打开
    getDomainAddress 获取域名ip地址
    getIPAddress 获取IP地址
    getNetType 判断手机连接的网络类型(wifi,2G,3G,4G)
    getNetworkOperatorName 获取网络运营商名称 如中国移动、中国联通、中国电信
    is4G() 判断网络是否是4G
    isNetworkConnected 判断是否连接网络
    isWifiConnected 判断是否连接wifi
    openWirelessSettings 打开网络设置界面 3.0以下打开设置界面
    setDataEnabled 打开或关闭移动数据

    BitmapTool

    //usage examples:
    Tools.bitmap().toRoundCorner(); // 转化成圆bitmap
    
    bitmapToByte Bitmap转bytes
    bitmapToDrawable Bitmap转Drawable
    bitmapToString bitmap转换成Base64编码String
    byteToBitmap bytes转Bitmap
    compressBimap 质量压缩图片-压缩在maxSize以内
    compressBitmap 等比压缩(宽高等比缩放)
    compressBitmap 压缩bitmp到目标大小(质量压缩)
    compressBitmap 质量压缩图片-压缩在1M以内
    compressBitmap 质量压缩图片
    compressBitmap 图片缩放-尺寸缩放
    compressBitmapBig 图片缩放-尺寸缩放
    compressBitmapSmall 图片缩放-尺寸缩放
    compressImage 质量压缩图片-压缩在1M以内
    compressImage 质量压缩图片
    compressImage 质量压缩图片-压缩在maxSize以内
    createBitmapThumbnail 生成bitmap缩略图
    drawableToBitmap drawable转Bitmap
    getDegress 根据path, 获取图片旋转角度
    rotateBitmap 旋转bitmap
    saveBitmap 保存Bitmap到文件
    scaleImage 缩放image
    scaleImageTo 缩放image到指定高、宽

    CloseTool

    //usage examples:
    Tools.close().closeIO(in); // 关闭IO
    
    closeIO 关闭IO
    closeIOQuietly 安静关闭IO

    ExternalStorageTool

    //usage examples:
    Tools.externalStorage().isAvailable(); // sdcard是否可用
    
    getAllStorageLocations 获取所有可用sdcard
    getSdCardPath 获取sdcard路径
    isAvailable sdcard是否可用
    isWritable sdcard是否可写

    FileTool

    //usage examples:
    Tools.file().getFileByPath("/sdcard/mock.txt"); // 根据文件路径获取文件
    
    copyDir 复制目录
    copyFile 复制文件
    createFileByDeleteOldFile 判断文件是否存在,存在则在创建之前删除
    createOrExistsDir 判断目录是否存在,不存在则判断是否创建成功
    createOrExistsFile 判断文件是否存在,不存在则判断是否创建成功
    deleteDir 删除目录
    deleteFile 删除文件
    deleteFilesInDir 删除目录下的所有文件
    getDirLength 获取目录长度
    getDirName 获取全路径中的最长目录
    getFileByPath 根据文件路径获取文件
    getFileCharsetSimple 简单获取文件编码格式
    getFileExtension 获取全路径中的文件拓展名
    getFileLastModified 获取文件最后修改的毫秒时间戳
    getFileLength 获取文件长度
    getFileLines 获取文件行数
    getFileMD5 获取文件的MD5校验码
    getFileMD5ToString 获取文件的MD5校验码
    getFileName 获取全路径中的文件名
    getFileNameNoExtension 获取全路径中的不带拓展名的文件名
    getFileSize 获取文件大小
    isDir 判断是否是目录
    isFile 判断是否是文件
    isFileExists 判断文件是否存在
    listFilesInDir 获取目录下所有文件包括子目录
    listFilesInDirWithFilter 获取目录下所有符合filter的文件包括子目录
    moveDir 移动目录
    moveFile 移动文件
    readFile2Bytes 读取文件到字符数组中
    readFile2List 指定编码按行读取文件到链表中
    readFile2String 指定编码按行读取文件到字符串中
    rename 重命名文件
    searchFileInDir 获取目录下指定文件名的文件包括子目录 大小写忽略
    writeFileFromIS 将输入流写入文件
    writeFileFromString 将字符串写入文件

    SPTool

    //usage examples:
    Tools.sp().saveShareBoolean("mock_key", true); // 存储moke_key的值到shared_preference的文件
    
    name 设置SharedPreference的xml文件名,默认为AndroidTools.xml
    saveShareBoolean 存储布尔值
    saveShareInt 存储整型值
    saveShareString 存储字符串

    LogTool

    //three kinds of LogTool usage:
    Tools.log().d("print log with default generated tag"); //默认tag ==> 打印结果为【类名.方法名[第几行]】:App.onCreate(line:20)
    Tools.log().tag(App.class.getSimpleName()).d("print log with tag()");//指定tag
    Tools.log().d(App.class.getSimpleName(), "print log with set tag");//指定tag
    
    setDebug 设置是否打印log
    tag 设置tag

    RegexTool

    //usage examples:
    Tools.regex().isEmail("wangdd_bj@163.com"); // 获取后台服务进程
    
    isUserName 是否为用户名
    isPassword 是否为密码
    isMobile 是否为手机号
    isEmail 是否为邮箱
    isChinese 是否为中文
    isIDCard 是否为身份证号(中国)
    isUrl 是否为URL
    isIPAddress 是否为IP地址
    isPlateNum 是否为车牌号(中国)
    isVehicleVin 是否为车辆vin码

    ShellTool

    //usage examples:
    Tools.shell().execCmd("ls /sdcard/", ""); // 获取后台服务进程
    
    execCmd 是否是在root下执行命令

    StringTool

    //usage examples:
    Tools.string().isEmpty(); // 是否为null或者长度为0或者都是空格
    
    isEmpty 是否为null或者长度为0或者都是空格
    isBlank 是否为null或者长度为0或者都是空格
    length 字符串长度,如果为null,返回0
    nullStrToEmpty 将空对象转化为空字符串
    capitalizeFirstLetter 首字母大写
    utf8Encode 编码为utf-8
    fullWidthToHalfWidth 全角转半角
    halfWidthToFullWidth 半角转全角
    sqliteEscape 数据库字符转义

    TimeTool

    //usage examples:
    Tools.time().millis2String(System.currentTimeMillis()); // 将时间戳转为时间字符串
    
    date2Millis 将Date类型转为时间戳
    date2String 将Date类型转为时间字符串
    getChineseZodiac 获取生肖
    getFitTimeSpan 获取合适型两个时间差
    getFitTimeSpanByNow 获取合适型与当前时间的差
    getFriendlyTimeSpanByNow 获取友好型与当前时间的差
    getNowTimeDate 获取当前Date
    getNowTimeMills 获取当前毫秒时间戳
    getNowTimeString 获取当前时间字符串
    getTimeSpan 获取两个时间差
    getTimeSpanByNow 获取与当前时间的差
    getWeek 获取星期
    getWeekIndex 获取星期 注意:周日的Index才是1,周六为7
    getWeekOfMonth 获取月份中的第几周 注意:国外周日才是新的一周的开始
    getWeekOfYear 获取年份中的第几周 注意:国外周日才是新的一周的开始
    getZodiac 获取星座
    isLeapYear 判断是否闰年
    isSameDay 判断是否同一天
    millis2Date 将时间戳转为Date类型
    millis2String 将时间戳转为时间字符串
    string2Date 将时间字符串转为Date类型
    string2Millis 将时间字符串转为时间戳

    UnitTool

    //usage examples:
    Tools.unit().c2f(27f); // 摄氏度转华氏度
    
    c2f 摄氏度转华氏度
    f2c 华氏度转摄氏度
    km2mi km转mile
    mi2km mile转km
    l2gal 升转加仑
    l100km2mpg 百公里油耗转mpg
    mpg2l100km mpg转百公里油耗

    SecureTool

    encryptMD2ToString MD2加密
    encryptMD5ToString MD5加密
    encryptMD5File2String MD5加密文件
    encryptSHA1ToString SHA1加密
    encryptSHA224ToString SHA224加密
    encryptSHA256ToString SHA256加密
    encryptSHA384ToString SHA384加密
    encryptSHA512ToString SHA512加密
    hashTemplate hash加密模板
    encryptHmacMD5ToString HmacMD5加密
    encryptHmacSHA1ToString HmacSHA1加密
    encryptDES2Base64 DES加密后转为Base64编码
    encryptDES2HexString DES加密后转为16进制
    encryptDES DES加密
    decryptBase64DES DES解密Base64编码密文
    decryptHexStringDES DES解密16进制密文
    decryptDES DES解密
    encrypt3DES2Base64 3DES加密后转为Base64编码
    encrypt3DES2HexString 3DES加密后转为16进制
    encrypt3DES 3DES加密
    decrypt3DES 3DES解密
    encryptAES2Base64 AES加密后转为Base64编码
    encryptAES AES加密
    decryptAES AES解密
    展开全文
  • http://blog.csdn.net/lmj623565791/article/details/38965311,本文出自【张鸿洋的博客】打开大家手上的项目,基本都会有一大批的辅助类,今天特此整理出10个基本每个项目中都会使用的工具类,用于快速开发~~在此...

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38965311,本文出自【张鸿洋的博客】

    打开大家手上的项目,基本都会有一大批的辅助类,今天特此整理出10个基本每个项目中都会使用的工具类,用于快速开发~~

    在此感谢群里给我发项目中工具类的兄弟/姐妹~

    1、日志工具类L.java

    package com.zhy.utils;
    
    import android.util.Log;
    
    /**
     * Log统一管理类
     * 
     * 
     * 
     */
    public class L
    {
    
    	private L()
    	{
    		/* cannot be instantiated */
    		throw new UnsupportedOperationException("cannot be instantiated");
    	}
    
    	public static boolean isDebug = true;// 是否需要打印bug,可以在application的onCreate函数里面初始化
    	private static final String TAG = "way";
    
    	// 下面四个是默认tag的函数
    	public static void i(String msg)
    	{
    		if (isDebug)
    			Log.i(TAG, msg);
    	}
    
    	public static void d(String msg)
    	{
    		if (isDebug)
    			Log.d(TAG, msg);
    	}
    
    	public static void e(String msg)
    	{
    		if (isDebug)
    			Log.e(TAG, msg);
    	}
    
    	public static void v(String msg)
    	{
    		if (isDebug)
    			Log.v(TAG, msg);
    	}
    
    	// 下面是传入自定义tag的函数
    	public static void i(String tag, String msg)
    	{
    		if (isDebug)
    			Log.i(tag, msg);
    	}
    
    	public static void d(String tag, String msg)
    	{
    		if (isDebug)
    			Log.i(tag, msg);
    	}
    
    	public static void e(String tag, String msg)
    	{
    		if (isDebug)
    			Log.i(tag, msg);
    	}
    
    	public static void v(String tag, String msg)
    	{
    		if (isDebug)
    			Log.i(tag, msg);
    	}
    }


    网上看到的类,注释上应该原创作者的名字,很简单的一个类;网上也有很多提供把日志记录到SDCard上的,不过我是从来没记录过,所以引入个最简单的,大家可以进行评价是否需要扩充~~

    2、Toast统一管理类 

    package com.zhy.utils;
    
    import android.content.Context;
    import android.widget.Toast;
    
    /**
     * Toast统一管理类
     * 
     */
    public class T
    {
    
    	private T()
    	{
    		/* cannot be instantiated */
    		throw new UnsupportedOperationException("cannot be instantiated");
    	}
    
    	public static boolean isShow = true;
    
    	/**
    	 * 短时间显示Toast
    	 * 
    	 * @param context
    	 * @param message
    	 */
    	public static void showShort(Context context, CharSequence message)
    	{
    		if (isShow)
    			Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
    	}
    
    	/**
    	 * 短时间显示Toast
    	 * 
    	 * @param context
    	 * @param message
    	 */
    	public static void showShort(Context context, int message)
    	{
    		if (isShow)
    			Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
    	}
    
    	/**
    	 * 长时间显示Toast
    	 * 
    	 * @param context
    	 * @param message
    	 */
    	public static void showLong(Context context, CharSequence message)
    	{
    		if (isShow)
    			Toast.makeText(context, message, Toast.LENGTH_LONG).show();
    	}
    
    	/**
    	 * 长时间显示Toast
    	 * 
    	 * @param context
    	 * @param message
    	 */
    	public static void showLong(Context context, int message)
    	{
    		if (isShow)
    			Toast.makeText(context, message, Toast.LENGTH_LONG).show();
    	}
    
    	/**
    	 * 自定义显示Toast时间
    	 * 
    	 * @param context
    	 * @param message
    	 * @param duration
    	 */
    	public static void show(Context context, CharSequence message, int duration)
    	{
    		if (isShow)
    			Toast.makeText(context, message, duration).show();
    	}
    
    	/**
    	 * 自定义显示Toast时间
    	 * 
    	 * @param context
    	 * @param message
    	 * @param duration
    	 */
    	public static void show(Context context, int message, int duration)
    	{
    		if (isShow)
    			Toast.makeText(context, message, duration).show();
    	}
    
    }


    也是非常简单的一个封装,能省则省了~~

    3、SharedPreferences封装类SPUtils

    package com.zhy.utils;
    
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    import java.util.Map;
    
    import android.content.Context;
    import android.content.SharedPreferences;
    
    public class SPUtils
    {
    	/**
    	 * 保存在手机里面的文件名
    	 */
    	public static final String FILE_NAME = "share_data";
    
    	/**
    	 * 保存数据的方法,我们需要拿到保存数据的具体类型,然后根据类型调用不同的保存方法
    	 * 
    	 * @param context
    	 * @param key
    	 * @param object
    	 */
    	public static void put(Context context, String key, Object object)
    	{
    
    		SharedPreferences sp = context.getSharedPreferences(FILE_NAME,
    				Context.MODE_PRIVATE);
    		SharedPreferences.Editor editor = sp.edit();
    
    		if (object instanceof String)
    		{
    			editor.putString(key, (String) object);
    		} else if (object instanceof Integer)
    		{
    			editor.putInt(key, (Integer) object);
    		} else if (object instanceof Boolean)
    		{
    			editor.putBoolean(key, (Boolean) object);
    		} else if (object instanceof Float)
    		{
    			editor.putFloat(key, (Float) object);
    		} else if (object instanceof Long)
    		{
    			editor.putLong(key, (Long) object);
    		} else
    		{
    			editor.putString(key, object.toString());
    		}
    
    		SharedPreferencesCompat.apply(editor);
    	}
    
    	/**
    	 * 得到保存数据的方法,我们根据默认值得到保存的数据的具体类型,然后调用相对于的方法获取值
    	 * 
    	 * @param context
    	 * @param key
    	 * @param defaultObject
    	 * @return
    	 */
    	public static Object get(Context context, String key, Object defaultObject)
    	{
    		SharedPreferences sp = context.getSharedPreferences(FILE_NAME,
    				Context.MODE_PRIVATE);
    
    		if (defaultObject instanceof String)
    		{
    			return sp.getString(key, (String) defaultObject);
    		} else if (defaultObject instanceof Integer)
    		{
    			return sp.getInt(key, (Integer) defaultObject);
    		} else if (defaultObject instanceof Boolean)
    		{
    			return sp.getBoolean(key, (Boolean) defaultObject);
    		} else if (defaultObject instanceof Float)
    		{
    			return sp.getFloat(key, (Float) defaultObject);
    		} else if (defaultObject instanceof Long)
    		{
    			return sp.getLong(key, (Long) defaultObject);
    		}
    
    		return null;
    	}
    
    	/**
    	 * 移除某个key值已经对应的值
    	 * @param context
    	 * @param key
    	 */
    	public static void remove(Context context, String key)
    	{
    		SharedPreferences sp = context.getSharedPreferences(FILE_NAME,
    				Context.MODE_PRIVATE);
    		SharedPreferences.Editor editor = sp.edit();
    		editor.remove(key);
    		SharedPreferencesCompat.apply(editor);
    	}
    
    	/**
    	 * 清除所有数据
    	 * @param context
    	 */
    	public static void clear(Context context)
    	{
    		SharedPreferences sp = context.getSharedPreferences(FILE_NAME,
    				Context.MODE_PRIVATE);
    		SharedPreferences.Editor editor = sp.edit();
    		editor.clear();
    		SharedPreferencesCompat.apply(editor);
    	}
    
    	/**
    	 * 查询某个key是否已经存在
    	 * @param context
    	 * @param key
    	 * @return
    	 */
    	public static boolean contains(Context context, String key)
    	{
    		SharedPreferences sp = context.getSharedPreferences(FILE_NAME,
    				Context.MODE_PRIVATE);
    		return sp.contains(key);
    	}
    
    	/**
    	 * 返回所有的键值对
    	 * 
    	 * @param context
    	 * @return
    	 */
    	public static Map<String, ?> getAll(Context context)
    	{
    		SharedPreferences sp = context.getSharedPreferences(FILE_NAME,
    				Context.MODE_PRIVATE);
    		return sp.getAll();
    	}
    
    	/**
    	 * 创建一个解决SharedPreferencesCompat.apply方法的一个兼容类
    	 * 
    	 * @author zhy
    	 * 
    	 */
    	private static class SharedPreferencesCompat
    	{
    		private static final Method sApplyMethod = findApplyMethod();
    
    		/**
    		 * 反射查找apply的方法
    		 * 
    		 * @return
    		 */
    		@SuppressWarnings({ "unchecked", "rawtypes" })
    		private static Method findApplyMethod()
    		{
    			try
    			{
    				Class clz = SharedPreferences.Editor.class;
    				return clz.getMethod("apply");
    			} catch (NoSuchMethodException e)
    			{
    			}
    
    			return null;
    		}
    
    		/**
    		 * 如果找到则使用apply执行,否则使用commit
    		 * 
    		 * @param editor
    		 */
    		public static void apply(SharedPreferences.Editor editor)
    		{
    			try
    			{
    				if (sApplyMethod != null)
    				{
    					sApplyMethod.invoke(editor);
    					return;
    				}
    			} catch (IllegalArgumentException e)
    			{
    			} catch (IllegalAccessException e)
    			{
    			} catch (InvocationTargetException e)
    			{
    			}
    			editor.commit();
    		}
    	}
    
    }
    

    对SharedPreference的使用做了建议的封装,对外公布出put,get,remove,clear等等方法;

    注意一点,里面所有的commit操作使用了SharedPreferencesCompat.apply进行了替代,目的是尽可能的使用apply代替commit

    首先说下为什么,因为commit方法是同步的,并且我们很多时候的commit操作都是UI线程中,毕竟是IO操作,尽可能异步;

    所以我们使用apply进行替代,apply异步的进行写入;

    但是apply相当于commit来说是new API呢,为了更好的兼容,我们做了适配;

    SharedPreferencesCompat也可以给大家创建兼容类提供了一定的参考~~


    4、单位转换类 DensityUtils

    package com.zhy.utils;
    
    import android.content.Context;
    import android.util.TypedValue;
    
    /**
     * 常用单位转换的辅助类
     * 
     * 
     * 
     */
    public class DensityUtils
    {
    	private DensityUtils()
    	{
    		/* cannot be instantiated */
    		throw new UnsupportedOperationException("cannot be instantiated");
    	}
    
    	/**
    	 * dp转px
    	 * 
    	 * @param context
    	 * @param val
    	 * @return
    	 */
    	public static int dp2px(Context context, float dpVal)
    	{
    		return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
    				dpVal, context.getResources().getDisplayMetrics());
    	}
    
    	/**
    	 * sp转px
    	 * 
    	 * @param context
    	 * @param val
    	 * @return
    	 */
    	public static int sp2px(Context context, float spVal)
    	{
    		return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP,
    				spVal, context.getResources().getDisplayMetrics());
    	}
    
    	/**
    	 * px转dp
    	 * 
    	 * @param context
    	 * @param pxVal
    	 * @return
    	 */
    	public static float px2dp(Context context, float pxVal)
    	{
    		final float scale = context.getResources().getDisplayMetrics().density;
    		return (pxVal / scale);
    	}
    
    	/**
    	 * px转sp
    	 * 
    	 * @param fontScale
    	 * @param pxVal
    	 * @return
    	 */
    	public static float px2sp(Context context, float pxVal)
    	{
    		return (pxVal / context.getResources().getDisplayMetrics().scaledDensity);
    	}
    
    }
    

    5、SD卡相关辅助类 SDCardUtils

    package com.zhy.utils;
    
    import java.io.File;
    
    import android.os.Environment;
    import android.os.StatFs;
    
    /**
     * SD卡相关的辅助类
     * 
     * 
     * 
     */
    public class SDCardUtils
    {
    	private SDCardUtils()
    	{
    		/* cannot be instantiated */
    		throw new UnsupportedOperationException("cannot be instantiated");
    	}
    
    	/**
    	 * 判断SDCard是否可用
    	 * 
    	 * @return
    	 */
    	public static boolean isSDCardEnable()
    	{
    		return Environment.getExternalStorageState().equals(
    				Environment.MEDIA_MOUNTED);
    
    	}
    
    	/**
    	 * 获取SD卡路径
    	 * 
    	 * @return
    	 */
    	public static String getSDCardPath()
    	{
    		return Environment.getExternalStorageDirectory().getAbsolutePath()
    				+ File.separator;
    	}
    
    	/**
    	 * 获取SD卡的剩余容量 单位byte
    	 * 
    	 * @return
    	 */
    	public static long getSDCardAllSize()
    	{
    		if (isSDCardEnable())
    		{
    			StatFs stat = new StatFs(getSDCardPath());
    			// 获取空闲的数据块的数量
    			long availableBlocks = (long) stat.getAvailableBlocks() - 4;
    			// 获取单个数据块的大小(byte)
    			long freeBlocks = stat.getAvailableBlocks();
    			return freeBlocks * availableBlocks;
    		}
    		return 0;
    	}
    
    	/**
    	 * 获取指定路径所在空间的剩余可用容量字节数,单位byte
    	 * 
    	 * @param filePath
    	 * @return 容量字节 SDCard可用空间,内部存储可用空间
    	 */
    	public static long getFreeBytes(String filePath)
    	{
    		// 如果是sd卡的下的路径,则获取sd卡可用容量
    		if (filePath.startsWith(getSDCardPath()))
    		{
    			filePath = getSDCardPath();
    		} else
    		{// 如果是内部存储的路径,则获取内存存储的可用容量
    			filePath = Environment.getDataDirectory().getAbsolutePath();
    		}
    		StatFs stat = new StatFs(filePath);
    		long availableBlocks = (long) stat.getAvailableBlocks() - 4;
    		return stat.getBlockSize() * availableBlocks;
    	}
    
    	/**
    	 * 获取系统存储路径
    	 * 
    	 * @return
    	 */
    	public static String getRootDirectoryPath()
    	{
    		return Environment.getRootDirectory().getAbsolutePath();
    	}
    
    
    }
    

    6、屏幕相关辅助类 ScreenUtils

    package com.zhy.utils;
    
    import android.app.Activity;
    import android.content.Context;
    import android.graphics.Bitmap;
    import android.graphics.Rect;
    import android.util.DisplayMetrics;
    import android.view.View;
    import android.view.WindowManager;
    
    /**
     * 获得屏幕相关的辅助类
     * 
     * 
     * 
     */
    public class ScreenUtils
    {
    	private ScreenUtils()
    	{
    		/* cannot be instantiated */
    		throw new UnsupportedOperationException("cannot be instantiated");
    	}
    
    	/**
    	 * 获得屏幕高度
    	 * 
    	 * @param context
    	 * @return
    	 */
    	public static int getScreenWidth(Context context)
    	{
    		WindowManager wm = (WindowManager) context
    				.getSystemService(Context.WINDOW_SERVICE);
    		DisplayMetrics outMetrics = new DisplayMetrics();
    		wm.getDefaultDisplay().getMetrics(outMetrics);
    		return outMetrics.widthPixels;
    	}
    
    	/**
    	 * 获得屏幕宽度
    	 * 
    	 * @param context
    	 * @return
    	 */
    	public static int getScreenHeight(Context context)
    	{
    		WindowManager wm = (WindowManager) context
    				.getSystemService(Context.WINDOW_SERVICE);
    		DisplayMetrics outMetrics = new DisplayMetrics();
    		wm.getDefaultDisplay().getMetrics(outMetrics);
    		return outMetrics.heightPixels;
    	}
    
    	/**
    	 * 获得状态栏的高度
    	 * 
    	 * @param context
    	 * @return
    	 */
    	public static int getStatusHeight(Context context)
    	{
    
    		int statusHeight = -1;
    		try
    		{
    			Class<?> clazz = Class.forName("com.android.internal.R$dimen");
    			Object object = clazz.newInstance();
    			int height = Integer.parseInt(clazz.getField("status_bar_height")
    					.get(object).toString());
    			statusHeight = context.getResources().getDimensionPixelSize(height);
    		} catch (Exception e)
    		{
    			e.printStackTrace();
    		}
    		return statusHeight;
    	}
    
    	/**
    	 * 获取当前屏幕截图,包含状态栏
    	 * 
    	 * @param activity
    	 * @return
    	 */
    	public static Bitmap snapShotWithStatusBar(Activity activity)
    	{
    		View view = activity.getWindow().getDecorView();
    		view.setDrawingCacheEnabled(true);
    		view.buildDrawingCache();
    		Bitmap bmp = view.getDrawingCache();
    		int width = getScreenWidth(activity);
    		int height = getScreenHeight(activity);
    		Bitmap bp = null;
    		bp = Bitmap.createBitmap(bmp, 0, 0, width, height);
    		view.destroyDrawingCache();
    		return bp;
    
    	}
    
    	/**
    	 * 获取当前屏幕截图,不包含状态栏
    	 * 
    	 * @param activity
    	 * @return
    	 */
    	public static Bitmap snapShotWithoutStatusBar(Activity activity)
    	{
    		View view = activity.getWindow().getDecorView();
    		view.setDrawingCacheEnabled(true);
    		view.buildDrawingCache();
    		Bitmap bmp = view.getDrawingCache();
    		Rect frame = new Rect();
    		activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
    		int statusBarHeight = frame.top;
    
    		int width = getScreenWidth(activity);
    		int height = getScreenHeight(activity);
    		Bitmap bp = null;
    		bp = Bitmap.createBitmap(bmp, 0, statusBarHeight, width, height
    				- statusBarHeight);
    		view.destroyDrawingCache();
    		return bp;
    
    	}
    
    }
    

    7、App相关辅助类

    package com.zhy.utils;
    
    import android.content.Context;
    import android.content.pm.PackageInfo;
    import android.content.pm.PackageManager;
    import android.content.pm.PackageManager.NameNotFoundException;
    
    /**
     * 跟App相关的辅助类
     * 
     * 
     * 
     */
    public class AppUtils
    {
    
    	private AppUtils()
    	{
    		/* cannot be instantiated */
    		throw new UnsupportedOperationException("cannot be instantiated");
    
    	}
    
    	/**
    	 * 获取应用程序名称
    	 */
    	public static String getAppName(Context context)
    	{
    		try
    		{
    			PackageManager packageManager = context.getPackageManager();
    			PackageInfo packageInfo = packageManager.getPackageInfo(
    					context.getPackageName(), 0);
    			int labelRes = packageInfo.applicationInfo.labelRes;
    			return context.getResources().getString(labelRes);
    		} catch (NameNotFoundException e)
    		{
    			e.printStackTrace();
    		}
    		return null;
    	}
    
    	/**
    	 * [获取应用程序版本名称信息]
    	 * 
    	 * @param context
    	 * @return 当前应用的版本名称
    	 */
    	public static String getVersionName(Context context)
    	{
    		try
    		{
    			PackageManager packageManager = context.getPackageManager();
    			PackageInfo packageInfo = packageManager.getPackageInfo(
    					context.getPackageName(), 0);
    			return packageInfo.versionName;
    
    		} catch (NameNotFoundException e)
    		{
    			e.printStackTrace();
    		}
    		return null;
    	}
    
    }
    

    8、软键盘相关辅助类KeyBoardUtils

    package com.zhy.utils;
    
    import android.content.Context;
    import android.view.inputmethod.InputMethodManager;
    import android.widget.EditText;
    
    /**
     * 打开或关闭软键盘
     * 
     * @author zhy
     * 
     */
    public class KeyBoardUtils
    {
    	/**
    	 * 打卡软键盘
    	 * 
    	 * @param mEditText
    	 *            输入框
    	 * @param mContext
    	 *            上下文
    	 */
    	public static void openKeybord(EditText mEditText, Context mContext)
    	{
    		InputMethodManager imm = (InputMethodManager) mContext
    				.getSystemService(Context.INPUT_METHOD_SERVICE);
    		imm.showSoftInput(mEditText, InputMethodManager.RESULT_SHOWN);
    		imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,
    				InputMethodManager.HIDE_IMPLICIT_ONLY);
    	}
    
    	/**
    	 * 关闭软键盘
    	 * 
    	 * @param mEditText
    	 *            输入框
    	 * @param mContext
    	 *            上下文
    	 */
    	public static void closeKeybord(EditText mEditText, Context mContext)
    	{
    		InputMethodManager imm = (InputMethodManager) mContext
    				.getSystemService(Context.INPUT_METHOD_SERVICE);
    
    		imm.hideSoftInputFromWindow(mEditText.getWindowToken(), 0);
    	}
    }
    

    9、网络相关辅助类 NetUtils

    package com.zhy.utils;
    
    import android.app.Activity;
    import android.content.ComponentName;
    import android.content.Context;
    import android.content.Intent;
    import android.net.ConnectivityManager;
    import android.net.NetworkInfo;
    
    /**
     * 跟网络相关的工具类
     * 
     * 
     * 
     */
    public class NetUtils
    {
    	private NetUtils()
    	{
    		/* cannot be instantiated */
    		throw new UnsupportedOperationException("cannot be instantiated");
    	}
    
    	/**
    	 * 判断网络是否连接
    	 * 
    	 * @param context
    	 * @return
    	 */
    	public static boolean isConnected(Context context)
    	{
    
    		ConnectivityManager connectivity = (ConnectivityManager) context
    				.getSystemService(Context.CONNECTIVITY_SERVICE);
    
    		if (null != connectivity)
    		{
    
    			NetworkInfo info = connectivity.getActiveNetworkInfo();
    			if (null != info && info.isConnected())
    			{
    				if (info.getState() == NetworkInfo.State.CONNECTED)
    				{
    					return true;
    				}
    			}
    		}
    		return false;
    	}
    
    	/**
    	 * 判断是否是wifi连接
    	 */
    	public static boolean isWifi(Context context)
    	{
    		ConnectivityManager cm = (ConnectivityManager) context
    				.getSystemService(Context.CONNECTIVITY_SERVICE);
    
    		if (cm == null)
    			return false;
    		return cm.getActiveNetworkInfo().getType() == ConnectivityManager.TYPE_WIFI;
    
    	}
    
    	/**
    	 * 打开网络设置界面
    	 */
    	public static void openSetting(Activity activity)
    	{
    		Intent intent = new Intent("/");
    		ComponentName cm = new ComponentName("com.android.settings",
    				"com.android.settings.WirelessSettings");
    		intent.setComponent(cm);
    		intent.setAction("android.intent.action.VIEW");
    		activity.startActivityForResult(intent, 0);
    	}
    
    }
    


    10、Http相关辅助类 HttpUtils

    package com.zhy.utils;
    
    import java.io.BufferedReader;
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.net.HttpURLConnection;
    import java.net.URL;
    
    /**
     * Http请求的工具类
     * 
     * @author zhy
     * 
     */
    public class HttpUtils
    {
    
    	private static final int TIMEOUT_IN_MILLIONS = 5000;
    
    	public interface CallBack
    	{
    		void onRequestComplete(String result);
    	}
    
    
    	/**
    	 * 异步的Get请求
    	 * 
    	 * @param urlStr
    	 * @param callBack
    	 */
    	public static void doGetAsyn(final String urlStr, final CallBack callBack)
    	{
    		new Thread()
    		{
    			public void run()
    			{
    				try
    				{
    					String result = doGet(urlStr);
    					if (callBack != null)
    					{
    						callBack.onRequestComplete(result);
    					}
    				} catch (Exception e)
    				{
    					e.printStackTrace();
    				}
    
    			};
    		}.start();
    	}
    
    	/**
    	 * 异步的Post请求
    	 * @param urlStr
    	 * @param params
    	 * @param callBack
    	 * @throws Exception
    	 */
    	public static void doPostAsyn(final String urlStr, final String params,
    			final CallBack callBack) throws Exception
    	{
    		new Thread()
    		{
    			public void run()
    			{
    				try
    				{
    					String result = doPost(urlStr, params);
    					if (callBack != null)
    					{
    						callBack.onRequestComplete(result);
    					}
    				} catch (Exception e)
    				{
    					e.printStackTrace();
    				}
    
    			};
    		}.start();
    
    	}
    
    	/**
    	 * Get请求,获得返回数据
    	 * 
    	 * @param urlStr
    	 * @return
    	 * @throws Exception
    	 */
    	public static String doGet(String urlStr) 
    	{
    		URL url = null;
    		HttpURLConnection conn = null;
    		InputStream is = null;
    		ByteArrayOutputStream baos = null;
    		try
    		{
    			url = new URL(urlStr);
    			conn = (HttpURLConnection) url.openConnection();
    			conn.setReadTimeout(TIMEOUT_IN_MILLIONS);
    			conn.setConnectTimeout(TIMEOUT_IN_MILLIONS);
    			conn.setRequestMethod("GET");
    			conn.setRequestProperty("accept", "*/*");
    			conn.setRequestProperty("connection", "Keep-Alive");
    			if (conn.getResponseCode() == 200)
    			{
    				is = conn.getInputStream();
    				baos = new ByteArrayOutputStream();
    				int len = -1;
    				byte[] buf = new byte[128];
    
    				while ((len = is.read(buf)) != -1)
    				{
    					baos.write(buf, 0, len);
    				}
    				baos.flush();
    				return baos.toString();
    			} else
    			{
    				throw new RuntimeException(" responseCode is not 200 ... ");
    			}
    
    		} catch (Exception e)
    		{
    			e.printStackTrace();
    		} finally
    		{
    			try
    			{
    				if (is != null)
    					is.close();
    			} catch (IOException e)
    			{
    			}
    			try
    			{
    				if (baos != null)
    					baos.close();
    			} catch (IOException e)
    			{
    			}
    			conn.disconnect();
    		}
    		
    		return null ;
    
    	}
    
    	/**
    	 * 向指定 URL 发送POST方法的请求
    	 * 
    	 * @param url
    	 *            发送请求的 URL
    	 * @param param
    	 *            请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
    	 * @return 所代表远程资源的响应结果
    	 * @throws Exception
    	 */
    	public static String doPost(String url, String param) 
    	{
    		PrintWriter out = null;
    		BufferedReader in = null;
    		String result = "";
    		try
    		{
    			URL realUrl = new URL(url);
    			// 打开和URL之间的连接
    			HttpURLConnection conn = (HttpURLConnection) realUrl
    					.openConnection();
    			// 设置通用的请求属性
    			conn.setRequestProperty("accept", "*/*");
    			conn.setRequestProperty("connection", "Keep-Alive");
    			conn.setRequestMethod("POST");
    			conn.setRequestProperty("Content-Type",
    					"application/x-www-form-urlencoded");
    			conn.setRequestProperty("charset", "utf-8");
    			conn.setUseCaches(false);
    			// 发送POST请求必须设置如下两行
    			conn.setDoOutput(true);
    			conn.setDoInput(true);
    			conn.setReadTimeout(TIMEOUT_IN_MILLIONS);
    			conn.setConnectTimeout(TIMEOUT_IN_MILLIONS);
    
    			if (param != null && !param.trim().equals(""))
    			{
    				// 获取URLConnection对象对应的输出流
    				out = new PrintWriter(conn.getOutputStream());
    				// 发送请求参数
    				out.print(param);
    				// flush输出流的缓冲
    				out.flush();
    			}
    			// 定义BufferedReader输入流来读取URL的响应
    			in = new BufferedReader(
    					new InputStreamReader(conn.getInputStream()));
    			String line;
    			while ((line = in.readLine()) != null)
    			{
    				result += line;
    			}
    		} catch (Exception e)
    		{
    			e.printStackTrace();
    		}
    		// 使用finally块来关闭输出流、输入流
    		finally
    		{
    			try
    			{
    				if (out != null)
    				{
    					out.close();
    				}
    				if (in != null)
    				{
    					in.close();
    				}
    			} catch (IOException ex)
    			{
    				ex.printStackTrace();
    			}
    		}
    		return result;
    	}
    }
    

    如果大家在使用过程中出现什么错误,或者有更好的建议,欢迎大家留言提出~~可以不断的改进这些类~


    源码点击下载





    展开全文
  • Android开发工具类能很好的封装一些常用的操作,以后使用起来也非常方便,我把我经常使用的工具类分享给大家。FileCache:package com.pztuan.common.util; import java.io.File; import android.content.Context...

           Android开发的工具类能很好的封装一些常用的操作,以后使用起来也非常方便,我把我经常使用的工具类分享给大家。

    FileCache:

    package com.pztuan.common.util;
    
    import java.io.File;
    import android.content.Context;
    
    public class FileCache {
    	private File cacheDir;
    
    	public FileCache(Context context) {
    		// 判断外存SD卡挂载状态,如果挂载正常,创建SD卡缓存文件夹
    		if (android.os.Environment.getExternalStorageState().equals(
    				android.os.Environment.MEDIA_MOUNTED)) {
    			cacheDir = new File(
    					android.os.Environment.getExternalStorageDirectory(),
    					"PztCacheDir");
    		} else {
    			// SD卡挂载不正常,获取本地缓存文件夹(应用包所在目录)
    			cacheDir = context.getCacheDir();
    		}
    		if (!cacheDir.exists()) {
    			cacheDir.mkdirs();
    		}
    	}
    
    	public File getFile(String url) {
    		String fileName = String.valueOf(url.hashCode());
    		File file = new File(cacheDir, fileName);
    		return file;
    	}
    
    	public void clear() {
    		File[] files = cacheDir.listFiles();
    		for (File f : files)
    			f.delete();
    	}
    
    	public String getCacheSize() {
    		long size = 0;
    		if (cacheDir.exists()) {
    			File[] files = cacheDir.listFiles();
    			for (File f : files) {
    				size += f.length();
    			}
    		}
    		String cacheSize = String.valueOf(size / 1024 / 1024) + "M";
    		return cacheSize;
    	}
    
    }
    

    NetWorkUtil(网络类):

    package com.pztuan.common.util;
    
    import android.content.Context;
    import android.net.ConnectivityManager;
    import android.net.NetworkInfo;
    import android.net.NetworkInfo.State;
    import android.net.wifi.WifiManager;
    
    import java.security.MessageDigest;
    
    /**
     * 
     * @author suncat
     * @category 网络工具
     */
    public class NetWorkUtil {
    	private final static String[] hexDigits = { "0", "1", "2", "3", "4", "5",
    			"6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
    	public static final int STATE_DISCONNECT = 0;
    	public static final int STATE_WIFI = 1;
    	public static final int STATE_MOBILE = 2;
    
    	public static String concatUrlParams() {
    
    		return null;
    	}
    
    	public static String encodeUrl() {
    
    		return null;
    	}
    
    	public static boolean isNetWorkConnected(Context context) {
    		ConnectivityManager cm = (ConnectivityManager) context
    				.getSystemService(Context.CONNECTIVITY_SERVICE);
    		NetworkInfo[] nis = cm.getAllNetworkInfo();
    		if (nis != null) {
    			for (NetworkInfo ni : nis) {
    				if (ni != null) {
    					if (ni.isConnected()) {
    						return true;
    					}
    				}
    			}
    		}
    
    		return false;
    	}
    
    	public static boolean isWifiConnected(Context context) {
    		WifiManager wifiMgr = (WifiManager) context
    				.getSystemService(Context.WIFI_SERVICE);
    		boolean isWifiEnable = wifiMgr.isWifiEnabled();
    
    		return isWifiEnable;
    	}
    
    	public static boolean isNetworkAvailable(Context context) {
    		ConnectivityManager cm = (ConnectivityManager) context
    				.getSystemService(Context.CONNECTIVITY_SERVICE);
    		NetworkInfo networkInfo = cm.getActiveNetworkInfo();
    		if (networkInfo != null) {
    			return networkInfo.isAvailable();
    		}
    
    		return false;
    	}
    
    	private static String byteArrayToHexString(byte[] b) {
    		StringBuffer resultSb = new StringBuffer();
    		for (int i = 0; i < b.length; i++) {
    			resultSb.append(byteToHexString(b[i]));
    		}
    		return resultSb.toString();
    	}
    
    	private static String byteToHexString(byte b) {
    		int n = b;
    		if (n < 0)
    			n = 256 + n;
    		int d1 = n / 16;
    		int d2 = n % 16;
    		return hexDigits[d1] + hexDigits[d2];
    	}
    
    	public static String md5Encode(String origin) {
    		String resultString = null;
    
    		try {
    			resultString = new String(origin);
    			MessageDigest md = MessageDigest.getInstance("MD5");
    			resultString = new String(md.digest(resultString.getBytes()));
    		} catch (Exception ex) {
    			ex.printStackTrace();
    		}
    
    		return resultString;
    	}
    
    	public static String md5EncodeToHexString(String origin) {
    		String resultString = null;
    
    		try {
    			resultString = new String(origin);
    			MessageDigest md = MessageDigest.getInstance("MD5");
    			resultString = byteArrayToHexString(md.digest(resultString
    					.getBytes()));
    		} catch (Exception ex) {
    			ex.printStackTrace();
    		}
    
    		return resultString;
    	}
    
    	public static int getNetworkState(Context context) {
    		ConnectivityManager connManager = (ConnectivityManager) context
    				.getSystemService(Context.CONNECTIVITY_SERVICE);
    
    		// Wifi
    		State state = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI)
    				.getState();
    		if (state == State.CONNECTED || state == State.CONNECTING) {
    			return STATE_WIFI;
    		}
    
    		// 3G
    		state = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE)
    				.getState();
    		if (state == State.CONNECTED || state == State.CONNECTING) {
    			return STATE_MOBILE;
    		}
    		return STATE_DISCONNECT;
    	}
    }
    

    Tools(常用小功能:号码正则匹配、日期计算、获取imei号、计算listview高度):


    package com.pztuan.common.util;
    
    import java.security.MessageDigest;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    import android.annotation.SuppressLint;
    import android.content.Context;
    import android.os.Environment;
    import android.telephony.TelephonyManager;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ListAdapter;
    import android.widget.ListView;
    import android.widget.Toast;
    
    @SuppressLint("DefaultLocale")
    public class Tools {
    
    	private final static String[] hexDigits = { "0", "1", "2", "3", "4", "5",
    			"6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
    
    	public static String byteArrayToHexString(byte[] b) {
    		StringBuffer resultSb = new StringBuffer();
    		for (int i = 0; i < b.length; i++) {
    			resultSb.append(byteToHexString(b[i]));
    		}
    		return resultSb.toString();
    	}
    
    	private static String byteToHexString(byte b) {
    		int n = b;
    		if (n < 0)
    			n = 256 + n;
    		int d1 = n / 16;
    		int d2 = n % 16;
    		return hexDigits[d1] + hexDigits[d2];
    	}
    
    	/**
    	 * md5 加密
    	 * 
    	 * @param origin
    	 * @return
    	 */
    	public static String md5Encode(String origin) {
    		String resultString = null;
    		try {
    			resultString = new String(origin);
    			MessageDigest md = MessageDigest.getInstance("MD5");
    			resultString = byteArrayToHexString(md.digest(resultString
    					.getBytes()));
    		} catch (Exception ex) {
    			ex.printStackTrace();
    		}
    		return resultString;
    	}
    
    	/**
    	 * 手机号码格式匹配
    	 * 
    	 * @param mobiles
    	 * @return
    	 */
    	public static boolean isMobileNO(String mobiles) {
    		Pattern p = Pattern
    				.compile("^((13[0-9])|(15[^4,\\D])|(18[0,1,3,5-9]))\\d{8}$");
    		Matcher m = p.matcher(mobiles);
    		System.out.println(m.matches() + "-telnum-");
    		return m.matches();
    	}
    
    	/**
    	 * 是否含有指定字符
    	 * 
    	 * @param expression
    	 * @param text
    	 * @return
    	 */
    	private static boolean matchingText(String expression, String text) {
    		Pattern p = Pattern.compile(expression);
    		Matcher m = p.matcher(text);
    		boolean b = m.matches();
    		return b;
    	}
    
    	/**
    	 * 邮政编码
    	 * 
    	 * @param zipcode
    	 * @return
    	 */
    	public static boolean isZipcode(String zipcode) {
    		Pattern p = Pattern.compile("[0-9]\\d{5}");
    		Matcher m = p.matcher(zipcode);
    		System.out.println(m.matches() + "-zipcode-");
    		return m.matches();
    	}
    
    	/**
    	 * 邮件格式
    	 * 
    	 * @param email
    	 * @return
    	 */
    	public static boolean isValidEmail(String email) {
    		Pattern p = Pattern
    				.compile("^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$");
    		Matcher m = p.matcher(email);
    		System.out.println(m.matches() + "-email-");
    		return m.matches();
    	}
    
    	/**
    	 * 固话号码格式
    	 * 
    	 * @param telfix
    	 * @return
    	 */
    	public static boolean isTelfix(String telfix) {
    		Pattern p = Pattern.compile("d{3}-d{8}|d{4}-d{7}");
    		Matcher m = p.matcher(telfix);
    		System.out.println(m.matches() + "-telfix-");
    		return m.matches();
    	}
    
    	/**
    	 * 用户名匹配
    	 * 
    	 * @param name
    	 * @return
    	 */
    	public static boolean isCorrectUserName(String name) {
    		Pattern p = Pattern.compile("([A-Za-z0-9]){2,10}");
    		Matcher m = p.matcher(name);
    		System.out.println(m.matches() + "-name-");
    		return m.matches();
    	}
    
    	/**
    	 * 密码匹配,以字母开头,长度 在6-18之间,只能包含字符、数字和下划线。
    	 * 
    	 * @param pwd
    	 * @return
    	 * 
    	 */
    	public static boolean isCorrectUserPwd(String pwd) {
    		Pattern p = Pattern.compile("\\w{6,18}");
    		Matcher m = p.matcher(pwd);
    		System.out.println(m.matches() + "-pwd-");
    		return m.matches();
    	}
    
    	/**
    	 * 检查是否存在SDCard
    	 * 
    	 * @return
    	 */
    	public static boolean hasSdcard() {
    		String state = Environment.getExternalStorageState();
    		if (state.equals(Environment.MEDIA_MOUNTED)) {
    			return true;
    		} else {
    			return false;
    		}
    	}
    
    	/**
    	 * 计算剩余日期
    	 * 
    	 * @param remainTime
    	 * @return
    	 */
    	public static String calculationRemainTime(String endTime, long countDown) {
    
    		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    		try {
    			Date now = new Date(System.currentTimeMillis());// 获取当前时间
    			Date endData = df.parse(endTime);
    			long l = endData.getTime() - countDown - now.getTime();
    			long day = l / (24 * 60 * 60 * 1000);
    			long hour = (l / (60 * 60 * 1000) - day * 24);
    			long min = ((l / (60 * 1000)) - day * 24 * 60 - hour * 60);
    			long s = (l / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60);
    			return "剩余" + day + "天" + hour + "小时" + min + "分" + s + "秒";
    		} catch (ParseException e) {
    			e.printStackTrace();
    		}
    		return "";
    	}
    
    	public static void showLongToast(Context act, String pMsg) {
    		Toast toast = Toast.makeText(act, pMsg, Toast.LENGTH_LONG);
    		toast.show();
    	}
    
    	public static void showShortToast(Context act, String pMsg) {
    		Toast toast = Toast.makeText(act, pMsg, Toast.LENGTH_SHORT);
    		toast.show();
    	}
    
    	/**
    	 * 获取手机Imei号
    	 * 
    	 * @param context
    	 * @return
    	 */
    	public static String getImeiCode(Context context) {
    		TelephonyManager tm = (TelephonyManager) context
    				.getSystemService(Context.TELEPHONY_SERVICE);
    		return tm.getDeviceId();
    	}
    
    	/**
    	 * @author sunglasses
    	 * @param listView
    	 * @category 计算listview的高度
    	 */
    	public static void setListViewHeightBasedOnChildren(ListView listView) {
    		ListAdapter listAdapter = listView.getAdapter();
    		if (listAdapter == null) {
    			// pre-condition
    			return;
    		}
    
    		int totalHeight = 0;
    		for (int i = 0; i < listAdapter.getCount(); i++) {
    			View listItem = listAdapter.getView(i, null, listView);
    			listItem.measure(0, 0);
    			totalHeight += listItem.getMeasuredHeight();
    		}
    
    		ViewGroup.LayoutParams params = listView.getLayoutParams();
    		params.height = totalHeight
    				+ (listView.getDividerHeight() * (listAdapter.getCount() - 1));
    		listView.setLayoutParams(params);
    	}
    }
    

    SharedPreferencesUtil:

    package com.pztuan.db;
    
    import android.content.Context;
    import android.content.SharedPreferences;
    import android.content.SharedPreferences.Editor;
    import android.util.Log;
    
    import java.util.ArrayList;
    import java.util.Set;
    
    public class SharedPreferencesUtil {
    	private static final String TAG = "PZTuan.SharePreferencesUtil";
    	private static final String SHAREDPREFERENCE_NAME = "sharedpreferences_pztuan";
    
    	private static SharedPreferencesUtil mInstance;
    
    	private static SharedPreferences mSharedPreferences;
    
    	private static SharedPreferences.Editor mEditor;
    
    	public synchronized static SharedPreferencesUtil getInstance(Context context) {
    		if (mInstance == null) {
    			mInstance = new SharedPreferencesUtil(context);
    		}
    
    		return mInstance;
    	}
    
    	private SharedPreferencesUtil(Context context) {
    		mSharedPreferences = context.getSharedPreferences(
    				SHAREDPREFERENCE_NAME, Context.MODE_PRIVATE);
    		mEditor = mSharedPreferences.edit();
    	}
    
    	public synchronized boolean putString(String key, String value) {
    		mEditor.putString(key, value);
    		return mEditor.commit();
    	}
    
    	public synchronized boolean putStringArrayList(String key,
    			ArrayList<String> value) {
    
    		for (int j = 0; j < value.size() - 1; j++) {
    			if (value.get(value.size() - 1).equals(value.get(j))) {
    				value.remove(j);
    			}
    		}
    		mEditor.putInt("citySize", value.size());
    
    		if (value.size() == 4) {
    			mEditor.putString(key + 0, value.get(3));
    			mEditor.putString(key + 1, value.get(0));
    			mEditor.putString(key + 2, value.get(1));
    		} else if (value.size() == 3) {
    			mEditor.putString(key + 0, value.get(2));
    			mEditor.putString(key + 1, value.get(0));
    			mEditor.putString(key + 2, value.get(1));
    		} else {
    			for (int i = 0; i < value.size(); i++) {
    				mEditor.putString(key + i, value.get(value.size() - 1 - i));
    			}
    
    		}
    		return mEditor.commit();
    	}
    
    	public synchronized boolean putInt(String key, int value) {
    		mEditor.putInt(key, value);
    		return mEditor.commit();
    	}
    
    	public synchronized boolean putLong(String key, long value) {
    		mEditor.putLong(key, value);
    		return mEditor.commit();
    	}
    
    	public synchronized boolean putFloat(String key, float value) {
    		mEditor.putFloat(key, value);
    		return mEditor.commit();
    	}
    
    	public synchronized boolean putBoolean(String key, boolean value) {
    		mEditor.putBoolean(key, value);
    		return mEditor.commit();
    	}
    
    	public synchronized boolean putStringSet(String key, Set<String> value) {
    		mEditor.putStringSet(key, value);
    		return mEditor.commit();
    	}
    
    	public String getString(String key, String value) {
    		return mSharedPreferences.getString(key, value);
    	}
    
    	public ArrayList<String> getStringArrayList(String key, int size) {
    		ArrayList<String> al = new ArrayList<String>();
    		int loop;
    		if (size > 4)
    			loop = 4;
    		else
    			loop = size;
    		for (int i = 0; i < loop; i++) {
    			String name = mSharedPreferences.getString(key + i, null);
    			al.add(name);
    		}
    		return al;
    	}
    
    	public int getInt(String key, int value) {
    		return mSharedPreferences.getInt(key, value);
    	}
    
    	public long getLong(String key, long value) {
    		return mSharedPreferences.getLong(key, value);
    	}
    
    	public float getFloat(String key, float value) {
    		return mSharedPreferences.getFloat(key, value);
    	}
    
    	public boolean getBoolean(String key, boolean value) {
    		return mSharedPreferences.getBoolean(key, value);
    	}
    
    	public Set<String> getStringSet(String key, Set<String> value) {
    		return mSharedPreferences.getStringSet(key, value);
    	}
    
    	public boolean remove(String key) {
    		mEditor.remove(key);
    		return mEditor.commit();
    	}
    
    	private static final String PREFERENCES_AUTO_LOGIN = "yyUserAutoLogin";
    	private static final String PREFERENCES_USER_NAME = "yyUserName";
    	private static final String PREFERENCES_USER_PASSWORD = "yyUserPassword";
    
    	public boolean isAutoLogin() {
    		return mSharedPreferences.getBoolean(PREFERENCES_AUTO_LOGIN, false);
    	}
    
    	public String getUserName() {
    		return mSharedPreferences.getString(PREFERENCES_USER_NAME, "");
    	}
    
    	public String getUserPwd() {
    		return mSharedPreferences.getString(PREFERENCES_USER_PASSWORD, "");
    	}
    
    	public void saveLoginInfo(Boolean autoLogin, String userName,
    			String userPassword) {
    		assert (mEditor != null);
    		mEditor.putBoolean(PREFERENCES_AUTO_LOGIN, autoLogin);
    		mEditor.putString(PREFERENCES_USER_NAME, userName);
    		mEditor.putString(PREFERENCES_USER_PASSWORD, userPassword);
    		mEditor.commit();
    	}
    
    	public void saveLoginPassword(String userPassword) {
    		mEditor.putString(PREFERENCES_USER_PASSWORD, userPassword);
    		mEditor.commit();
    	}
    
    	public void saveLoginUserid(String userid) {
    		mEditor.putString("userid", userid);
    		mEditor.commit();
    	}
    
    	public void clearUserInfo() {
    		assert (mEditor != null);
    		mEditor.putBoolean(PREFERENCES_AUTO_LOGIN, false);
    		mEditor.putString(PREFERENCES_USER_NAME, "");
    		mEditor.putString(PREFERENCES_USER_PASSWORD, "");
    		mEditor.putString("userid", "");
    		mEditor.commit();
    	}
    
    }
    

    如有问题请留言,转载注明出处。

    展开全文
  • 作为一个Android开发人员来说,一款好的开发工具也是相当重要的,在相当长的时间礼,Google都是基于Eclipse以ADT插件的形式来开发Android应用的,Eclipse可谓是经典到不能再经典的开发工具了,他几乎什么都可以干,...
  • Android Studio 是谷歌基于IntelliJ IDEA开发的安卓开发工具,有点类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工具用于开发和调试,基于Gradle的构建支持。 Android Studio常用快捷键 1. Ctrl+D...
  • ADB(Android Debug Bridge)是Android SDK中的一个工具, 使用ADB可以直接操作管理Android模拟器或者真实的Andriod设备。 ADB主要功能有:
  • Android快速开发最常用的工具类--最常用的工具类集锦(必收藏) 这里收集与准备了一些Android开发中最常用的工具类,之前有过几篇其他的比较全的单方面的工具类比如FileUtils,ImageUtils等,里面方法很全但略显繁杂,...
  • Android Bluetooth 蓝牙开发全面总结;蓝牙开发;蓝牙设备;智能蓝牙;蓝牙开发遇到的坑;蓝牙DEMO;蓝牙模块进行通信;智能硬件;Android中经典蓝牙开发步骤 (流程) ;蓝牙开发学习资料;android蓝牙开发 蓝牙模块...
  • 包括了各种工具类、辅助类、管理类等 Awesome_API: https://github.com/marktony/Awesome_API/blob/master/Chinese.md收集中国国内可用APIcommons-lang: ... a packa...
  • 主要还是一些快捷键便于开发,另外还有些功能如连到Github,用Android Device Monitor调试,断点调试等。 记录内容如下: 查找当前类支持的方法: Ctrl + O 整个项目查找被调用地方: Ctrl + Shift + F 打出...
  • 搭建Android开发环境——Eclipse Andriod SDK Eclipse ADT Android SDK SDK介绍 SDK:(software development kit)软件开发工具包。被软件开发工程师用于为特定的软件包、软件框架、硬件平台、操作系统...
  • 开发环境及开发工具 一、开发环境变量的配置 不管是使用Eclipse ADT还是Android Studio进行开发,都需要配置环境变量。首先,我们了解一下需要配置的环境变量及其作用。 PATH环境变量:作用是指定命令(javac/...
  • 在我们的日常开发中,可能会涉及到截个图啊,录个屏啊,看个当前页面啊等等。这些其实都是小问题,几步操作下来,大家都能解决。但是长期下来,都时不时要搞点这种简单而重复的劳动的话,总归觉得不爽。开发做久了,...
  • Android日志分析工具开发介绍 一,软件下载地址: 技术交流QQ群:513138238(用于公布软件最新版本信息和相关技术交流) [V3.6.3] http://download.csdn.net/detail/u013662621/9945190 [V3.5.3] ...
  • 在此之前必须把jdk的开发环境配置好. linux上的jdk开发环境配置可参考: http://blog.csdn.net/jklinux/article/details/71307814 windows上的jdk开发环境配置可参考: ...
  • Android开发常用工具

    2015-09-22 09:04:12
    Android开发中必备的一些工具类,稍作整理,供快速开发使用~ 1、日期工具类 package cn.yyh.oa.utils.speed; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; /** * 日期...
  • Android系统性能调优工具介绍在软件开发过程中,想必很多读者都遇到过系统性能问题。而解决系统性能问题的几个主要步骤是:测评:对系统进行大量有针对性的测试,以得到合适的测试数据。分析系统瓶颈:分析测试数据...
  • 0.前言Android Studio目前已经成为开发Android的主要工具,作为开发者,调试、发现并解决BUG是家常便饭。正所谓,工欲善其事必先利其器,今天我们就来看看Android Studio中有关调试的技巧。1.调试面板调试面板首先...
  • Android开发——adb工具使用说明1.1 什么是ADB工具?ADB全称Android Debug Bridge,是android sdk里的一个工具。ADB是一个标准的CS结构的工具。 如果你的电脑安装了AndroidStudio,你可以在AndroidStudio安装路径...
1 2 3 4 5 ... 20
收藏数 93,960
精华内容 37,584
关键字:

当前开发android的工具