Android常用开发工具类汇总

原文地址附源码下载地址
在开发中使用一些工具类,能让代码更加简洁,开发效率也更高,下面是我收集的Android中常用的一些开发工具类,如果大家有更好的工具,欢迎私信我。

数据管理的工具类,清理缓存数据

[java] view plaincopy

    import java.io.File;  
    import java.math.BigDecimal;  

    import android.content.Context;  
    import android.os.Environment;  
    import android.text.TextUtils;  

    /** 
     * 本应用数据清除管理器 
     *  
     *  
     */  
    public class DataCleanManager {  
        /** 
         * * 清除本应用内部缓存(/data/data/com.xxx.xxx/cache) * * 
         *  
         * @param context 
         */  
        public static void cleanInternalCache(Context context) {  
            deleteFilesByDirectory(context.getCacheDir());  
        }  

        /** 
         * * 清除本应用所有数据库(/data/data/com.xxx.xxx/databases) * * 
         *  
         * @param context 
         */  
        public static void cleanDatabases(Context context) {  
            deleteFilesByDirectory(new File("/data/data/"  
                    + context.getPackageName() + "/databases"));  
        }  

        /** 
         * * 清除本应用SharedPreference(/data/data/com.xxx.xxx/shared_prefs) * 
         *  
         * @param context 
         */  
        public static void cleanSharedPreference(Context context) {  
            deleteFilesByDirectory(new File("/data/data/"  
                    + context.getPackageName() + "/shared_prefs"));  
        }  

        /** 
         * * 按名字清除本应用数据库 * * 
         *  
         * @param context 
         * @param dbName 
         */  
        public static void cleanDatabaseByName(Context context, String dbName) {  
            context.deleteDatabase(dbName);  
        }  

        /** 
         * * 清除/data/data/com.xxx.xxx/files下的内容 * * 
         *  
         * @param context 
         */  
        public static void cleanFiles(Context context) {  
            deleteFilesByDirectory(context.getFilesDir());  
        }  

        /** 
         * * 清除外部cache下的内容(/mnt/sdcard/android/data/com.xxx.xxx/cache) 
         *  
         * @param context 
         */  
        public static void cleanExternalCache(Context context) {  
            if (Environment.getExternalStorageState().equals(  
                    Environment.MEDIA_MOUNTED)) {  
                deleteFilesByDirectory(context.getExternalCacheDir());  
            }  
        }  

        /** 
         * * 清除自定义路径下的文件,使用需小心,请不要误删。而且只支持目录下的文件删除 * * 
         *  
         * @param filePath 
         * */  
        public static void cleanCustomCache(String filePath) {  
            deleteFilesByDirectory(new File(filePath));  
        }  

        /** 
         * * 清除本应用所有的数据 * * 
         *  
         * @param context 
         * @param filepath 
         */  
        public static void cleanApplicationData(Context context, String... filepath) {  
            cleanInternalCache(context);  
            cleanExternalCache(context);  
            cleanDatabases(context);  
            cleanSharedPreference(context);  
            cleanFiles(context);  
            if (filepath == null) {  
                return;  
            }  
            for (String filePath : filepath) {  
                cleanCustomCache(filePath);  
            }  
        }  

        /** 
         * * 删除方法 这里只会删除某个文件夹下的文件,如果传入的directory是个文件,将不做处理 * * 
         *  
         * @param directory 
         */  
        private static void deleteFilesByDirectory(File directory) {  
            if (directory.isFile()) {  
                directory.delete();  
            } else if (directory != null && directory.exists()  
                    && directory.isDirectory()) {  
                for (File item : directory.listFiles()) {  
                    deleteFilesByDirectory(item);  
                }  
            }  
        }  

        // 获取文件  
        // Context.getExternalFilesDir() --> SDCard/Android/data/你的应用的包名/files/  
        // 目录,一般放一些长时间保存的数据  
        // Context.getExternalCacheDir() -->  
        // SDCard/Android/data/你的应用包名/cache/目录,一般存放临时缓存数据  
        public static long getFolderSize(File file) throws Exception {  
            long size = 0;  
            try {  
                File[] fileList = file.listFiles();  
                for (int i = 0; i < fileList.length; i++) {  
                    // 如果下面还有文件  
                    if (fileList[i].isDirectory()) {  
                        size = size + getFolderSize(fileList[i]);  
                    } else {  
                        size = size + fileList[i].length();  
                    }  
                }  
            } catch (Exception e) {  
                e.printStackTrace();  
            }  
            return size;  
        }  

        /** 
         * 删除指定目录下文件及目录 
         *  
         * @param deleteThisPath 
         * @param filepath 
         * @return 
         */  
        public static void deleteFolderFile(String filePath, boolean deleteThisPath) {  
            if (!TextUtils.isEmpty(filePath)) {  
                try {  
                    File file = new File(filePath);  
                    if (file.isDirectory()) {// 如果下面还有文件  
                        File files[] = file.listFiles();  
                        for (int i = 0; i < files.length; i++) {  
                            deleteFolderFile(files[i].getAbsolutePath(), true);  
                        }  
                    }  
                    if (deleteThisPath) {  
                        if (!file.isDirectory()) {// 如果是文件,删除  
                            file.delete();  
                        } else {// 目录  
                            if (file.listFiles().length == 0) {// 目录下没有文件或者目录,删除  
                                file.delete();  
                            }  
                        }  
                    }  
                } catch (Exception e) {  
                    e.printStackTrace();  
                }  
            }  
        }  

        /** 
         * 格式化单位 
         *  
         * @param size 
         * @return 
         */  
        public static String getFormatSize(double size) {  
            double kiloByte = size / 1024;  
            if (kiloByte < 1) {  
                return size + "Byte";  
            }  

            double megaByte = kiloByte / 1024;  
            if (megaByte < 1) {  
                BigDecimal result1 = new BigDecimal(Double.toString(kiloByte));  
                return result1.setScale(2, BigDecimal.ROUND_HALF_UP)  
                        .toPlainString() + "KB";  
            }  

            double gigaByte = megaByte / 1024;  
            if (gigaByte < 1) {  
                BigDecimal result2 = new BigDecimal(Double.toString(megaByte));  
                return result2.setScale(2, BigDecimal.ROUND_HALF_UP)  
                        .toPlainString() + "MB";  
            }  

            double teraBytes = gigaByte / 1024;  
            if (teraBytes < 1) {  
                BigDecimal result3 = new BigDecimal(Double.toString(gigaByte));  
                return result3.setScale(2, BigDecimal.ROUND_HALF_UP)  
                        .toPlainString() + "GB";  
            }  
            BigDecimal result4 = new BigDecimal(teraBytes);  
            return result4.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString()  
                    + "TB";  
        }  

        public static String getCacheSize(File file) throws Exception {  
            return getFormatSize(getFolderSize(file));  
        }  

    }  

