├── settings.gradle
├── app
├── .gitignore
├── src
│ └── main
│ │ ├── res
│ │ ├── values
│ │ │ ├── strings.xml
│ │ │ ├── colors.xml
│ │ │ └── styles.xml
│ │ ├── mipmap-hdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── ic_launcher_round.png
│ │ ├── mipmap-mdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── ic_launcher_round.png
│ │ ├── mipmap-xhdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── ic_launcher_round.png
│ │ ├── mipmap-xxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── ic_launcher_round.png
│ │ ├── mipmap-xxxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── ic_launcher_round.png
│ │ └── layout
│ │ │ └── activity_main.xml
│ │ ├── libs
│ │ └── armeabi-v7a
│ │ │ └── libdu.so
│ │ ├── java
│ │ ├── cn
│ │ │ └── shuzilm
│ │ │ │ └── core
│ │ │ │ ├── Listener.java
│ │ │ │ ├── c.java
│ │ │ │ ├── b.java
│ │ │ │ ├── d.java
│ │ │ │ └── Main.java
│ │ └── com
│ │ │ └── github
│ │ │ └── gavinme
│ │ │ └── smid
│ │ │ ├── MyApplication.java
│ │ │ └── MainActivity.java
│ │ └── AndroidManifest.xml
├── gradle
│ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
├── proguard-rules.pro
├── build.gradle
├── gradlew.bat
└── gradlew
├── .gitignore
├── smid_get_project.apk
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── README.md
├── gradlew.bat
└── gradlew
/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
2 |
--------------------------------------------------------------------------------
/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 | *.iml
3 | /.idea
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 | *.iml
3 | local.properties
4 | /.idea
5 | /.gradle
--------------------------------------------------------------------------------
/smid_get_project.apk:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Gavinme/smid_project/HEAD/smid_get_project.apk
--------------------------------------------------------------------------------
/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | 数盟ID
3 |
4 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Gavinme/smid_project/HEAD/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/app/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Gavinme/smid_project/HEAD/app/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/app/src/main/libs/armeabi-v7a/libdu.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Gavinme/smid_project/HEAD/app/src/main/libs/armeabi-v7a/libdu.so
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Gavinme/smid_project/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Gavinme/smid_project/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Gavinme/smid_project/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Gavinme/smid_project/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/java/cn/shuzilm/core/Listener.java:
--------------------------------------------------------------------------------
1 | package cn.shuzilm.core;
2 |
3 | public interface Listener {
4 | void handler(String str);
5 | }
6 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Gavinme/smid_project/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Gavinme/smid_project/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Gavinme/smid_project/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Gavinme/smid_project/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Gavinme/smid_project/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Gavinme/smid_project/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #3F51B5
4 | #303F9F
5 | #FF4081
6 |
7 |
--------------------------------------------------------------------------------
/app/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Thu Aug 23 15:28:46 CST 2018
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip
7 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Thu Aug 23 15:30:23 CST 2018
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip
7 |
--------------------------------------------------------------------------------
/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/gavinme/smid/MyApplication.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2017 Baidu, Inc. All Rights Reserved.
3 | */
4 | package com.github.gavinme.smid;
5 |
6 | import android.app.Application;
7 | import android.content.Context;
8 | import cn.shuzilm.core.Main;
9 |
10 | /**{@link Main#init(Context)}
11 | * Created by GanQuan on 2017/10/12.
12 | */
13 |
14 | public class MyApplication extends Application {
15 |
16 | @Override
17 | public void onCreate() {
18 | super.onCreate();
19 | Main.init(this);
20 | }
21 |
22 | }
23 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/gavinme/smid/MainActivity.java:
--------------------------------------------------------------------------------
1 | package com.github.gavinme.smid;
2 |
3 | import android.app.Activity;
4 | import android.os.Bundle;
5 | import android.util.Log;
6 | import android.widget.TextView;
7 | import cn.shuzilm.core.Main;
8 |
9 | public class MainActivity extends Activity {
10 | TextView tv_smid;
11 |
12 | @Override
13 | protected void onCreate(Bundle savedInstanceState) {
14 | super.onCreate(savedInstanceState);
15 | setContentView(R.layout.activity_main);
16 | tv_smid = findViewById(R.id.tv_smid);
17 | tv_smid.setText(Main.getQueryID(this));
18 | }
19 |
20 | }
21 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/shuzilm/core/c.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2018 Baidu, Inc. All Rights Reserved.
3 | */
4 | package cn.shuzilm.core;
5 |
6 | import android.content.Context;
7 |
8 | class c implements Runnable {
9 | final /* synthetic */ Main a;
10 | private final /* synthetic */ Context b;
11 | private final /* synthetic */ String c;
12 | private final /* synthetic */ String d;
13 | private final /* synthetic */ Listener e;
14 |
15 | c(Main main, Context context, String str, String str2, Listener listener) {
16 | this.a = main;
17 | this.b = context;
18 | this.c = str;
19 | this.d = str2;
20 | this.e = listener;
21 | }
22 | @Override
23 | public void run() {
24 | try {
25 | String a = Main.instance.setCfgFromAssets(this.b, this.c, this.d);
26 | if (this.e != null) {
27 | this.e.handler(a);
28 | }
29 | } catch (Exception e) {
30 | e.printStackTrace();
31 | }
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # By default, the flags in this file are appended to flags specified
3 | # in /Users/Quan/Downloads/andoird_sdk/sdk/tools/proguard/proguard-android.txt
4 | # You can edit the include path and order by changing the proguardFiles
5 | # directive in build.gradle.
6 | #
7 | # For more details, see
8 | # http://developer.android.com/guide/developing/tools/proguard.html
9 |
10 | # Add any project specific keep options here:
11 |
12 | # If your project uses WebView with JS, uncomment the following
13 | # and specify the fully qualified class name to the JavaScript interface
14 | # class:
15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16 | # public *;
17 | #}
18 |
19 | # Uncomment this to preserve the line number information for
20 | # debugging stack traces.
21 | #-keepattributes SourceFile,LineNumberTable
22 |
23 | # If you keep the line number information, uncomment this to
24 | # hide the original source file name.
25 | #-renamesourcefileattribute SourceFile
26 |
--------------------------------------------------------------------------------
/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
4 |
6 |
7 |
8 |
9 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_main.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
12 |
13 |
18 |
19 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # smid_project
2 | 该项目是『数盟可信id的获取』的样本。由于商业合作才可以拿到,一般在市面上鲜于见到。该样本出自一家接入过数盟解决方案的第三方公司APP,通过逆向的技术拿到了样本。
3 |
4 | 由于key是app唯一的,每次初始化请求会记一次,所以请手下留情!
5 |
6 | ### 关于数盟
7 | 官网传送门:https://www.shuzilm.cn
8 |
9 | ### 关于数盟ID
10 | 『数盟ID』:可信ID技术由数字联盟自主研发,用于准确描述移动设备,每个编码对象获得一个唯一的、不变的标识ID。可信ID能帮助APP公司在不同场景下确认设备唯一性,识别修改设备及复用、虚拟机刷量等行为,可以反作弊、防刷单,并通过数字联盟生成的设备ID和客户账户体系的关联,实时有效识别小号恶意注册等行为,并精确识别历史版本用户、弱账户APP的换机状态等。
11 |
12 | 可信ID不随任何非硬件信息变化而更改,是真正唯一、真实、安全、高可用的移动设备指纹。
13 | ### 说明
14 | 经调研,发现该id并不依赖于传统的设备ID,如imei、mac地址、android_id等。在xpose劫持的情况修改,imei等参数并不会导致该ID修改。C方法拦截未测试。
15 |
16 | 在app第一次启动会初始化ID,并上传至数盟服务器(api.shuzilm.cn)。因为考虑到计费统计,所以可信ID的获取至少需要网络访问的权限。
17 |
18 |
19 | ``` ```
20 |
21 |
22 | 
23 |
24 |
25 |
26 | 可信ID的获取过程:
27 |
28 | - 程序启动后在主进程中初始化SDK
29 | - 注册传感器监听
30 | - 获取网络权限成功后,尝试获取并散列88位可信ID
31 | - 在sp中缓存以便下次进来使用
32 | - 推送ID和相关信息至服务端接口api.shuzilm.cn
33 |
34 | 程序只有在第一次启动才会执行计算ID和计费的操作。
35 |
36 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/shuzilm/core/b.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2018 Baidu, Inc. All Rights Reserved.
3 | */
4 | package cn.shuzilm.core;
5 |
6 | import android.content.Context;
7 |
8 | class b implements Runnable {
9 | final /* synthetic */ Main a;
10 | private final /* synthetic */ Context b;
11 | private final /* synthetic */ String c;
12 | private final /* synthetic */ String d;
13 | private final /* synthetic */ String e;
14 | private final /* synthetic */ Listener f;
15 |
16 | b(Main main, Context context, String str, String str2, String str3, Listener listener) {
17 | this.a = main;
18 | this.b = context;
19 | this.c = str;
20 | this.d = str2;
21 | this.e = str3;
22 | this.f = listener;
23 | }
24 | @Override
25 | public void run() {
26 | try {
27 | String a = Main.instance.a(this.b, this.c, this.d, this.e);
28 | if (this.f != null) {
29 | this.f.handler(a);
30 | }
31 | } catch (Exception e) {
32 | e.printStackTrace();
33 | }
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/shuzilm/core/d.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2018 Baidu, Inc. All Rights Reserved.
3 | */
4 | package cn.shuzilm.core;
5 |
6 | import android.content.Context;
7 | import android.hardware.Sensor;
8 | import android.hardware.SensorEvent;
9 | import android.hardware.SensorEventListener;
10 | import android.hardware.SensorManager;
11 |
12 | class d implements SensorEventListener {
13 | final /* synthetic */ Main a;
14 | private final /* synthetic */ Context b;
15 | private final /* synthetic */ SensorManager c;
16 |
17 | d(Main main, Context context, SensorManager sensorManager) {
18 | this.a = main;
19 | this.b = context;
20 | this.c = sensorManager;
21 | }
22 |
23 | @Override
24 | public void onAccuracyChanged(Sensor sensor, int i) {
25 | }
26 |
27 | @Override
28 | public void onSensorChanged(SensorEvent sensorEvent) {
29 | try {
30 | Main.onSensorChanged(this.b, sensorEvent);
31 | } catch (UnsatisfiedLinkError e) {
32 | e.printStackTrace();
33 | }
34 | this.c.unregisterListener(this);
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/app/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.application'
2 |
3 | android {
4 | compileSdkVersion 27
5 | buildToolsVersion '26.0.2'
6 | defaultConfig {
7 | applicationId "com.github.gavin.smid"
8 | minSdkVersion 14
9 | targetSdkVersion 27
10 | versionCode 1
11 | versionName "1.0"
12 | ndk {
13 | abiFilters "armeabi-v7a"
14 | }
15 | }
16 |
17 | buildTypes {
18 | debug {
19 | minifyEnabled false
20 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
21 | }
22 |
23 | }
24 | sourceSets {
25 | main {
26 | jni.srcDirs = []
27 | jniLibs.srcDirs = ['src/main/libs']
28 | }
29 |
30 | }
31 |
32 |
33 | }
34 |
35 | dependencies {
36 | compile fileTree(include: ['*.jar'], dir: 'libs')
37 | androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
38 | exclude group: 'com.android.support', module: 'support-annotations'
39 | })
40 | implementation 'com.android.support:appcompat-v7:27.1.1'
41 | implementation 'com.android.support.constraint:constraint-layout:2.0.0-alpha2'
42 | testCompile 'junit:junit:4.12'
43 | }
44 |
--------------------------------------------------------------------------------
/gradlew.bat:
--------------------------------------------------------------------------------
1 | @if "%DEBUG%" == "" @echo off
2 | @rem ##########################################################################
3 | @rem
4 | @rem Gradle startup script for Windows
5 | @rem
6 | @rem ##########################################################################
7 |
8 | @rem Set local scope for the variables with windows NT shell
9 | if "%OS%"=="Windows_NT" setlocal
10 |
11 | set DIRNAME=%~dp0
12 | if "%DIRNAME%" == "" set DIRNAME=.
13 | set APP_BASE_NAME=%~n0
14 | set APP_HOME=%DIRNAME%
15 |
16 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
17 | set DEFAULT_JVM_OPTS=
18 |
19 | @rem Find java.exe
20 | if defined JAVA_HOME goto findJavaFromJavaHome
21 |
22 | set JAVA_EXE=java.exe
23 | %JAVA_EXE% -version >NUL 2>&1
24 | if "%ERRORLEVEL%" == "0" goto init
25 |
26 | echo.
27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
28 | echo.
29 | echo Please set the JAVA_HOME variable in your environment to match the
30 | echo location of your Java installation.
31 |
32 | goto fail
33 |
34 | :findJavaFromJavaHome
35 | set JAVA_HOME=%JAVA_HOME:"=%
36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
37 |
38 | if exist "%JAVA_EXE%" goto init
39 |
40 | echo.
41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
42 | echo.
43 | echo Please set the JAVA_HOME variable in your environment to match the
44 | echo location of your Java installation.
45 |
46 | goto fail
47 |
48 | :init
49 | @rem Get command-line arguments, handling Windows variants
50 |
51 | if not "%OS%" == "Windows_NT" goto win9xME_args
52 |
53 | :win9xME_args
54 | @rem Slurp the command line arguments.
55 | set CMD_LINE_ARGS=
56 | set _SKIP=2
57 |
58 | :win9xME_args_slurp
59 | if "x%~1" == "x" goto execute
60 |
61 | set CMD_LINE_ARGS=%*
62 |
63 | :execute
64 | @rem Setup the command line
65 |
66 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
67 |
68 | @rem Execute Gradle
69 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
70 |
71 | :end
72 | @rem End local scope for the variables with windows NT shell
73 | if "%ERRORLEVEL%"=="0" goto mainEnd
74 |
75 | :fail
76 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
77 | rem the _cmd.exe /c_ return code!
78 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
79 | exit /b 1
80 |
81 | :mainEnd
82 | if "%OS%"=="Windows_NT" endlocal
83 |
84 | :omega
85 |
--------------------------------------------------------------------------------
/app/gradlew.bat:
--------------------------------------------------------------------------------
1 | @if "%DEBUG%" == "" @echo off
2 | @rem ##########################################################################
3 | @rem
4 | @rem Gradle startup script for Windows
5 | @rem
6 | @rem ##########################################################################
7 |
8 | @rem Set local scope for the variables with windows NT shell
9 | if "%OS%"=="Windows_NT" setlocal
10 |
11 | set DIRNAME=%~dp0
12 | if "%DIRNAME%" == "" set DIRNAME=.
13 | set APP_BASE_NAME=%~n0
14 | set APP_HOME=%DIRNAME%
15 |
16 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
17 | set DEFAULT_JVM_OPTS=
18 |
19 | @rem Find java.exe
20 | if defined JAVA_HOME goto findJavaFromJavaHome
21 |
22 | set JAVA_EXE=java.exe
23 | %JAVA_EXE% -version >NUL 2>&1
24 | if "%ERRORLEVEL%" == "0" goto init
25 |
26 | echo.
27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
28 | echo.
29 | echo Please set the JAVA_HOME variable in your environment to match the
30 | echo location of your Java installation.
31 |
32 | goto fail
33 |
34 | :findJavaFromJavaHome
35 | set JAVA_HOME=%JAVA_HOME:"=%
36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
37 |
38 | if exist "%JAVA_EXE%" goto init
39 |
40 | echo.
41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
42 | echo.
43 | echo Please set the JAVA_HOME variable in your environment to match the
44 | echo location of your Java installation.
45 |
46 | goto fail
47 |
48 | :init
49 | @rem Get command-line arguments, handling Windows variants
50 |
51 | if not "%OS%" == "Windows_NT" goto win9xME_args
52 |
53 | :win9xME_args
54 | @rem Slurp the command line arguments.
55 | set CMD_LINE_ARGS=
56 | set _SKIP=2
57 |
58 | :win9xME_args_slurp
59 | if "x%~1" == "x" goto execute
60 |
61 | set CMD_LINE_ARGS=%*
62 |
63 | :execute
64 | @rem Setup the command line
65 |
66 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
67 |
68 | @rem Execute Gradle
69 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
70 |
71 | :end
72 | @rem End local scope for the variables with windows NT shell
73 | if "%ERRORLEVEL%"=="0" goto mainEnd
74 |
75 | :fail
76 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
77 | rem the _cmd.exe /c_ return code!
78 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
79 | exit /b 1
80 |
81 | :mainEnd
82 | if "%OS%"=="Windows_NT" endlocal
83 |
84 | :omega
85 |
--------------------------------------------------------------------------------
/gradlew:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env sh
2 |
3 | ##############################################################################
4 | ##
5 | ## Gradle start up script for UN*X
6 | ##
7 | ##############################################################################
8 |
9 | # Attempt to set APP_HOME
10 | # Resolve links: $0 may be a link
11 | PRG="$0"
12 | # Need this for relative symlinks.
13 | while [ -h "$PRG" ] ; do
14 | ls=`ls -ld "$PRG"`
15 | link=`expr "$ls" : '.*-> \(.*\)$'`
16 | if expr "$link" : '/.*' > /dev/null; then
17 | PRG="$link"
18 | else
19 | PRG=`dirname "$PRG"`"/$link"
20 | fi
21 | done
22 | SAVED="`pwd`"
23 | cd "`dirname \"$PRG\"`/" >/dev/null
24 | APP_HOME="`pwd -P`"
25 | cd "$SAVED" >/dev/null
26 |
27 | APP_NAME="Gradle"
28 | APP_BASE_NAME=`basename "$0"`
29 |
30 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
31 | DEFAULT_JVM_OPTS=""
32 |
33 | # Use the maximum available, or set MAX_FD != -1 to use that value.
34 | MAX_FD="maximum"
35 |
36 | warn () {
37 | echo "$*"
38 | }
39 |
40 | die () {
41 | echo
42 | echo "$*"
43 | echo
44 | exit 1
45 | }
46 |
47 | # OS specific support (must be 'true' or 'false').
48 | cygwin=false
49 | msys=false
50 | darwin=false
51 | nonstop=false
52 | case "`uname`" in
53 | CYGWIN* )
54 | cygwin=true
55 | ;;
56 | Darwin* )
57 | darwin=true
58 | ;;
59 | MINGW* )
60 | msys=true
61 | ;;
62 | NONSTOP* )
63 | nonstop=true
64 | ;;
65 | esac
66 |
67 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
68 |
69 | # Determine the Java command to use to start the JVM.
70 | if [ -n "$JAVA_HOME" ] ; then
71 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
72 | # IBM's JDK on AIX uses strange locations for the executables
73 | JAVACMD="$JAVA_HOME/jre/sh/java"
74 | else
75 | JAVACMD="$JAVA_HOME/bin/java"
76 | fi
77 | if [ ! -x "$JAVACMD" ] ; then
78 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
79 |
80 | Please set the JAVA_HOME variable in your environment to match the
81 | location of your Java installation."
82 | fi
83 | else
84 | JAVACMD="java"
85 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
86 |
87 | Please set the JAVA_HOME variable in your environment to match the
88 | location of your Java installation."
89 | fi
90 |
91 | # Increase the maximum file descriptors if we can.
92 | if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
93 | MAX_FD_LIMIT=`ulimit -H -n`
94 | if [ $? -eq 0 ] ; then
95 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
96 | MAX_FD="$MAX_FD_LIMIT"
97 | fi
98 | ulimit -n $MAX_FD
99 | if [ $? -ne 0 ] ; then
100 | warn "Could not set maximum file descriptor limit: $MAX_FD"
101 | fi
102 | else
103 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
104 | fi
105 | fi
106 |
107 | # For Darwin, add options to specify how the application appears in the dock
108 | if $darwin; then
109 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
110 | fi
111 |
112 | # For Cygwin, switch paths to Windows format before running java
113 | if $cygwin ; then
114 | APP_HOME=`cygpath --path --mixed "$APP_HOME"`
115 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
116 | JAVACMD=`cygpath --unix "$JAVACMD"`
117 |
118 | # We build the pattern for arguments to be converted via cygpath
119 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
120 | SEP=""
121 | for dir in $ROOTDIRSRAW ; do
122 | ROOTDIRS="$ROOTDIRS$SEP$dir"
123 | SEP="|"
124 | done
125 | OURCYGPATTERN="(^($ROOTDIRS))"
126 | # Add a user-defined pattern to the cygpath arguments
127 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then
128 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
129 | fi
130 | # Now convert the arguments - kludge to limit ourselves to /bin/sh
131 | i=0
132 | for arg in "$@" ; do
133 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
134 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
135 |
136 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
137 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
138 | else
139 | eval `echo args$i`="\"$arg\""
140 | fi
141 | i=$((i+1))
142 | done
143 | case $i in
144 | (0) set -- ;;
145 | (1) set -- "$args0" ;;
146 | (2) set -- "$args0" "$args1" ;;
147 | (3) set -- "$args0" "$args1" "$args2" ;;
148 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
149 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
150 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
151 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
152 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
153 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
154 | esac
155 | fi
156 |
157 | # Escape application args
158 | save () {
159 | for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
160 | echo " "
161 | }
162 | APP_ARGS=$(save "$@")
163 |
164 | # Collect all arguments for the java command, following the shell quoting and substitution rules
165 | eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
166 |
167 | # by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
168 | if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
169 | cd "$(dirname "$0")"
170 | fi
171 |
172 | exec "$JAVACMD" "$@"
173 |
--------------------------------------------------------------------------------
/app/gradlew:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env sh
2 |
3 | ##############################################################################
4 | ##
5 | ## Gradle start up script for UN*X
6 | ##
7 | ##############################################################################
8 |
9 | # Attempt to set APP_HOME
10 | # Resolve links: $0 may be a link
11 | PRG="$0"
12 | # Need this for relative symlinks.
13 | while [ -h "$PRG" ] ; do
14 | ls=`ls -ld "$PRG"`
15 | link=`expr "$ls" : '.*-> \(.*\)$'`
16 | if expr "$link" : '/.*' > /dev/null; then
17 | PRG="$link"
18 | else
19 | PRG=`dirname "$PRG"`"/$link"
20 | fi
21 | done
22 | SAVED="`pwd`"
23 | cd "`dirname \"$PRG\"`/" >/dev/null
24 | APP_HOME="`pwd -P`"
25 | cd "$SAVED" >/dev/null
26 |
27 | APP_NAME="Gradle"
28 | APP_BASE_NAME=`basename "$0"`
29 |
30 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
31 | DEFAULT_JVM_OPTS=""
32 |
33 | # Use the maximum available, or set MAX_FD != -1 to use that value.
34 | MAX_FD="maximum"
35 |
36 | warn () {
37 | echo "$*"
38 | }
39 |
40 | die () {
41 | echo
42 | echo "$*"
43 | echo
44 | exit 1
45 | }
46 |
47 | # OS specific support (must be 'true' or 'false').
48 | cygwin=false
49 | msys=false
50 | darwin=false
51 | nonstop=false
52 | case "`uname`" in
53 | CYGWIN* )
54 | cygwin=true
55 | ;;
56 | Darwin* )
57 | darwin=true
58 | ;;
59 | MINGW* )
60 | msys=true
61 | ;;
62 | NONSTOP* )
63 | nonstop=true
64 | ;;
65 | esac
66 |
67 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
68 |
69 | # Determine the Java command to use to start the JVM.
70 | if [ -n "$JAVA_HOME" ] ; then
71 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
72 | # IBM's JDK on AIX uses strange locations for the executables
73 | JAVACMD="$JAVA_HOME/jre/sh/java"
74 | else
75 | JAVACMD="$JAVA_HOME/bin/java"
76 | fi
77 | if [ ! -x "$JAVACMD" ] ; then
78 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
79 |
80 | Please set the JAVA_HOME variable in your environment to match the
81 | location of your Java installation."
82 | fi
83 | else
84 | JAVACMD="java"
85 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
86 |
87 | Please set the JAVA_HOME variable in your environment to match the
88 | location of your Java installation."
89 | fi
90 |
91 | # Increase the maximum file descriptors if we can.
92 | if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
93 | MAX_FD_LIMIT=`ulimit -H -n`
94 | if [ $? -eq 0 ] ; then
95 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
96 | MAX_FD="$MAX_FD_LIMIT"
97 | fi
98 | ulimit -n $MAX_FD
99 | if [ $? -ne 0 ] ; then
100 | warn "Could not set maximum file descriptor limit: $MAX_FD"
101 | fi
102 | else
103 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
104 | fi
105 | fi
106 |
107 | # For Darwin, add options to specify how the application appears in the dock
108 | if $darwin; then
109 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
110 | fi
111 |
112 | # For Cygwin, switch paths to Windows format before running java
113 | if $cygwin ; then
114 | APP_HOME=`cygpath --path --mixed "$APP_HOME"`
115 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
116 | JAVACMD=`cygpath --unix "$JAVACMD"`
117 |
118 | # We build the pattern for arguments to be converted via cygpath
119 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
120 | SEP=""
121 | for dir in $ROOTDIRSRAW ; do
122 | ROOTDIRS="$ROOTDIRS$SEP$dir"
123 | SEP="|"
124 | done
125 | OURCYGPATTERN="(^($ROOTDIRS))"
126 | # Add a user-defined pattern to the cygpath arguments
127 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then
128 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
129 | fi
130 | # Now convert the arguments - kludge to limit ourselves to /bin/sh
131 | i=0
132 | for arg in "$@" ; do
133 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
134 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
135 |
136 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
137 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
138 | else
139 | eval `echo args$i`="\"$arg\""
140 | fi
141 | i=$((i+1))
142 | done
143 | case $i in
144 | (0) set -- ;;
145 | (1) set -- "$args0" ;;
146 | (2) set -- "$args0" "$args1" ;;
147 | (3) set -- "$args0" "$args1" "$args2" ;;
148 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
149 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
150 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
151 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
152 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
153 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
154 | esac
155 | fi
156 |
157 | # Escape application args
158 | save () {
159 | for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
160 | echo " "
161 | }
162 | APP_ARGS=$(save "$@")
163 |
164 | # Collect all arguments for the java command, following the shell quoting and substitution rules
165 | eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
166 |
167 | # by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
168 | if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
169 | cd "$(dirname "$0")"
170 | fi
171 |
172 | exec "$JAVACMD" "$@"
173 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/shuzilm/core/Main.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2018 Baidu, Inc. All Rights Reserved.
3 | */
4 | package cn.shuzilm.core;
5 |
6 | import java.io.BufferedReader;
7 | import java.io.IOException;
8 | import java.io.InputStream;
9 | import java.io.InputStreamReader;
10 | import java.util.HashMap;
11 | import java.util.Iterator;
12 | import java.util.Map;
13 | import java.util.concurrent.ExecutorService;
14 | import java.util.concurrent.Executors;
15 | import java.util.concurrent.locks.Lock;
16 | import java.util.concurrent.locks.ReentrantLock;
17 | import java.util.concurrent.locks.ReentrantReadWriteLock;
18 |
19 | import org.json.JSONException;
20 | import org.json.JSONObject;
21 |
22 | import android.content.Context;
23 | import android.content.SharedPreferences;
24 | import android.content.pm.PackageManager;
25 | import android.hardware.Sensor;
26 | import android.hardware.SensorEvent;
27 | import android.hardware.SensorManager;
28 | import android.net.ConnectivityManager;
29 | import android.net.NetworkInfo;
30 | import android.net.NetworkInfo.State;
31 | import android.telephony.PhoneStateListener;
32 | import android.telephony.SignalStrength;
33 | import android.telephony.TelephonyManager;
34 |
35 | public class Main extends PhoneStateListener {
36 | private static final String soLib = "du";
37 | protected static final Main instance = new Main();
38 | private static final Lock LOCK = new ReentrantLock();
39 | private static final ReentrantReadWriteLock e = new ReentrantReadWriteLock();
40 | static String apiKeyValue = null;
41 | static final JSONObject customJob = new JSONObject();
42 | static final JSONObject keyJob = new JSONObject();
43 | private static JSONObject k = null;
44 | private static final ThreadLocal sThreadLocal = new ThreadLocal();
45 | private static Context mContext = null;
46 | private static String n = null;
47 | private static JSONObject o = new JSONObject();
48 | private static final ExecutorService EXECUTOR_SERVICE = Executors.newSingleThreadExecutor();
49 | private static final String SHU_ZI_LM_KEY =
50 | "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMUBVv"
51 | + "+BdK8bzgV8iTEe25zWhQabmsC8RCo4TAMW79i6ReUymlcmAvTjxq5pxKFyfvRmdsdOL9RDEQlB+6Z/nP8CAwEAAQ==";
52 |
53 | private Main() {
54 | }
55 |
56 | private String readAssets(Context context, String str) {
57 | try {
58 | InputStream open = context.getAssets().open(str);
59 | StringBuffer stringBuffer = new StringBuffer();
60 | BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(open));
61 | while (true) {
62 | String readLine = bufferedReader.readLine();
63 | if (readLine == null) {
64 | bufferedReader.close();
65 | open.close();
66 | return stringBuffer.toString();
67 | }
68 | stringBuffer.append(readLine);
69 | }
70 | } catch (IOException e) {
71 | return null;
72 | }
73 | }
74 |
75 | String a(Context context, String str, String str2, String str3) {
76 | String jSONObject;
77 | Throwable th;
78 | Exception exception;
79 | Exception exception2;
80 | UnsatisfiedLinkError unsatisfiedLinkError;
81 | UnsatisfiedLinkError unsatisfiedLinkError2;
82 | String str4 = null;
83 | a(context, str, 0);
84 | try {
85 | a("type", "2");
86 | a("pEventCode", str);
87 | a("apiKey", apiKeyValue);
88 | if (str2 != null) {
89 | a("mEventCode", str2);
90 | }
91 | jSONObject = sThreadLocal.get() != null ? ((JSONObject) sThreadLocal.get()).toString() : null;
92 | synchronized(o) {
93 | try {
94 | String jSONObject2 = o.toString();
95 | jSONObject = onEvent(context, jSONObject, null, jSONObject2);
96 | if (jSONObject != null) {
97 | try {
98 | a(o, jSONObject2);
99 | } catch (Throwable th2) {
100 | Throwable th3 = th2;
101 | str4 = jSONObject;
102 | th = th3;
103 | try {
104 | throw th;
105 | } catch (Exception e) {
106 | exception = e;
107 | jSONObject = str4;
108 | exception2 = exception;
109 | } catch (UnsatisfiedLinkError e2) {
110 | unsatisfiedLinkError = e2;
111 | jSONObject = str4;
112 | unsatisfiedLinkError2 = unsatisfiedLinkError;
113 | unsatisfiedLinkError2.printStackTrace();
114 | return jSONObject;
115 | }
116 | }
117 | }
118 | } catch (Throwable th4) {
119 | }
120 | }
121 | } catch (Exception e3) {
122 | exception = e3;
123 | jSONObject = null;
124 | exception2 = exception;
125 | exception2.printStackTrace();
126 | return jSONObject;
127 | } catch (UnsatisfiedLinkError e22) {
128 | unsatisfiedLinkError = e22;
129 | jSONObject = null;
130 | unsatisfiedLinkError2 = unsatisfiedLinkError;
131 | unsatisfiedLinkError2.printStackTrace();
132 | return jSONObject;
133 | }
134 | return null;
135 | }
136 |
137 | private void registerSensorListener(Context context, SensorManager sensorManager, Sensor sensor) {
138 | sensorManager.registerListener(new d(this, context, sensorManager), sensor, 1);
139 | }
140 |
141 | private void a(Context context, String str, int i) {
142 | synchronized(o) {
143 | JSONObject jSONObject = o;
144 | try {
145 | if (!jSONObject.has(str)) {
146 | jSONObject.put(str, 0);
147 | }
148 | jSONObject.put(str, jSONObject.getInt(str) + 1);
149 | } catch (JSONException e) {
150 | e.printStackTrace();
151 | }
152 | }
153 | }
154 |
155 | private void a(Context context, String str, String str2, Listener listener) {
156 | EXECUTOR_SERVICE.execute(new c(this, context, str, str2, listener));
157 | }
158 |
159 | private void a(Context context, String str, String str2, String str3, Listener listener) {
160 | EXECUTOR_SERVICE.execute(new b(this, context, str, str2, str3, listener));
161 | }
162 |
163 | public void a(Context context, JSONObject jSONObject, String str) throws JSONException {
164 | String str2;
165 | if (jSONObject.isNull("url")) {
166 | str2 = (String) setCfgFromAssets(context, "url");
167 | if (str2 != null) {
168 | jSONObject.put("url", str2);
169 | }
170 | }
171 | if (jSONObject.isNull("apiKey")) {
172 | str2 = (String) setCfgFromAssets(context, "apiKey");
173 | if (str2 != null) {
174 | jSONObject.put("apiKey", str2);
175 | }
176 | }
177 | }
178 |
179 | private void a(String str, String str2) {
180 | try {
181 | JSONObject jSONObject = (JSONObject) sThreadLocal.get();
182 | if (jSONObject != null) {
183 | jSONObject.put(str, str2);
184 | return;
185 | }
186 | jSONObject = new JSONObject();
187 | jSONObject.put(str, str2);
188 | sThreadLocal.set(jSONObject);
189 | } catch (JSONException e) {
190 | e.printStackTrace();
191 | }
192 | }
193 |
194 | private void a(JSONObject jSONObject, String str) {
195 | try {
196 | Iterator keys = new JSONObject(str).keys();
197 | while (keys.hasNext()) {
198 | jSONObject.remove((String) keys.next());
199 | }
200 | } catch (JSONException e) {
201 | e.printStackTrace();
202 | }
203 | }
204 |
205 | private void setConfig(JSONObject jSONObject, String str, String str2) throws JSONException {
206 | jSONObject.put(str, str2);
207 | }
208 |
209 | private boolean a(Context context) {
210 | ConnectivityManager connectivityManager =
211 | (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
212 | if (connectivityManager != null) {
213 | NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
214 | if (activeNetworkInfo != null && activeNetworkInfo.isConnected()
215 | && activeNetworkInfo.getState() == State.CONNECTED) {
216 | return true;
217 | }
218 | }
219 | return false;
220 | }
221 |
222 | private Object setCfgFromAssets(Context context, String str) {
223 | Object obj = null;
224 | try {
225 | JSONObject jSONObject = k;
226 | if (jSONObject == null) {
227 | jSONObject = readAssetsJson(context);
228 | k = jSONObject;
229 | }
230 | obj = jSONObject.opt(str);
231 | } catch (Exception e) {
232 | }
233 | return obj;
234 | }
235 |
236 | private String readAssets(Context context) {
237 | return readAssets(context, "20171111_yy.jpg");
238 | }
239 |
240 | String setCfgFromAssets(Context context, String str, String str2) {
241 | try {
242 | setConfig("apiKey", apiKeyValue);//存储key到keyJob
243 | a(context, keyJob, str);
244 | setCustomConfig(customJob, str2);
245 | return query(context, /**apk key*/keyJob.toString(), customJob.toString());
246 | } catch (Exception e) {
247 | e.printStackTrace();
248 | return null;
249 | } catch (UnsatisfiedLinkError e2) {
250 | e2.printStackTrace();
251 | return null;
252 | }
253 | }
254 |
255 | public void setCustomConfig(JSONObject jSONObject, String str) throws JSONException {
256 | setConfig(jSONObject, "custom", str);
257 | }
258 |
259 | private String c(Context context, String str) {
260 | try {
261 | Object obj = context.getPackageManager()
262 | .getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA)
263 | .metaData.get(str);
264 | if (obj != null) {
265 | return obj.toString();
266 | }
267 | } catch (Exception e) {
268 | }
269 | return null;
270 | }
271 |
272 | private JSONObject readAssetsJson(Context context) throws JSONException {
273 | String a = readAssets(context, "cn.shuzilm.config.json");
274 | return a != null ? new JSONObject(a) : null;
275 | }
276 |
277 | private String d(Context context) {
278 | String str = null;
279 | try {
280 | Object b = instance.setCfgFromAssets(context, "store");
281 | if (!(b instanceof String)) {
282 | str = instance.c(context, new JSONObject(b.toString()).getJSONObject("metadata").getString("name"));
283 | }
284 | } catch (Exception e) {
285 | }
286 | return str;
287 | }
288 |
289 | private String e(Context context) {
290 | SharedPreferences sharedPreferences = context.getSharedPreferences(context.getPackageName() + "_dna", 0);
291 | return sharedPreferences != null ? sharedPreferences.getString("device_id", null) : null;
292 | }
293 |
294 | private void register(Context context) {
295 | SensorManager sensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
296 | Sensor defaultSensor = sensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY);
297 | if (defaultSensor != null) {
298 | registerSensorListener(context, sensorManager, defaultSensor);
299 | }
300 | defaultSensor = sensorManager.getDefaultSensor(3);
301 | if (defaultSensor != null) {
302 | registerSensorListener(context, sensorManager, defaultSensor);
303 | }
304 | defaultSensor = sensorManager.getDefaultSensor(11);
305 | if (defaultSensor != null) {
306 | registerSensorListener(context, sensorManager, defaultSensor);
307 | }
308 | defaultSensor = sensorManager.getDefaultSensor(19);
309 | if (defaultSensor != null) {
310 | registerSensorListener(context, sensorManager, defaultSensor);
311 | }
312 | defaultSensor = sensorManager.getDefaultSensor(6);
313 | if (defaultSensor != null) {
314 | registerSensorListener(context, sensorManager, defaultSensor);
315 | }
316 | }
317 |
318 | /**
319 | * 获取设备的唯一id
320 | *
321 | * @param context
322 | *
323 | * @return
324 | */
325 | public static String getQueryID(Context context) {
326 | return (String) getQueryID(context, null, null, 0, null).get("device_id");
327 | }
328 |
329 | public static String getQueryID(Context context, String str, String str2) {
330 | return (String) getQueryID(context, str, str2, 0, null).get("device_id");
331 | }
332 |
333 | public static Map getQueryID(Context context, String str, String str2, int i, Listener listener) {
334 | HashMap hashMap = new HashMap();
335 | Object obj = "0";
336 | Context applicationContext = context.getApplicationContext();
337 | if (i == 1) {
338 | instance.a(applicationContext, str, str2, listener);
339 | return null;
340 | } else if (LOCK.tryLock()) {
341 | String b = instance.setCfgFromAssets(applicationContext, str, str2);
342 | if (b != null) {
343 | n = b;
344 | obj = "1";
345 | }
346 | if (b == null) {
347 | b = n != null ? n : instance.e(applicationContext);
348 | }
349 | hashMap.put("device_id", b);
350 | hashMap.put("valid", obj);
351 | LOCK.unlock();
352 | return hashMap;
353 | } else {
354 | String e = instance.e(applicationContext);
355 | if (e == null) {
356 | instance.a(applicationContext, str, str2, listener);
357 | }
358 | hashMap.put("device_id", e);
359 | hashMap.put("valid", obj);
360 | return hashMap;
361 | }
362 | }
363 |
364 | /**
365 | * 需要在主进程中调用
366 | *
367 | * @param context
368 | */
369 | public static void init(Context context) {
370 | mContext = context.getApplicationContext();
371 | try {
372 | apiKeyValue = SHU_ZI_LM_KEY;
373 | System.loadLibrary(soLib);
374 | ((TelephonyManager) mContext
375 | .getSystemService(Context.TELEPHONY_SERVICE)).listen(instance, LISTEN_SIGNAL_STRENGTHS);
376 | instance.register(context);
377 | } catch (Exception e) {
378 | e.printStackTrace();
379 | } catch (UnsatisfiedLinkError e2) {
380 | e2.printStackTrace();
381 | }
382 | }
383 |
384 | public static Map onEvent(Context context, String str, String str2, String str3, int i, Listener listener) {
385 | Map hashMap = new HashMap();
386 | if (str == null) {
387 | return null;
388 | }
389 | Context applicationContext = context.getApplicationContext();
390 | if (i == 1) {
391 | instance.a(applicationContext, str, str2, str3, listener);
392 | return null;
393 | } else if (LOCK.tryLock()) {
394 | hashMap.put("SessionID", instance.a(applicationContext, str, str2, str3));
395 | hashMap.put("QueryID", n);
396 | LOCK.unlock();
397 | return hashMap;
398 | } else {
399 | instance.a(applicationContext, str, str2, str3, listener);
400 | return null;
401 | }
402 | }
403 |
404 | public static int setConfig(String str, String str2) throws JSONException {
405 | instance.setConfig(keyJob, str, str2);
406 | return 0;
407 | }
408 |
409 | public static int setData(String str, String str2) throws JSONException {
410 | instance.setConfig(customJob, str, str2);
411 | return 0;
412 | }
413 |
414 | public static int unResListener() {
415 | ((TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE)).listen(instance, 0);
416 | return 0;
417 | }
418 |
419 | @Override
420 | public void onSignalStrengthsChanged(SignalStrength signalStrength) {
421 | try {
422 | onSSChanged(mContext, signalStrength);
423 | } catch (UnsatisfiedLinkError e) {
424 | e.printStackTrace();
425 | }
426 | }
427 |
428 | public static native String onEvent(Context context, String str, String str2, String str3);
429 |
430 | public static native void onSSChanged(Context context, SignalStrength signalStrength);
431 |
432 | public static native void onSensorChanged(Context context, SensorEvent sensorEvent);
433 |
434 | public static native String query(Context context, String str, String str2);
435 |
436 | public static native String run(Context context, String str, String str2);
437 | }
438 |
--------------------------------------------------------------------------------