package com.antfortune.freeline.util; import android.app.ActivityManager; import android.content.Context; import android.content.pm.ApplicationInfo; import android.text.TextUtils; import android.util.Log; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.List; /** * Created by huangyong on 16/7/30. */ public class AppUtils { private static final String TAG = "Freeline.AppUtils"; public static boolean isApkDebugable(Context context) { try { ApplicationInfo info = context.getApplicationInfo(); return (info.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0; } catch (Exception e) { } return false; } public static String getCurProcessName(Context context) { String strRet = null; try { Class<?> clazz = Class.forName("android.ddm.DdmHandleAppName"); Method method = clazz.getDeclaredMethod("getAppName"); strRet = (String) method.invoke(clazz); } catch (Exception e) { Log.w(TAG, e); } if (TextUtils.isEmpty(strRet)) { final int pid = android.os.Process.myPid(); android.app.ActivityManager activityManager = (android.app.ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); final List<ActivityManager.RunningAppProcessInfo> runningAppProcesses = activityManager.getRunningAppProcesses(); for (ActivityManager.RunningAppProcessInfo appProcess : runningAppProcesses) { if (appProcess.pid == pid) { strRet = appProcess.processName; break; } } } return strRet; } public static boolean isMainProcess(Context context) { String packageName = context.getPackageName(); String processName = getCurProcessName(context); return packageName.equalsIgnoreCase(processName); } public static boolean isFreelineProcess(Context context) { String processName = getCurProcessName(context); return processName.endsWith(":freeline"); } public static String findJniLibrary(Context context, String libName) { String result = null; ClassLoader classLoader = (context.getClassLoader()); if (classLoader != null) { try { Method findLibraryMethod = classLoader.getClass().getMethod("findLibrary", new Class<?>[] { String.class }); if (findLibraryMethod != null) { Object objPath = findLibraryMethod.invoke(classLoader, new Object[] { libName }); if (objPath != null && objPath instanceof String) { result = (String) objPath; } } } catch (Exception e) { Log.e(TAG, e.toString()); } } return result; } }