手机号,邮箱,身份证校验工具类

[java] view plaincopy

    import java.util.HashMap;  
    import java.util.regex.Matcher;  
    import java.util.regex.Pattern;  

    public class VerificationUtils {  

        private final static Pattern emailer = Pattern  
                .compile("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*");  
        private static String _codeError;  
        // wi =2(n-1)(mod 11)  
        final static int[] wi = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4,  
                2, 1 };  
        // verify digit  
        final static int[] vi = { 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2 };  
        private static int[] ai = new int[18];  
        private static String[] _areaCode = { "11", "12", "13", "14", "15", "21",  
                "22", "23", "31", "32", "33", "34", "35", "36", "37", "41", "42",  
                "43", "44", "45", "46", "50", "51", "52", "53", "54", "61", "62",  
                "63", "64", "65", "71", "81", "82", "91" };  
        private static HashMap<String, Integer> dateMap;  
        private static HashMap<String, String> areaCodeMap;  
        static {  
            dateMap = new HashMap<String, Integer>();  
            dateMap.put("01", 31);  
            dateMap.put("02", null);  
            dateMap.put("03", 31);  
            dateMap.put("04", 30);  
            dateMap.put("05", 31);  
            dateMap.put("06", 30);  
            dateMap.put("07", 31);  
            dateMap.put("08", 31);  
            dateMap.put("09", 30);  
            dateMap.put("10", 31);  
            dateMap.put("11", 30);  
            dateMap.put("12", 31);  
            areaCodeMap = new HashMap<String, String>();  
            for (String code : _areaCode) {  
                areaCodeMap.put(code, null);  
            }  
        }  

        /** 
         * 验证手机号 
         *  
         * @param str 
         * @return 
         */  
        public static boolean isMobile(String str) {  
            Pattern p = null;  
            Matcher m = null;  
            boolean b = false;  
            p = Pattern.compile("^[1][3,4,5,8,7][0-9]{9}$");  
            // p = Pattern.compile("^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$");  
            m = p.matcher(str);  
            b = m.matches();  
            return b;  
        }  

        /** 
         * 验证邮箱 
         *  
         * @param email 
         * @return 
         */  
        public static boolean isEmail(String email) {  
            if (email == null || email.trim().length() == 0)  
                return false;  
            return emailer.matcher(email).matches();  
        }  

        public static boolean isEmpty(String input) {  
            if (input == null || "".equals(input))  
                return true;  

            for (int i = 0; i < input.length(); i++) {  
                char c = input.charAt(i);  
                if (c != ' ' && c != '\t' && c != '\r' && c != '\n') {  
                    return false;  
                }  
            }  
            return true;  
        }  

        /** 
         * 验证位数 
         * @param code 
         * @return 
         */  
        public static boolean verifyLength(String code) {  
            int length = code.length();  
            if (length == 15 || length == 18) {  
                return true;  
            } else {  
                return false;  
            }  
        }  

        /** 
         * 验证省区 
         * @param code 
         * @return 
         */  
        public static boolean verifyAreaCode(String code) {  
            String areaCode = code.substring(0, 2);  
            if (areaCodeMap.containsKey(areaCode)) {  
                return true;  
            } else {  
                return false;  
            }  
        }  

        /** 
         * 验证生日 
         * @param code 
         * @return 
         */  
        public static boolean verifyBirthdayCode(String code) {  
            String month = code.substring(10, 12);  
            boolean isEighteenCode = (18 == code.length());  
            if (!dateMap.containsKey(month)) {  
                return false;  
            }  
            String dayCode = code.substring(12, 14);  
            Integer day = dateMap.get(month);  
            String yearCode = code.substring(6, 10);  
            Integer year = Integer.valueOf(yearCode);  

            if (day != null) {  
                if (Integer.valueOf(dayCode) > day || Integer.valueOf(dayCode) < 1) {  
                    return false;  
                }  
            } else {  
                if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {  
                    if (Integer.valueOf(dayCode) > 29  
                            || Integer.valueOf(dayCode) < 1) {  
                        return false;  
                    }  
                } else {  
                    if (Integer.valueOf(dayCode) > 28  
                            || Integer.valueOf(dayCode) < 1) {  
                        return false;  
                    }  
                }  
            }  
            return true;  
        }  

        public static boolean containsAllNumber(String code) {  
            String str = "";  
            if (code.length() == 15) {  
                str = code.substring(0, 15);  
            } else if (code.length() == 18) {  
                str = code.substring(0, 17);  
            }  
            char[] ch = str.toCharArray();  
            for (int i = 0; i < ch.length; i++) {  
                if (!(ch[i] >= '0' && ch[i] <= '9')) {  
                    return false;  
                }  
            }  
            return true;  
        }  



        public static boolean verify(String idcard) {  
            if (!verifyLength(idcard)) {  
                return false;  
            }  
            if (!containsAllNumber(idcard)) {  
                return false;  
            }  

            String eifhteencard = "";  
            if (idcard.length() == 15) {  
                eifhteencard = uptoeighteen(idcard);  
            } else {  
                eifhteencard = idcard;  
            }  
            if (!verifyAreaCode(eifhteencard)) {  
                return false;  
            }  
            if (!verifyBirthdayCode(eifhteencard)) {  
                return false;  
            }  
            if (!verifyMOD(eifhteencard)) {  
                return false;  
            }  
            return true;  
        }  

        public static boolean verifyMOD(String code) {  
            String verify = code.substring(17, 18);  
            if ("x".equals(verify)) {  
                code = code.replaceAll("x", "X");  
                verify = "X";  
            }  
            String verifyIndex = getVerify(code);  
            if (verify.equals(verifyIndex)) {  
                return true;  
            }  
            // int x=17;  
            // if(code.length()==15){  
            // x=14;  
            // }  
            return false;  
        }  

        public static String getVerify(String eightcardid) {  
            int remaining = 0;  

            if (eightcardid.length() == 18) {  
                eightcardid = eightcardid.substring(0, 17);  
            }  

            if (eightcardid.length() == 17) {  
                int sum = 0;  
                for (int i = 0; i < 17; i++) {  
                    String k = eightcardid.substring(i, i + 1);  
                    ai[i] = Integer.parseInt(k);  
                }  

                for (int i = 0; i < 17; i++) {  
                    sum = sum + wi[i] * ai[i];  
                }  
                remaining = sum % 11;  
            }  

            return remaining == 2 ? "X" : String.valueOf(vi[remaining]);  
        }  

        public static String uptoeighteen(String fifteencardid) {  
            String eightcardid = fifteencardid.substring(0, 6);  
            eightcardid = eightcardid + "19";  
            eightcardid = eightcardid + fifteencardid.substring(6, 15);  
            eightcardid = eightcardid + getVerify(eightcardid);  
            return eightcardid;  
        }  
    }  

