diff --git a/MobileTracking/.idea/caches/build_file_checksums.ser b/MobileTracking/.idea/caches/build_file_checksums.ser index 98cc668dd6abc35238095dbc6859978bb862c06c..03eef7a5640c38af89b73297181bde3382a814e6 100644 Binary files a/MobileTracking/.idea/caches/build_file_checksums.ser and b/MobileTracking/.idea/caches/build_file_checksums.ser differ diff --git a/MobileTracking/.idea/compiler.xml b/MobileTracking/.idea/compiler.xml new file mode 100644 index 0000000000000000000000000000000000000000..61a9130cd9669c3843e6445dfe1fee2d493869bc --- /dev/null +++ b/MobileTracking/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/MobileTracking/.idea/gradle.xml b/MobileTracking/.idea/gradle.xml index 7c6e5419cb3bb8ed6189c49c16715b34a5ac0440..16988432abcd16855d5d88a3f4468d9b61dfeb9b 100644 --- a/MobileTracking/.idea/gradle.xml +++ b/MobileTracking/.idea/gradle.xml @@ -15,6 +15,7 @@ diff --git a/MobileTracking/.idea/misc.xml b/MobileTracking/.idea/misc.xml index 829c220cae984c1b5f0029987ee7c1d243d13056..e3f3f99194ef5cfaac91b16919beac5514887d1d 100644 --- a/MobileTracking/.idea/misc.xml +++ b/MobileTracking/.idea/misc.xml @@ -39,7 +39,7 @@ - + diff --git a/MobileTracking/.idea/modules.xml b/MobileTracking/.idea/modules.xml index aa8400c35d0d6a6764bab461b4a8ce54257eab42..1553ba53d27c02c388b74749b0f3069911ad868f 100644 --- a/MobileTracking/.idea/modules.xml +++ b/MobileTracking/.idea/modules.xml @@ -2,12 +2,9 @@ - - - - - - + + + \ No newline at end of file diff --git a/MobileTracking/MobileTrackingDemo/build.gradle b/MobileTracking/MobileTrackingDemo/build.gradle index 1e8156a9243b713022213e8b9f3f4db7c883efa3..07913cf8862ffce322aaa3f724b6846a8b96112f 100644 --- a/MobileTracking/MobileTrackingDemo/build.gradle +++ b/MobileTracking/MobileTrackingDemo/build.gradle @@ -17,6 +17,10 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } + lintOptions { + checkReleaseBuilds false + abortOnError false + } sourceSets.main.jniLibs.srcDirs = ['libs'] } diff --git a/MobileTracking/libmobiletracking/build.gradle b/MobileTracking/libmobiletracking/build.gradle index 2794464b372a618cfea28397356f0e2f33abaf6f..4a5fc6b9fb0d793256507a5834da2d3d77c551b4 100644 --- a/MobileTracking/libmobiletracking/build.gradle +++ b/MobileTracking/libmobiletracking/build.gradle @@ -16,10 +16,16 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } + lintOptions { + checkReleaseBuilds false + abortOnError false + } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:24.2.1' + compile files('libs/mma_oaid.jar') + } diff --git a/MobileTracking/libmobiletracking/libs/mma_oaid.jar b/MobileTracking/libmobiletracking/libs/mma_oaid.jar new file mode 100644 index 0000000000000000000000000000000000000000..c7300761cb60a63ef3ebe1630f5bdea8fb9571e0 Binary files /dev/null and b/MobileTracking/libmobiletracking/libs/mma_oaid.jar differ diff --git a/MobileTracking/libmobiletracking/src/main/aidl/com/uodis/opendevice/aidl/OpenDeviceIdentifierService.aidl b/MobileTracking/libmobiletracking/src/main/aidl/com/uodis/opendevice/aidl/OpenDeviceIdentifierService.aidl deleted file mode 100644 index 671ad503e16a84bf95b97536d5904bb09df38c94..0000000000000000000000000000000000000000 --- a/MobileTracking/libmobiletracking/src/main/aidl/com/uodis/opendevice/aidl/OpenDeviceIdentifierService.aidl +++ /dev/null @@ -1,18 +0,0 @@ -// OpenDeviceIdentifierService.aidl -package com.uodis.opendevice.aidl; - -// Declare any non-default types here with import statements - -interface OpenDeviceIdentifierService { - /** - * Demonstrates some basic types that you can use as parameters - * and return values in AIDL. - */ - /** 获取OAID */ - - String getOaid(); - - /** 获取限制跟踪参数,true:限制跟踪;false:不限制跟踪*/ - - boolean isOaidTrackLimited(); -} diff --git a/MobileTracking/libmobiletracking/src/main/java/cn/com/mma/mobile/tracking/api/Constant.java b/MobileTracking/libmobiletracking/src/main/java/cn/com/mma/mobile/tracking/api/Constant.java index 470cf80f7b69e58d0fe48eb1c20237aa2f5f1edd..876e4a9c6ce22bc7be2ea579ac4c1c68d3bd38d9 100755 --- a/MobileTracking/libmobiletracking/src/main/java/cn/com/mma/mobile/tracking/api/Constant.java +++ b/MobileTracking/libmobiletracking/src/main/java/cn/com/mma/mobile/tracking/api/Constant.java @@ -51,7 +51,7 @@ public class Constant { /** frame参数中的分隔符 */ public static final String DIVIDE_MULT = "X"; public static final String TRACKING_SDKVS = "SDKVS"; - public static final String TRACKING_SDKVS_VALUE = "V2.2.1"; //SDK版本号 + public static final String TRACKING_SDKVS_VALUE = "V2.2.2"; //SDK版本号 /** * 新版常量 Begin */ diff --git a/MobileTracking/libmobiletracking/src/main/java/cn/com/mma/mobile/tracking/api/Countly.java b/MobileTracking/libmobiletracking/src/main/java/cn/com/mma/mobile/tracking/api/Countly.java index 8e2dce8d5ec25b73193fded403a982b622b6309a..8c24f4900565ac3f14234f8f8b3547504a59390f 100644 --- a/MobileTracking/libmobiletracking/src/main/java/cn/com/mma/mobile/tracking/api/Countly.java +++ b/MobileTracking/libmobiletracking/src/main/java/cn/com/mma/mobile/tracking/api/Countly.java @@ -9,7 +9,6 @@ import android.os.IBinder; import android.text.TextUtils; import android.view.View; -import com.uodis.opendevice.aidl.OpenDeviceIdentifierService; import java.util.Timer; import java.util.TimerTask; @@ -23,6 +22,7 @@ import cn.com.mma.mobile.tracking.util.SharedPreferencedUtil; import cn.com.mma.mobile.tracking.util.klog.KLog; import cn.com.mma.mobile.tracking.viewability.origin.CallBack; import cn.com.mma.mobile.tracking.viewability.origin.ViewAbilityEventListener; +import cn.com.mmachina.oaid.OaidUtils; /** * MMAChinaSDK Android API 入口类 @@ -51,12 +51,12 @@ public class Countly { //[本地测试]控制广播的开关 public static boolean LOCAL_TEST = true; - public static boolean ISNEED_OAID = false; +// public static boolean ISNEED_OAID = false; public static String ACTION_STATS_EXPOSE = "ACTION_STATS_EXPOSE"; public static String ACTION_STATS_VIEWABILITY = "ACTION.STATS_VIEWABILITY"; public static String ACTION_STATS_SUCCESSED = "ACTION.STATS_SUCCESSED"; - public static String OAID = "unknow"; +// public static String OAID = "unknow"; private static Countly mInstance = null; @@ -122,13 +122,9 @@ public class Countly { //获取ADID; DeviceInfoUtil.getDeviceAdid(context,sdk); + //初始化时尝试获取oaid + OaidUtils.getOaid(context); - String modle = DeviceInfoUtil.getModel(); - - //判断设备的MODLE是否为华为 - if(modle.contains("HONOR")){ - getOAID(context); - } } catch (Exception e) { Logger.e("Countly init failed:" + e.getMessage()); @@ -161,59 +157,6 @@ public class Countly { } - - public String getOAID(Context context){ - - - Intent bindIntent = new Intent("com.uodis.opendevice.OPENIDS_SERVICE"); - - bindIntent.setPackage("com.huawei.hwid"); - - context.bindService(bindIntent, serviceConnection, Context.BIND_AUTO_CREATE); - -// System.out.println("启动服务"); - - return OAID; - - } - - ServiceConnection serviceConnection = new ServiceConnection() { - - @Override - public void onServiceConnected(ComponentName name, IBinder service) - - { -// System.out.println("建立AIDL服务链接"); - - OpenDeviceIdentifierService oaidService = OpenDeviceIdentifierService.Stub.asInterface(service); - - try { - - OAID = oaidService.getOaid(); - - boolean isTrackLimited = oaidService.isOaidTrackLimited(); - - ISNEED_OAID = true; - - - }catch (Exception e){ - - } - - } - - @Override - public void onServiceDisconnected(ComponentName name) { - -// System.out.println("断开AIDL服务链接"); - - } - - }; - - - - /** * 普通点击事件监测接口 * @param adURL 监测链接 diff --git a/MobileTracking/libmobiletracking/src/main/java/cn/com/mma/mobile/tracking/api/RecordEventMessage.java b/MobileTracking/libmobiletracking/src/main/java/cn/com/mma/mobile/tracking/api/RecordEventMessage.java index a9763789462cf384a74913663b7e6becdb9952a5..89e976b38eb2cd1ba1b6a1d253b401f2e2cfb1b4 100644 --- a/MobileTracking/libmobiletracking/src/main/java/cn/com/mma/mobile/tracking/api/RecordEventMessage.java +++ b/MobileTracking/libmobiletracking/src/main/java/cn/com/mma/mobile/tracking/api/RecordEventMessage.java @@ -20,6 +20,7 @@ import cn.com.mma.mobile.tracking.util.AntiConstantStats; import cn.com.mma.mobile.tracking.util.AppListUploader; import cn.com.mma.mobile.tracking.util.CommonUtil; import cn.com.mma.mobile.tracking.util.DeviceInfoUtil; +import cn.com.mma.mobile.tracking.util.LRU; import cn.com.mma.mobile.tracking.util.LocationCollector; import cn.com.mma.mobile.tracking.util.Logger; import cn.com.mma.mobile.tracking.util.Reflection; @@ -34,8 +35,8 @@ import cn.com.mma.mobile.tracking.viewability.origin.ViewAbilityStats; public class RecordEventMessage { private final Context context; private static RecordEventMessage mInstance; - public static HashMap RequestHashMap; - public static HashMap MonitorTypeHashMap; + public static LRU RequestHashMap; + public static LRU MonitorTypeHashMap; private RecordEventMessage(final Context context) { if (context == null) { @@ -49,8 +50,8 @@ public class RecordEventMessage { synchronized (RecordEventMessage.class) { if (mInstance == null) { mInstance = new RecordEventMessage(ctx); - RequestHashMap = new HashMap<>(); - MonitorTypeHashMap = new HashMap<>(); + RequestHashMap = new LRU<>(20); + MonitorTypeHashMap = new LRU<>(20); } } } diff --git a/MobileTracking/libmobiletracking/src/main/java/cn/com/mma/mobile/tracking/api/SendMessageThread.java b/MobileTracking/libmobiletracking/src/main/java/cn/com/mma/mobile/tracking/api/SendMessageThread.java index 5f6a92459e1300b4f4a0c48f0d5b3072420f981a..a80bbbe094dd6e83729caad038d0c2d7a99b357d 100644 --- a/MobileTracking/libmobiletracking/src/main/java/cn/com/mma/mobile/tracking/api/SendMessageThread.java +++ b/MobileTracking/libmobiletracking/src/main/java/cn/com/mma/mobile/tracking/api/SendMessageThread.java @@ -77,12 +77,16 @@ public class SendMessageThread extends Thread { if(callBack != null){ callBack.onFailed(monitorType.toString() + ":MMA_URL Failed To Send"); } + RecordEventMessage.RequestHashMap.remove(eventData); + RecordEventMessage.MonitorTypeHashMap.remove(eventData); return; } else { if(callBack != null){ callBack.onSuccess(monitorType.toString()); // Logger.i("事件类型:" + monitorType); } + RecordEventMessage.RequestHashMap.remove(eventData); + RecordEventMessage.MonitorTypeHashMap.remove(eventData); Logger.i("record [" + CommonUtil.md5(eventData) + "] upload succeed."); handleSuccessResult(spName, eventData); //[LOCALTEST] 测试计数:记录发送成功 diff --git a/MobileTracking/libmobiletracking/src/main/java/cn/com/mma/mobile/tracking/util/ConnectUtil.java b/MobileTracking/libmobiletracking/src/main/java/cn/com/mma/mobile/tracking/util/ConnectUtil.java index b8f6c23db2cc7b87e84ee3e985fc409ea294aeee..5f8ff804e3cd2f1a6b52d789812ae7cd6eeb7f64 100644 --- a/MobileTracking/libmobiletracking/src/main/java/cn/com/mma/mobile/tracking/util/ConnectUtil.java +++ b/MobileTracking/libmobiletracking/src/main/java/cn/com/mma/mobile/tracking/util/ConnectUtil.java @@ -1,5 +1,11 @@ package cn.com.mma.mobile.tracking.util; +import android.annotation.SuppressLint; +import android.content.Context; +import android.net.Uri; +import android.text.TextUtils; +import android.util.Log; + import java.io.BufferedOutputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -9,18 +15,11 @@ import java.net.CookieHandler; import java.net.CookieManager; import java.net.HttpURLConnection; import java.net.URL; -import java.security.KeyManagementException; -import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.security.cert.X509Certificate; import java.util.List; import java.util.Map; import java.util.zip.GZIPOutputStream; -import android.annotation.SuppressLint; -import android.content.Context; -import android.net.Uri; -import android.text.TextUtils; -import android.util.Log; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.HttpsURLConnection; @@ -36,23 +35,10 @@ public class ConnectUtil { private static final String ALLOWED_URI_CHARS = "@#&=*+-_.,:!?()/~'%"; private static final int CONNECT_TIMEOUT = 30 * 1000; private static final int READ_TIMEOUT = 30 * 1000; - private static ConnectUtil instance; - private ConnectUtil() { - try { - HttpsURLConnection.setDefaultHostnameVerifier(new NullHostNameVerifier()); - SSLContext sc = SSLContext.getInstance("TLS"); - sc.init(null, trustAllManager, new SecureRandom()); - HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); - - } catch (KeyManagementException e) { - e.printStackTrace(); - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } } public static ConnectUtil getInstance() { @@ -66,117 +52,112 @@ public class ConnectUtil { return instance; } -// public HttpURLConnection getHttpURLConnection(String url) { -// try { -// String encodedUrl = Uri.encode(url, ALLOWED_URI_CHARS); -// HttpURLConnection conn = (HttpURLConnection) new URL(encodedUrl).openConnection(); -// conn.setConnectTimeout(CONNECT_TIMEOUT); -// conn.setReadTimeout(READ_TIMEOUT); -// conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); -// conn.setRequestMethod("GET"); -// // not allow auto controll redirect,仅作用于当前URLConnection对象 -// conn.setInstanceFollowRedirects(false); -// return conn; -// } catch (Exception e) { -// } -// return null; -// } -// -// public String doRequest(String url) { -// String result = null; -// InputStream is = null; -// BufferedReader br = null; -// HttpURLConnection conn = null; -// try { -// conn = getHttpURLConnection(url); -// if (conn == null) { -// return null; -// } -// is = conn.getInputStream(); -// if (is == null) { -// return null; -// } -// br = new BufferedReader(new InputStreamReader(is, CHARSET)); -// String line; -// StringBuffer sb = new StringBuffer(); -// while ((line = br.readLine()) != null) { -// sb.append(line); -// } -// result = sb.toString(); -// } catch (Exception e) { -// } finally { -// try { -// if (is != null) -// is.close(); -// } catch (IOException e) { -// } -// try { -// if (br != null) -// br.close(); -// } catch (IOException e) { -// } -// if (conn != null) { -// conn = null; -// } -// } -// return result; -// } public byte[] performGet(String destURL) { - //Logger.d("Attempting Get to " + destURL + "\n"); + //判断请求类型 + if(destURL.startsWith("https:")){ + return performGetHttps(destURL); + }else { + //Logger.d("Attempting Get to " + destURL + "\n"); + byte[] response = null; + HttpURLConnection httpConnection = null; + InputStream is = null; + try { + String encodedUrl = Uri.encode(destURL, ALLOWED_URI_CHARS); + URL url = new URL(encodedUrl); + httpConnection = (HttpURLConnection) url.openConnection(); + + httpConnection.setConnectTimeout(CONNECT_TIMEOUT); + httpConnection.setReadTimeout(READ_TIMEOUT); + httpConnection.setRequestMethod("GET"); + httpConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); + + int statusCode = httpConnection.getResponseCode(); + if (statusCode == HttpURLConnection.HTTP_OK || statusCode == HttpURLConnection.HTTP_MOVED_PERM || statusCode == HttpURLConnection.HTTP_MOVED_TEMP) { + + try { + is = httpConnection.getInputStream(); + response = writeToArr(is); + } catch (Exception e) { + response = new byte[]{}; + } + + //redirect + String redirectURL = httpConnection.getHeaderField("Location"); + + if (!TextUtils.isEmpty(redirectURL)) { + httpConnection = (HttpURLConnection) new URL(redirectURL).openConnection(); + statusCode = httpConnection.getResponseCode(); +// Logger.d("redirect statusCode::" + statusCode); + } + } + } catch (Exception e) { +// System.out.println("upload监测链接异常:" + e.toString()); + } finally { + if (null != is) + try { + is.close(); + } catch (final IOException e) { + } + if (null != httpConnection) + + httpConnection.disconnect(); + } + + return response; + } + } + + public byte[] performGetHttps(String destURL) { +// Logger.d("Attempting Get to " + destURL + "\n"); byte[] response = null; - HttpURLConnection httpConnection = null; + HttpsURLConnection httpsConnection = null; + HttpsURLConnection redirecthttpsConnection = null; InputStream is = null; - try { String encodedUrl = Uri.encode(destURL, ALLOWED_URI_CHARS); - URL url = new URL(encodedUrl); - - httpConnection = (HttpURLConnection) url.openConnection(); - - httpConnection.setConnectTimeout(CONNECT_TIMEOUT); - httpConnection.setReadTimeout(READ_TIMEOUT); - httpConnection.setRequestMethod("GET"); - httpConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); - - int statusCode = httpConnection.getResponseCode(); - - - + //设置校验 + SSLContext sc = SSLContext.getInstance("TLS"); + sc.init(null, trustAllManager, new SecureRandom()); + httpsConnection = (HttpsURLConnection) url.openConnection(); + httpsConnection.setHostnameVerifier(new NullHostNameVerifier()); + httpsConnection.setSSLSocketFactory(sc.getSocketFactory()); + httpsConnection.setConnectTimeout(CONNECT_TIMEOUT); + httpsConnection.setReadTimeout(READ_TIMEOUT); + httpsConnection.setRequestMethod("GET"); + httpsConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); + int statusCode = httpsConnection.getResponseCode(); if (statusCode == HttpURLConnection.HTTP_OK || statusCode == HttpURLConnection.HTTP_MOVED_PERM || statusCode == HttpURLConnection.HTTP_MOVED_TEMP) { try { - is = httpConnection.getInputStream(); + is = httpsConnection.getInputStream(); response = writeToArr(is); } catch (Exception e) { response = new byte[]{}; } - //redirect - String redirectURL = httpConnection.getHeaderField("Location"); + String redirectURL = httpsConnection.getHeaderField("Location"); if (!TextUtils.isEmpty(redirectURL)) { - //SDK访问o后面的落地页,并不能真正的打开具体页面,跳转的具体动作媒体自己完成 - httpConnection = (HttpURLConnection) new URL(redirectURL).openConnection(); - statusCode = httpConnection.getResponseCode(); - - //Logger.d("redirect statusCode::" + statusCode); + SSLContext redirectsc = SSLContext.getInstance("TLS"); + redirectsc.init(null, trustAllManager, new SecureRandom()); + redirecthttpsConnection = (HttpsURLConnection) new URL(redirectURL).openConnection(); + redirecthttpsConnection.setSSLSocketFactory(redirectsc.getSocketFactory()); + statusCode = redirecthttpsConnection.getResponseCode(); +// Logger.d("redirect statusCode::" + statusCode); } } } catch (Exception e) { - -// System.out.println("upload监测链接异常:" + e.toString()); - - + Logger.i("upload error: " + e.toString()); } finally { if (null != is) try { is.close(); } catch (final IOException e) { } - if (null != httpConnection) - - httpConnection.disconnect(); + if (null != httpsConnection) + + httpsConnection.disconnect(); } return response; @@ -221,8 +202,6 @@ public class ConnectUtil { } int statusCode = httpConnection.getResponseCode(); - - if (statusCode == HttpURLConnection.HTTP_OK) { // 使用普通流读取 is = httpConnection.getInputStream(); @@ -328,6 +307,7 @@ public class ConnectUtil { int code =urlConn.getResponseCode(); + Log.d("lincoln","请求code"+code); //获取所有Header Map> map = urlConn.getHeaderFields(); List cookies = map.get("Set-Cookie"); @@ -406,7 +386,6 @@ public class ConnectUtil { if(a!= null && a.contains("a=")){ value = a.split(";")[0]; value = value.split("=")[1]; - request.completed(value); } } diff --git a/MobileTracking/libmobiletracking/src/main/java/cn/com/mma/mobile/tracking/util/DeviceInfoUtil.java b/MobileTracking/libmobiletracking/src/main/java/cn/com/mma/mobile/tracking/util/DeviceInfoUtil.java index ebf930c6919abd08b946324453465c0e0cee6457..f7034c746886b0970b92e8f7a6ecddbf4f0044e6 100755 --- a/MobileTracking/libmobiletracking/src/main/java/cn/com/mma/mobile/tracking/util/DeviceInfoUtil.java +++ b/MobileTracking/libmobiletracking/src/main/java/cn/com/mma/mobile/tracking/util/DeviceInfoUtil.java @@ -43,13 +43,13 @@ import android.text.TextUtils; import android.util.DisplayMetrics; import android.view.WindowManager; -import com.uodis.opendevice.aidl.OpenDeviceIdentifierService; import org.json.JSONArray; import cn.com.mma.mobile.tracking.api.Constant; import cn.com.mma.mobile.tracking.api.Countly; import cn.com.mma.mobile.tracking.bean.Company; import cn.com.mma.mobile.tracking.bean.SDK; +import cn.com.mmachina.oaid.OaidUtils; import static cn.com.mma.mobile.tracking.util.Reflection.checkPermission; import static cn.com.mma.mobile.tracking.util.Reflection.checkPermissionX; @@ -591,12 +591,15 @@ public class DeviceInfoUtil { deviceInfoParams.put(Constant.TRACKING_WIFI, isWifi(context)); //新增ADID判断 deviceInfoParams.put(Constant.TRACKING_ADID,DeviceInfoUtil.ADID); - if(Countly.ISNEED_OAID){ -// System.out.println("OAID:" + Countly.OAID); - deviceInfoParams.put(Constant.TRACKING_OAID, Countly.OAID); - }else { - deviceInfoParams.put(Constant.TRACKING_OAID, "unknow"); - } + + deviceInfoParams.put(Constant.TRACKING_OAID, OaidUtils.getOaid(context)); + +// if(Countly.ISNEED_OAID){ +//// System.out.println("OAID:" + Countly.OAID); +// deviceInfoParams.put(Constant.TRACKING_OAID, Countly.OAID); +// }else { +// deviceInfoParams.put(Constant.TRACKING_OAID, "unknow"); +// } // DeviceInfoUtil deviceInfoUtil = new DeviceInfoUtil(); // @@ -625,7 +628,6 @@ public class DeviceInfoUtil { /** * 获取APP已经安装的应用列表信息 - * * @param context * @return */ diff --git a/MobileTracking/libmobiletracking/src/main/java/cn/com/mma/mobile/tracking/util/LRU.java b/MobileTracking/libmobiletracking/src/main/java/cn/com/mma/mobile/tracking/util/LRU.java new file mode 100644 index 0000000000000000000000000000000000000000..794482dd36f57ac39e411d9e89e8f084c6003a05 --- /dev/null +++ b/MobileTracking/libmobiletracking/src/main/java/cn/com/mma/mobile/tracking/util/LRU.java @@ -0,0 +1,58 @@ +package cn.com.mma.mobile.tracking.util; + +/** + * Author:zhangqian + * Time:2020/10/14 + * Version: + * Description:MobileTracking + */ +import java.util.LinkedHashMap; + +public class LRU { + + private LinkedHashMap map; + private int cacheSize; + + public LRU(final int cacheSize) + { + this.cacheSize = cacheSize; + map = new LinkedHashMap(16,0.75F,true){ + @Override + protected boolean removeEldestEntry(Entry eldest) { + if(cacheSize + 1 == map.size()){ + return true; + }else{ + return false; + } + } + }; + } + public synchronized V get(K key) { + return map.get(key); + } + public synchronized void put(K key,V value) { + map.put(key, value); + } + public synchronized void clear() { + map.clear(); + } + public synchronized V remove(K key) { + return map.remove(key); + } + public synchronized int usedSize() { + return map.size(); + } + +// public void print() { +// for (Map.Entry entry : map.entrySet()) { +// System.out.print(entry.getValue() + "--"); +// } +// System.out.println(); +// } + + + } + + + + diff --git a/OutputRelease/mmachina_sdk.jar b/OutputRelease/mmachina_sdk.jar index c57734930c15502507650db78e921914e9868e74..e052e96e8b3eb34def712b98b291a6c49e15659f 100644 Binary files a/OutputRelease/mmachina_sdk.jar and b/OutputRelease/mmachina_sdk.jar differ