sharedPreferences封装工具类

[java] view plaincopy

    import android.content.Context;  
    import android.content.SharedPreferences;  
    import android.content.SharedPreferences.Editor;  

    public class SharedPreferencesUtil {  
        /** 
         * 保存在手机里面的文件名 
         */  
        private static final String SP_NAME = "sp_name";  

        public static void setStringParam(Context context, String key, String value) {  
            SharedPreferences sp = context.getSharedPreferences(SP_NAME,  
                    Context.MODE_PRIVATE);  
            Editor edit = sp.edit();  
            edit.putString(key, value);  
            edit.commit();  
            key = null;  
            value = null;  
            edit = null;  
            sp = null;  
            context = null;  
        }  

        /** 
         * 保存字符串数据类型 
         *  
         * @param context 
         * @param keys 
         * @param values 
         */  
        public static void setStringParams(Context context, String[] keys,  
                String[] values) {  
            SharedPreferences sp = context.getSharedPreferences(SP_NAME,  
                    Context.MODE_PRIVATE);  
            Editor edit = sp.edit();  
            for (int i = 0; i < keys.length; i++) {  
                edit.putString(keys[i], values[i]);  
            }  
            keys = null;  
            values = null;  
            edit.commit();  
            edit = null;  
            sp = null;  
            context = null;  
        }  

        /** 
         * 保存所有数据类型 保存数据的方法,我们需要拿到保存数据的具体类型,然后根据类型调用不同的保存方法 
         *  
         * @param context 
         * @param key 
         * @param object 
         */  
        public static void setParam(Context context, String key, Object object) {  

            String type = object.getClass().getSimpleName();  
            SharedPreferences sp = context.getSharedPreferences(SP_NAME,  
                    Context.MODE_PRIVATE);  
            SharedPreferences.Editor editor = sp.edit();  

            if ("String".equals(type)) {  
                editor.putString(key, (String) object);  
            } else if ("Integer".equals(type)) {  
                editor.putInt(key, (Integer) object);  
            } else if ("Boolean".equals(type)) {  
                editor.putBoolean(key, (Boolean) object);  
            } else if ("Float".equals(type)) {  
                editor.putFloat(key, (Float) object);  
            } else if ("Long".equals(type)) {  
                editor.putLong(key, (Long) object);  
            }  

            key = null;  
            object = null;  
            editor.commit();  
            editor = null;  
            sp = null;  
            context = null;  
        }  

        /** 
         * 得到保存数据的方法,我们根据默认值得到保存的数据的具体类型,然后调用相对于的方法获取值 
         *  
         * @param context 
         * @param key 
         * @param defaultObject 
         * @return 
         */  
        public static Object getParam(Context context, String key,  
                Object defaultObject) {  
            String type = defaultObject.getClass().getSimpleName();  
            SharedPreferences sp = context.getSharedPreferences(SP_NAME,  
                    Context.MODE_PRIVATE);  

            if ("String".equals(type)) {  
                return sp.getString(key, (String) defaultObject);  
            } else if ("Integer".equals(type)) {  
                return sp.getInt(key, (Integer) defaultObject);  
            } else if ("Boolean".equals(type)) {  
                return sp.getBoolean(key, (Boolean) defaultObject);  
            } else if ("Float".equals(type)) {  
                return sp.getFloat(key, (Float) defaultObject);  
            } else if ("Long".equals(type)) {  
                return sp.getLong(key, (Long) defaultObject);  
            }  

            return null;  
        }  

    }  

Service工具类

[java] view plaincopy

    import java.util.List;  

    import android.app.ActivityManager;  
    import android.content.Context;  

    /** 
     * 服务是否运行检测帮助类 
     *  
     */  
    public class ServiceUtil {  

        /** 
         * 判断服务是否后台运行 
         *  
         * @param context 
         *            Context 
         * @param className 
         *            判断的服务名字 
         * @return true 在运行 false 不在运行 
         */  
        public static boolean isServiceRun(Context mContext, String className) {  
            boolean isRun = false;  
            ActivityManager activityManager = (ActivityManager) mContext  
                    .getSystemService(Context.ACTIVITY_SERVICE);  
            List<ActivityManager.RunningServiceInfo> serviceList = activityManager  
                    .getRunningServices(40);  
            int size = serviceList.size();  
            for (int i = 0; i < size; i++) {  
                if (serviceList.get(i).service.getClassName().equals(className) == true) {  
                    isRun = true;  
                    break;  
                }  
            }  
            return isRun;  
        }  

    }  

Log日志工具类

[java] view plaincopy

    import android.util.Log;  

    /** 
     * Log显示工具类 
     */  
    public class LogUtil {  

        /** 
         * 开发 
         */  
        private final static int DEVELOP = 0;  

        /** 
         * 测试 
         */  
        private final static int TEST = 1;  

        /** 
         * 上线 
         */  
        private final static int ONLINE = 2;  

        /** 
         * 当前状态 
         */  
        private final static int NOWSTATE = DEVELOP;  

        public static void info(String msg) {  
            info("volunteer", msg);  
        }  

        public static void info(String TAG, String msg) {  
            switch (NOWSTATE) {  
            case DEVELOP:  
                Log.i(TAG, "develop:---" + msg);  
                break;  
            case TEST:  
                Log.i(TAG, "test:---" + msg);  
                break;  
            case ONLINE:  

                break;  

            }  
        }  
    }  

MD5 加密工具类

[java] view plaincopy

    public final class MD5Utils {  
        private static final char Digit[] = {  
            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',   
            'a', 'b', 'c', 'd', 'e', 'f'  
        };  
        private static final byte PADDING[] = {  
            -128, 0, 0, 0, 0, 0, 0, 0, 0, 0,   
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   
            0, 0, 0, 0  
        };  
        private static long state[] = new long[4];  
        private static long count[] = new long[2];  
        private static byte buffer[] = new byte[64];  
        private static String digestHexStr;  
        private static byte digest[] = new byte[16];  

        private MD5Utils() {  
        }  

        /** 
         * 没有加盐 小写输出 
         * @param s 
         * @return 
         */  
        public static String toMD5(String s) {  
            md5Init();  
            md5Update(s.getBytes(), s.length());  
            md5Final();  
            digestHexStr = "";  
            for(int i = 0; i < 16; i++)  
                digestHexStr = digestHexStr + byteHEX(digest[i]);  

            return digestHexStr;  
        }  

        private static void md5Init() {  
            count[0] = 0L;  
            count[1] = 0L;  
            state[0] = 0x67452301L;  
            state[1] = 0xefcdab89L;  
            state[2] = 0x98badcfeL;  
            state[3] = 0x10325476L;  
        }  



        private static long F(long x, long y, long z) {  
            return (x & y) | ((~x) & z);   
        }  

        private static long G(long x, long y, long z) {  
            return (x & z) | (y & (~z));   
        }  

        private static long H(long x, long y, long z) {  
            return x ^ y ^ z;  
        }  

        private static long I(long x, long y, long z) {  
            return y ^ (x | (~z));  
        }  

        private static long FF(long l, long l1, long l2, long l3,   
                long l4, long l5, long l6) {  
            l += F(l1, l2, l3) + l4 + l6;  
            l = (int)l << (int)l5 | (int)l >>> (int)(32L - l5);  
            l += l1;  
            return l;  
        }  

        private static long GG(long l, long l1, long l2, long l3,   
                long l4, long l5, long l6) {  
            l += G(l1, l2, l3) + l4 + l6;  
            l = (int)l << (int)l5 | (int)l >>> (int)(32L - l5);  
            l += l1;  
            return l;  
        }  

        private static long HH(long l, long l1, long l2, long l3,   
                long l4, long l5, long l6) {  
            l += H(l1, l2, l3) + l4 + l6;  
            l = (int)l << (int)l5 | (int)l >>> (int)(32L - l5);  
            l += l1;  
            return l;  
        }  

        private static long II(long l, long l1, long l2, long l3,   
                long l4, long l5, long l6) {  
            l += I(l1, l2, l3) + l4 + l6;  
            l = (int)l << (int)l5 | (int)l >>> (int)(32L - l5);  
            l += l1;  
            return l;  
        }  

        private static void md5Update(byte abyte0[], int i) {  
            byte abyte1[] = new byte[64];  
            int k = (int)(count[0] >>> 3) & 0x3f;  
            if ((count[0] += i << 3) < (long)(i << 3))  
                count[1]++;  
            count[1] += i >>> 29;  
            int l = 64 - k;  
            int j;  
            if (i >= l) {  
                md5Memcpy(buffer, abyte0, k, 0, l);  
                md5Transform(buffer);  
                for(j = l; j + 63 < i; j += 64) {  
                    md5Memcpy(abyte1, abyte0, 0, j, 64);  
                    md5Transform(abyte1);  
                }  
                k = 0;  
            } else {  
                j = 0;  
            }  
            md5Memcpy(buffer, abyte0, k, j, i - j);  
        }  

        private static void md5Final() {  
            byte abyte0[] = new byte[8];  
            Encode(abyte0, count, 8);  
            int i = (int)(count[0] >>> 3) & 0x3f;  
            int j = i >= 56 ? 120 - i : 56 - i;  
            md5Update(PADDING, j);  
            md5Update(abyte0, 8);  
            Encode(digest, state, 16);  
        }  

        private static void md5Memcpy(byte abyte0[], byte abyte1[], int i, int j, int k) {  
            for(int l = 0; l < k; l++)  
                abyte0[i + l] = abyte1[j + l];  
        }  

        private static void md5Transform(byte abyte0[]) {  
            long l = state[0];  
            long l1 = state[1];  
            long l2 = state[2];  
            long l3 = state[3];  
            long al[] = new long[16];  
            Decode(al, abyte0, 64);  
            l = FF(l, l1, l2, l3, al[0], 7L, 0xd76aa478L);  
            l3 = FF(l3, l, l1, l2, al[1], 12L, 0xe8c7b756L);  
            l2 = FF(l2, l3, l, l1, al[2], 17L, 0x242070dbL);  
            l1 = FF(l1, l2, l3, l, al[3], 22L, 0xc1bdceeeL);  
            l = FF(l, l1, l2, l3, al[4], 7L, 0xf57c0fafL);  
            l3 = FF(l3, l, l1, l2, al[5], 12L, 0x4787c62aL);  
            l2 = FF(l2, l3, l, l1, al[6], 17L, 0xa8304613L);  
            l1 = FF(l1, l2, l3, l, al[7], 22L, 0xfd469501L);  
            l = FF(l, l1, l2, l3, al[8], 7L, 0x698098d8L);  
            l3 = FF(l3, l, l1, l2, al[9], 12L, 0x8b44f7afL);  
            l2 = FF(l2, l3, l, l1, al[10], 17L, 0xffff5bb1L);  
            l1 = FF(l1, l2, l3, l, al[11], 22L, 0x895cd7beL);  
            l = FF(l, l1, l2, l3, al[12], 7L, 0x6b901122L);  
            l3 = FF(l3, l, l1, l2, al[13], 12L, 0xfd987193L);  
            l2 = FF(l2, l3, l, l1, al[
Android JNI开发常用库汇总,再也不用自己编译啦 Android JNI开发中常用库汇总 此hub是我在开发android jni 过程中编译或者收集到的一些常用库,android 应用环境比较固定,所以一次编译好,大家就都可以用。(持续更新~ ~) 使用过程遇到问题,欢迎讨论。 所有文件在Github下载 文章目录Android JNI开发中常用库汇总1 OpenCV动态库2. tensorflow-lite动态库3. caffe动态库3.5 caffe的aar库4. pytorch动态库5. boost静态库6. 未完待续 。。。 1 OpenCV动态 阅读详情

相关推荐

android 开发六大工具

andorid开发的工具,是android开发着都要知道的

Android开发十大必备工具(图文)

通过ProGuard可得到更精简的文件,也就意味着网络传输更省时,装载速度更快,占用内存空间更小。你可以将模拟器与AVD结合在一起模拟目标移动设备的运行环境,但更全面地进行测试,你还是需要一个真正的移动设备,因为模拟器虽然功能强大,但它毕竟不是实际使用的手机,用户也不可能使用模拟器运行应用程序,所以实际移动设备也是测试环节必不可少的工具。当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。

2401_84545016的博客 2680

DB2__基本概念——联邦

建立联邦 优点:优点是数据仍然保留在原来的存储位置,而不必建立一个集中的式数据仓储。  缺点:数据联邦查询反映会慢,不适合频繁查询,而且容易出现锁争用和资源冲突等问题 建立联邦表步骤 前提条件:知道两个数据库的ip,用户名,密码及被连数据库的版本 eg:  数据库  qqdb  ip: 22.5.225.225   端口:50000    密码:123456        数据库   ...

qq_38569524的博客 1255

Andorid开发常用开发工具类汇总

原文地址附源码下载地址 在开发中使用一些工具类,能让代码更加简洁,开发效率也更高,下面是我收集的Android中常用的一些开发工具类,如果大家有更好的工具,欢迎私信我。数据管理的工具类,清理缓存数据[java] view plaincopy import java.io.File; import java.math.BigDecimal; import and...

源码有毒的专栏 262

使用 Java + PaddleOCR 实现表格识别,支持导出 HTML 和 Excel(附源码)

使用Java+PaddleOCR快速搭建表格识别系统,无需处理底层模型细节。系统支持表格结构识别和内容识别,可将图片转换为可编辑表格格式。文章提供了完整的实现流程,包括Maven依赖引入、模型下载(包含检测、识别、分类和表格结构模型)及参数配置说明。SmartJavaAI支持多种高性能模型选择,适用于不同应用场景,帮助开发者快速实现表格识别功能。

deng775747758的博客 1473

从BSCAN到BAP:深度解析Tessent MBIST逻辑的协同工作机制与设计考量

本文深入解析了Tessent MBIST逻辑中BSCAN Interface、Logic Group Def、Controller与BAP模块的协同工作机制。文章以一条测试指令的完整路径为例,详细阐述了数据流与控制流如何跨模块、跨时钟域协同工作,并重点探讨了MBIST BAP在协议转换与流量管理中的核心桥梁作用,为芯片内建自测试的集成与调试提供了关键的设计考量和实战技巧。

kappa的博客 479

Andorid开发之常用工具类Utils

Andorid开发之常用工具类utilsAndroid项目中开发中常用的一些方法比如,加载布局、dp和px互转、添加字符串数组、获取图片等方法,我们可以创建一个工具类,代码如下:package pengchao.p2pmoney.Utils; import android.content.Context; import android.content.res.ColorStateList; im...

qq_32625999的博客 397

rk3568 修改开机动画

bootanimation.zip是一个Android设备启动时播放的动画文件,它包含了一系列的图片和描述文件,用于描述动画的播放顺序和持续时间。

weixin_35723192的博客 2727

Android开发工具下载及环境配置

工作一年,家里出了点事,回家发展,找到一份Android开发,大恩大德不嫌弃我菜,而且公司规模在本地来说同行业内是比较大的了,挺好的,今天刚来,发现电脑没安装开发软件,遂着手先把吃饭的工具先下下来,难过:(第一步、安装JDK; jdk用的1.8的,官网下载直接安装,不祥述了然后测试是否安装成功 cmd→java接着是配置环境变量 计算机右键→属性→高级系统设置→高级下的环境变量 ①JAVA_

raychongzi的博客 6230

使用C++实现DNS欺骗攻击

其中,domain_name表示需要欺骗的域名,dns_server_ip表示实际DNS服务器的IP地址,fake_ip表示需要重定向到的IP地址。在DNS查询过程中,当客户端向DNS服务器请求解析某个域名时,DNS服务器会返回该域名对应的IP地址。DNS劫持是一种常见的网络攻击方式,通过篡改DNS响应数据,使得用户访问的网站被重定向到攻击者指定的恶意站点。我们使用C++编写一个简单的DNS欺骗程序,使得当客户端请求解析特定的域名时,我们可以将其重定向到指定的IP地址。使用C++实现DNS欺骗攻击。

TechGlide的博客 411

AutoSAR系列讲解(深入篇)13.6-闪烁一颗LED灯 6

闪烁一颗LED灯:配置SWC和生成代码

雪云飞星的博客 1万+

总结Android开发中常用的工具类

我们在日常开发中,都会有一些常用的辅助工具类,完成一些非业务方面的功能,今天抽空整理出13个工具类,这些工具类基本在我们开发项目中都会用到。本人也是第一次写博客先从简单的开始就算试试水了,废话不多说了,接下来我们直接看代码,写的不好的地方希望大家多多留言。 1、日志管理类import android.util.Log;/** * Created by guojingbu on 2017/12/16

guojingbu的博客 354

用 ABAP CDS 把树建起来:Hierarchy 的建模、调试与消费全流程

CDS Hierarchy 将树形数据结构作为一等公民引入 ABAP 开发,通过定义父子关联、根节点条件和兄弟排序规则,让数据库原生支持层级查询。相比传统递归处理方式,它能避免性能瓶颈,提供$node系统字段描述节点结构信息,并支持与SAP UI框架无缝集成。这种方法简化了组织架构、成本中心等业务场景的层级数据处理,使开发人员能够专注于业务逻辑而非底层实现。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 204

官方源、镜像源汇总

分类: 其他站点版(一)、企业站搜狐:http://mirrors.sohu.com/ 网易:http://mirrors.163.com/ 阿里云:http://mirrors.aliyun.com/ 腾讯:http://android-mirror.bugly.qq.com:8080/(仅针对APP开发的软件,限流,不推荐) 淘宝:http://npm.taobao.org/(二)、教育站上海...

码农崛起 5590

VTK API 详解(134):vtkOBJWriter - 写入 OBJ 模型

是 VTK 中用于将数据写入 Wavefront OBJ 文件格式的类。OBJ 格式是广泛支持的 3D 网格模型格式,支持顶点、面和基本几何信息的保存,便于模型在多种三维软件间交换。

yumeiguo的博客 140

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Android常用开发工具类

Android常用开发工具类应用工具类

wzgiceman 1万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

android 快速开发工具类,android面试知识点

项目地址:570622566/FastAndrUtils  简介:android 快速开发工具类 更多:作者   提 Bug   官网 标签: Fastandrutils 是一套整理修改整合的 android 开发常用的工具类。 这样可以减少复制粘贴代码,从而减少重复代码,也不用为了一个常用的功能去谷歌百度,让代码更简洁,让开发更高效。 同时希望您的添加完善,让 android 开发变得更简单。 感兴趣的话,就点赞支持下 个人博客 使用

m0_64383081的博客 7620

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

常用安卓开发技巧汇总

常用安卓开发技巧汇总经常用的一些小技巧都会记录在这边报这么一个错误: Call requires API level 11 (current min is 8): android.animation.ObjectAnimator#ofFloat 主要原因是 AndroidManifest.xml中的API权限等级不够: <uses-sdk android:minSdkVersion="8" android:targetSdkVersion=&qu

weixin_67271870的博客 606

Android常用框架汇总

android开发常用的框架汇总,实时更新中网络访问RetrofitGradle:latestVersion:2.1.0 compile 'com.squareup.retrofit2:retrofit:latestVersion' CallAdapters:RxJava - com.squareup.retrofit2:adapter-rxjava Guava - com.squareup.re

行云间 3404

安卓开发工具类

Android 最全工具类集合 - 简书https://www.jianshu.com/p/fa4a1aa6b730

shuangrenlong的博客 4331

Android:adb常用命令汇总

android:adb常用命令 1、覆盖安装命令:adb install -r xxx.apk,如果已经安装有这个apk的话直接adb install xxx.apk会提醒Failure [INSTALL_FAILED_ALREADY_EXISTS,加-r的会覆盖安装,-r: replace existing a...

海月汐辰 1654

高通及安卓及QNX常用缩写

提供的一种特殊的机制,可以将RISC处理器集成在其他IP芯核和外设中,它是有效连接IP核的“数字胶”,并且是ARM复用策略的重要组件。是ISO 15765 和ISO 14229 定义的一种汽车通用诊断协议,位于OSI模型中的应用层,它可在不同的汽车总线(例如CAN, LIN, Flexray, Internet 和K-line)上实现。指的是UBI subsystem,其工作在MTD设备上,是MTD设备的高层次表示,对上屏蔽了一些MTD需要处理的问题,如磨损均衡和坏块处理。更多的容量支持,更安全的引导。

qq_31626543的博客 2424

干货笔记:安卓系统开发工程师必须掌握常用命令汇总(不断更新)

经常在做系统开发需要使用一些命令来查看某个模块相关的信息,根据这些信息来清楚了解模块当前状态,比如常用的dumpsys activity,dumpsys SurfaceFlinger等命令,这些命令其实用多了自然就熟悉了。属于非常高频命令,主要用来展示当前设备上展示的画面,图层信息,一般用于调试,定位一些显示异常等疑难问题,属于做系统窗口和显示开发必须会的命令。这个命令内容太多,一般在想要展示所有信息时候使用,但是因为输出内容太多,一般会用他的子命令,更有目标性。1、某个apk是否安装,apk的安装路径。

learnframework的博客 1411

Android关于低功耗的蓝牙开发工具类

前段时间公司一直在做与蓝牙通讯的项目,蓝牙在网络上有很多资料,发现有些地方还是有些讲述不具体的地方,所以决定总结一下。蓝牙低功耗通讯的工具类使用方法。        蓝牙通讯之中最重要的就是uuid,因为其他的信息都可以通过扫描之后获得。唯有uuid是需要开发者填写进去的交流的双方约定唯一的“钥匙”。        uuid可以理解为端口,基本上分为三种,发送数据的uuid,接收数据的uuid

weixin_30267253的博客 698
上一篇: Andorid开发常用开发工具类汇总
下一篇: Android常用开发工具类汇总
coley-wu
博客等级 码龄12年 859粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值