集成vasdolly

This commit is contained in:
huangjian
2021-12-20 10:27:23 +08:00
parent 6fe924c663
commit 0e14197bd6
18 changed files with 71 additions and 1107 deletions

View File

@@ -2,7 +2,7 @@ apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
android {
compileSdkVersion 29
compileSdkVersion 30
defaultConfig {
minSdkVersion 21
@@ -19,7 +19,7 @@ android {
}
}
buildToolsVersion = '28.0.3'
buildToolsVersion = '30.0.3'
}
dependencies {

View File

@@ -1,124 +0,0 @@
/**
* *************************************
* android 资源混淆脚本
***************************************
*/
apply plugin: 'AndResGuard'
andResGuard {
mappingFile = file("./resource_mapping.txt")
// mappingFile = null
// 当你使用v2签名的时候7zip压缩是无法生效的。
use7zip = false
useSign = true
// 打开这个开关会keep住所有资源的原始路径只混淆资源的名字
keepRoot = false
whiteList = [
// for your icon
"R.mipmap.app_logo",
// for fabric
"R.string.com.crashlytics.*",
//sharesdk
"R.string.ssdk_*",
"R.string.smssdk_*",
"R.layout.ssdk_*",
"R.drawable.ssdk_*",
"R.mipmap.ssdk_*",
"R.anim.ssdk_*",
"R.color.ssdk_*",
"R.style.ssdk_*",
"R.id.ssdk_*",
//ktv
"R.id.sb_accompany_voice",
"R.id.tv_accompany_voice",
"R.id.sb_person_voice",
"R.id.tv_person_voice",
"R.id.tv_change_audio",
"R.id.iv_play_or_pause",
"R.id.cv_people_sound",
"R.id.cv_accompany_sound",
"R.id.layout_song_progress",
// for google-services
"R.string.google_app_id",
"R.string.gcm_defaultSenderId",
"R.string.default_web_client_id",
"R.string.ga_trackingId",
"R.string.firebase_database_url",
"R.string.google_api_key",
"R.string.google_crash_reporting_api_key",
//for aliyun RPSDK
"R.drawable.yw_1222_*",
//for voice match
"R.id.iv_group_like",
"R.id.iv_group_dont_like",
"R.id.fl_group_content",
"R.id.svga_group_voice_like",
//for yidun
"R.drawable.bg_quick_pass*",
"R.drawable.quick_pass_*",
//for yidun liantong
"R.layout.activity_oauth",
"R.id.oauth_back",
"R.id.is_agree",
"R.id.oauth_title",
"R.id.app_name",
"R.id.oauth_mobile_et",
"R.id.oauth_login",
"R.id.service_and_privacy",
"R.id.authorize_app",
"R.id.brand",
"R.id.navigation_bar_line",
"R.id.oauth_logo",
"R.id.navigation_bar",
"R.id.protocol",
"R.id.oauth_content",
"R.id.other_login",
"R.id.login_before_text",
"R.layout.oauth_loading_dialog",
"R.id.oauth_loading_dialog_txt",
"R.id.loading_parent",
"R.id.oauth_loading_dialog_img",
//for yidongka
"R.anim.umcsdk_*",
"R.drawable.dialog_loading",
"R.drawable.umcsdk_*",
"R.drawable.loading",
"R.string.umcsdk_*",
//华为推送
"R.string.hms*",
"R.string.connect_server_fail_prompt_toast",
"R.string.getting_message_fail_prompt_toast",
"R.string.no_available_network_prompt_toast",
"R.string.third_app_*",
"R.string.upsdk_*",
"R.layout.hms*",
"R.layout.upsdk_*",
"R.drawable.upsdk*",
"R.color.upsdk*",
"R.dimen.upsdk*",
"R.style.upsdk*",
"R.string.agc*"
]
compressFilePattern = [
"*.png",
"*.jpg",
"*.jpeg",
"*.gif",
"resources.arsc"
]
sevenzip {
artifact = 'com.tencent.mm:SevenZip:1.2.15'
//path = "/usr/local/bin/7za"
}
// erban-${variant.buildType.name}-${defaultConfig.versionName}_${defaultConfig.versionCode}-${releaseTime()}-${variant.productFlavors[0].name}.apk".toLowerCase())
// sourceApk = "${project.rootDir}/耳伴-${buildTypes}-${defaultConfig.versionName}_${defaultConfig.versionCode}-${releaseTime()}.apk".toLowerCase()
/**
* 可选: 指定v1签名时生成jar文件的摘要算法
* 默认值为“SHA-1”
**/
// digestalg = "SHA-256"
}

View File

@@ -1,14 +1,13 @@
apply plugin: 'com.android.application'
// android res guard 资源混淆脚本
apply from: 'and_res_guard.gradle'
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'com.huawei.agconnect'
apply plugin: 'com.tencent.vasdolly'
android {
compileSdkVersion 29
compileSdkVersion 30
defaultConfig {
applicationId "com.mango.yinyou"
@@ -44,11 +43,6 @@ android {
disable 'ExtraTranslation'
}
dexOptions {
javaMaxHeapSize "1g"
jumboMode = true
}
dataBinding {
enabled = true
}
@@ -145,18 +139,6 @@ android {
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
staging {
buildConfigField "String", "BASE_URL", "\"https://api.lecheng163.com/\""
buildConfigField "String", "BASE_URL_DEBUG", "BASE_URL"
buildConfigField "String", "BASE_URL_STAGING", "BASE_URL"
buildConfigField "String", "BASE_URL_RELEASE", "BASE_URL"
minifyEnabled true
shrinkResources true
signingConfig signingConfigs.v2
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
matchingFallbacks = ['staging', 'release']
}
debug {
buildConfigField "String", "BASE_URL", "\"http://api.uat.lecheng163.com/\""
buildConfigField "String", "BASE_URL_DEBUG", "BASE_URL"
@@ -179,17 +161,11 @@ android {
jvmTarget = "1.8"
}
productFlavors {
accompany {
dimension 'default'
manifestPlaceholders = [CHANNEL_VALUE: channel]
}
}
buildToolsVersion = '28.0.3'
buildToolsVersion = '30.0.3'
}
def Lombok = "1.16.20"
def Lombok = "1.18.10"
def useFlutterAar = Boolean.parseBoolean(with_flutter_aar)
dependencies {
@@ -217,8 +193,8 @@ dependencies {
api "com.github.yyued:SVGAPlayer-Android:2.6.1"
implementation "com.orhanobut:logger:2.2.0"
api "com.ms-square:expandableTextView:0.1.4"
api "com.jakewharton:butterknife:10.1.0"
annotationProcessor "com.jakewharton:butterknife-compiler:10.1.0"
api "com.jakewharton:butterknife:10.2.3"
annotationProcessor "com.jakewharton:butterknife-compiler:10.2.3"
implementation "com.llew.huawei:verifier:1.0.3"
annotationProcessor 'androidx.annotation:annotation:1.1.0'
@@ -289,6 +265,8 @@ dependencies {
implementation project(path: ':flutter')
implementation project(path: ':flutter_boost')
}
api 'com.tencent.vasdolly:helper:3.0.3'
}
String storageUrl = System.env.FLUTTER_STORAGE_BASE_URL ?: "https://storage.googleapis.com"
@@ -307,3 +285,16 @@ repositories {
url "$storageUrl/download.flutter.io"
}
}
channel{
//多渠道包的输出目录默认为new File(project.buildDir,"channel")
outputDir = new File(project.buildDir,"channelapk")
//多渠道包的命名规则,默认为:${appName}-${versionName}-${versionCode}-${flavorName}-${buildType}-${buildTime}
apkNameFormat ='${appName}-${buildType}-${flavorName}-${versionName}-${buildTime}'
//快速模式生成渠道包时不进行校验速度可以提升10倍以上默认为false
fastMode = false
//buildTime的时间格式默认格式yyyyMMdd-HHmmss
buildTimeDateFormat = 'MMddHHmm'
//低内存模式仅针对V2签名默认为false只把签名块、中央目录和EOCD读取到内存不把最大头的内容块读取到内存在手机上合成APK时可以使用该模式
lowMemory = false
}

View File

@@ -91,10 +91,6 @@
android:usesCleartextTraffic="true"
tools:replace="android:name,android:allowBackup">
<meta-data
android:name="CHANNEL"
android:value="${CHANNEL_VALUE}" />
<!-- 刘海屏适配 begin -->
<!-- 小米 -->
<meta-data

View File

@@ -65,6 +65,7 @@ import com.scwang.smartrefresh.layout.footer.ClassicsFooter;
import com.tencent.bugly.Bugly;
import com.tencent.bugly.beta.Beta;
import com.tencent.bugly.crashreport.CrashReport;
import com.tencent.vasdolly.helper.ChannelReaderUtil;
import com.umeng.analytics.MobclickAgent;
import com.umeng.commonsdk.UMConfigure;
import com.yizhuan.erban.BuildConfig;
@@ -219,12 +220,7 @@ public class XChatApplication extends Application {
long startTime = System.currentTimeMillis();
String channel = "";
try {
ApplicationInfo appInfo = context.getPackageManager().getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA);
channel = appInfo.metaData.getString("CHANNEL");
} catch (Exception e) {
e.printStackTrace();
}
channel = ChannelReaderUtil.getChannel(instance);
if (TextUtils.isEmpty(channel)) {
channel = "official";
}

View File

@@ -25,7 +25,7 @@ class GiveGoldSuccessActivity : BaseActivity() {
setContentView(R.layout.activity_give_gold_success)
initTitleBar("转赠到寻梦帐号")
tvNickname.text = "转赠给:${intent.getStringExtra("nickname")}"
tvGold.text = "${intent.getStringExtra("gold").toInt()}钻石"
tvGold.text = "${intent.getStringExtra("gold")?.toInt()}钻石"
tvSure.setOnClickListener { finish() }
}

View File

@@ -10,6 +10,8 @@ import android.webkit.JavascriptInterface;
import com.alibaba.fastjson.JSONObject;
import com.orhanobut.logger.Logger;
import com.tencent.vasdolly.helper.ChannelReaderUtil;
import com.yizhuan.erban.application.XChatApplication;
import com.yizhuan.xchat_android_constants.XChatConstants;
import com.yizhuan.xchat_android_core.auth.AuthModel;
import com.yizhuan.xchat_android_library.utils.AppMetaDataUtil;
@@ -89,13 +91,8 @@ public class SimpleJSInterface {
*/
@JavascriptInterface
public String getChannel() {
String channel = "";
try {
ApplicationInfo appInfo = context.getPackageManager().getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA);
channel = appInfo.metaData.getString("CHANNEL");
} catch (Exception e) {
e.printStackTrace();
}
String channel;
channel = ChannelReaderUtil.getChannel(XChatApplication.instance());
if (TextUtils.isEmpty(channel)) {
channel = "official";
}

View File

@@ -13,19 +13,19 @@ buildscript {
maven { url 'https://jitpack.io' }
google()
mavenCentral()
maven {url 'http://developer.huawei.com/repo/'}
maven { url "http://mvn.mob.com/android" }
maven {url 'https://developer.huawei.com/repo/'}
maven { url "https://mvn.mob.com/android" }
maven { url 'https://repo1.maven.org/maven2/' }
}
dependencies {
classpath 'com.android.tools.build:gradle:3.6.2'
classpath 'com.android.tools.build:gradle:4.2.2'
//realm 数据库插件
classpath "io.realm:realm-gradle-plugin:5.3.0"
// android 资源混淆插件
classpath 'com.tencent.mm:AndResGuard-gradle-plugin:1.2.16'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.huawei.agconnect:agcp:1.3.1.300'
classpath 'com.huawei.agconnect:agcp:1.6.0.300'
classpath 'com.tencent.vasdolly:plugin:3.0.3'
}
}
@@ -35,11 +35,11 @@ allprojects {
mavenCentral()
maven { url 'https://maven.aliyun.com/repository/public' }
maven { url 'https://jitpack.io' }
maven { url "http://mvn.mob.com/android" }
maven { url "https://mvn.mob.com/android" }
maven { url 'https://repo1.maven.org/maven2/' }
maven { url 'http://developer.huawei.com/repo/' }
maven { url 'https://developer.huawei.com/repo/' }
maven(){
url 'http://sdk-repository.wujiehh.com:8081/repository/WJHD/'
url 'https://sdk-repository.wujiehh.com/repository/WJHD/'
credentials {
username = 'wjhd'
password = 'WV9#i%C3e@p$jtPyU*ds^VUp317koE1Y'

22
channel.txt Normal file
View File

@@ -0,0 +1,22 @@
official
yingyongbao
vivo
oppo
xiaomi
xingqiu0
xingqiu1
xingqiu2
xingqiu3
xingqiu4
xingqiu5
xingqiu6
xingqiu7
xingqiu8
xingqiu9
xingqiu10
yingyongbao01
yingyongbao02
yingyongbao03
gongzhonghao
toutiao
kuaishou-xxl-01

View File

@@ -4,7 +4,7 @@ apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android {
compileSdkVersion 29
compileSdkVersion 30
defaultConfig {
minSdkVersion 21
targetSdkVersion 29
@@ -50,12 +50,12 @@ android {
}
}
buildToolsVersion = '28.0.3'
buildToolsVersion = '30.0.3'
}
def loggerVersion = "2.2.0"
def Lombok = "1.16.20"
def Lombok = "1.18.10"
dependencies {
api fileTree(dir: 'libs', include: ['*.jar'])

View File

@@ -12,7 +12,6 @@ org.gradle.daemon=true
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
android.enableD8=true
android.injected.testOnly=false
android.useAndroidX=true
android.enableJetifier=true
@@ -23,3 +22,5 @@ with_flutter_aar=true
with_jenkins=false
channel=official
channel_file=channel.txt

View File

@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.3-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip

View File

@@ -2,7 +2,7 @@ apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
android {
compileSdkVersion 29
compileSdkVersion 30
defaultConfig {
minSdkVersion 21
targetSdkVersion 29
@@ -31,7 +31,7 @@ android {
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
buildToolsVersion = '28.0.3'
buildToolsVersion = '30.0.3'
}
dependencies {

View File

@@ -3,8 +3,8 @@ apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android {
compileSdkVersion 29
buildToolsVersion '28.0.3'
compileSdkVersion 30
buildToolsVersion '30.0.3'
defaultConfig {
minSdkVersion 21

Binary file not shown.

View File

@@ -1,84 +0,0 @@
package com.netease.nim.uikit.business.robot.parser.elements.group;
import com.netease.nim.uikit.business.robot.parser.elements.base.ElementGroup;
import com.netease.nim.uikit.business.robot.parser.elements.base.ElementTag;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.json.XML;
/**
* 根元素,解析器入口
* <p>
* Created by huangjun on 2017/6/22.
*/
public class TemplateRoot extends ElementGroup<LinearLayout> {
// attr
private String templateId; // 模板编号
private String globalParams; // 全局变量
private String version; // 协议版本号
// log
private String jsonString; // xml2JsonString
public TemplateRoot(String xml) {
try {
if (!xml.contains(ElementTag.XML_HEADER_PREFIX)) {
xml = ElementTag.XML_HEADER + xml;
}
JSONObject rootJsonObject = XML.toJSONObject(xml);
parse(rootJsonObject);
jsonString = rootJsonObject.toString();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void parse(JSONObject rootJsonObject) throws JSONException {
JSONObject jsonObject = rootJsonObject.getJSONObject(ElementTag.ELEMENT_LABEL_TEMPLATE);
templateId = jsonObject.optString(ElementTag.ELEMENT_ATTRIBUTE_ID);
globalParams = jsonObject.optString(ElementTag.ELEMENT_ATTRIBUTE_PARAMS);
version = jsonObject.optString(ElementTag.ELEMENT_ATTRIBUTE_VERSION);
if (jsonObject.has(ElementTag.ELEMENT_LABEL_LINEAR_LAYOUT)) {
JSONObject object = jsonObject.optJSONObject(ElementTag.ELEMENT_LABEL_LINEAR_LAYOUT);
if (object != null) {
LinearLayout linearLayout = new LinearLayout();
linearLayout.parse(object);
addElement(linearLayout);
} else {
JSONArray array = jsonObject.optJSONArray(ElementTag.ELEMENT_LABEL_LINEAR_LAYOUT);
if (array != null && array.length() > 0) {
for (int i = 0; i < array.length(); i++) {
JSONObject obj = array.getJSONObject(i);
LinearLayout linearLayout = new LinearLayout();
linearLayout.parse(obj);
addElement(linearLayout);
}
}
}
}
}
public String getTemplateId() {
return templateId;
}
public String getGlobalParams() {
return globalParams;
}
public String getVersion() {
return version;
}
@Override
public String toString() {
return jsonString;
}
}

View File

@@ -13,7 +13,6 @@ import com.netease.nim.uikit.business.robot.parser.elements.base.Element;
import com.netease.nim.uikit.business.robot.parser.elements.element.ImageElement;
import com.netease.nim.uikit.business.robot.parser.elements.element.TextElement;
import com.netease.nim.uikit.business.robot.parser.elements.group.LinkElement;
import com.netease.nim.uikit.business.robot.parser.elements.group.TemplateRoot;
import java.util.ArrayList;
import java.util.List;
@@ -66,7 +65,7 @@ public class RobotContentLinearLayout extends LinearLayout {
for (RobotBotContent bot : botContents) {
if (RobotResponseContent.RES_TYPE_BOT_COMP.equals(bot.getType())) {
// 复合
convertTemplateToViews(new TemplateRoot(bot.getBotMsg()), robot);
// convertTemplateToViews(new TemplateRoot(bot.getBotMsg()), robot);
} else if (RobotResponseContent.RES_TYPE_BOT_TEXT.equals(bot.getType())
|| RobotResponseContent.RES_TYPE_BOT_QUICK.equals(bot.getType())) {
// 文本
@@ -85,38 +84,6 @@ public class RobotContentLinearLayout extends LinearLayout {
bindChildContentViews();
}
private void convertTemplateToViews(final TemplateRoot template, final ClickableChildView robot) {
List<com.netease.nim.uikit.business.robot.parser.elements.group.LinearLayout> robotLinearLayouts = template.getElements();
if (robotLinearLayouts == null) {
return;
}
for (com.netease.nim.uikit.business.robot.parser.elements.group.LinearLayout robotLinearLayout : robotLinearLayouts) {
int size = robotLinearLayout.getElements().size();
if (size <= 0) {
continue;
}
for (int i = 0; i < size; i++) {
RobotViewBase view;
Element e = robotLinearLayout.getElements().get(i);
if (e instanceof TextElement) {
view = RobotViewFactory.createRobotTextView(getContext(), (TextElement) e, null);
} else if (e instanceof ImageElement) {
view = RobotViewFactory.createRobotImageView(getContext(), (ImageElement) e, null);
} else if (e instanceof LinkElement) {
view = RobotViewFactory.createRobotLinkView(getContext(), (LinkElement) e);
if (linkViewStyle != null) {
((RobotLinkView) view).setLinkViewStyle(linkViewStyle);
}
view.setId(GenerateViewID.generateViewId());
robot.addClickableChildView(RobotLinkView.class, view.getId());
} else {
continue;
}
robotViews.add(view);
}
}
}
private void bindChildContentViews() {
removeAllViews();

View File

@@ -1,197 +1,14 @@
package com.netease.nim.uikit.common.util.sys;
import android.content.Context;
import android.database.Cursor;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Build;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import com.netease.nim.uikit.common.util.log.LogUtil;
public class NetworkUtil {
public static final String TAG = "NetworkUtil";
public static final byte CURRENT_NETWORK_TYPE_NONE = 0;
/*
* 根据APN区分网络类型
*/
public static final byte CURRENT_NETWORK_TYPE_WIFI = 1;// wifi
public static final byte CURRENT_NETWORK_TYPE_CTNET = 2;// ctnet
public static final byte CURRENT_NETWORK_TYPE_CTWAP = 3;// ctwap
public static final byte CURRENT_NETWORK_TYPE_CMWAP = 4;// cmwap
public static final byte CURRENT_NETWORK_TYPE_UNIWAP = 5;// uniwap,3gwap
public static final byte CURRENT_NETWORK_TYPE_CMNET = 6;// cmnet
public static final byte CURRENT_NETWORK_TYPE_UNIET = 7;// uninet,3gnet
/**
* 根据运营商区分网络类型
*/
public static final byte CURRENT_NETWORK_TYPE_CTC = 10;// ctwap,ctnet
public static final byte CURRENT_NETWORK_TYPE_CUC = 11;// uniwap,3gwap,uninet,3gnet
public static final byte CURRENT_NETWORK_TYPE_CM = 12;// cmwap,cmnet
/**
* apn值
*/
private static final String CONNECT_TYPE_WIFI = "wifi";
private static final String CONNECT_TYPE_CTNET = "ctnet";
private static final String CONNECT_TYPE_CTWAP = "ctwap";
private static final String CONNECT_TYPE_CMNET = "cmnet";
private static final String CONNECT_TYPE_CMWAP = "cmwap";
private static final String CONNECT_TYPE_UNIWAP = "uniwap";
private static final String CONNECT_TYPE_UNINET = "uninet";
private static final String CONNECT_TYPE_UNI3GWAP = "3gwap";
private static final String CONNECT_TYPE_UNI3GNET = "3gnet";
private static final Uri PREFERRED_APN_URI = Uri.parse("content://telephony/carriers/preferapn");
public static byte curNetworkType = CURRENT_NETWORK_TYPE_NONE;
/*
*
* 获取网络类型
*
*/
public static int getNetType(Context context) {
NetworkInfo networkInfo = getActiveNetworkInfo(context);
if (networkInfo == null) {
return -1;
} else
return networkInfo.getType();
}
/**
* 判断当前网络类型。WIFI,NET,WAP
*
* @param context
* @return
*/
public static byte getCurrentNetType(Context context) {
NetworkInfo networkInfo = getActiveNetworkInfo(context);
byte type = CURRENT_NETWORK_TYPE_NONE;
if (networkInfo != null) {
// String typeName = networkInfo.getTypeName();
// XT800
String typeName = networkInfo.getExtraInfo();
if (TextUtils.isEmpty(typeName)) {
typeName = networkInfo.getTypeName();
}
if (!TextUtils.isEmpty(typeName)) {
String temp = typeName.toLowerCase();
if (temp.indexOf(CONNECT_TYPE_WIFI) > -1) {// wifi
type = CURRENT_NETWORK_TYPE_WIFI;
} else if (temp.indexOf(CONNECT_TYPE_CTNET) > -1) {// ctnet
type = CURRENT_NETWORK_TYPE_CTNET;
} else if (temp.indexOf(CONNECT_TYPE_CTWAP) > -1) {// ctwap
type = CURRENT_NETWORK_TYPE_CTWAP;
} else if (temp.indexOf(CONNECT_TYPE_CMNET) > -1) {// cmnet
type = CURRENT_NETWORK_TYPE_CMNET;
} else if (temp.indexOf(CONNECT_TYPE_CMWAP) > -1) {// cmwap
type = CURRENT_NETWORK_TYPE_CMWAP;
} else if (temp.indexOf(CONNECT_TYPE_UNIWAP) > -1) {// uniwap
type = CURRENT_NETWORK_TYPE_UNIWAP;
} else if (temp.indexOf(CONNECT_TYPE_UNI3GWAP) > -1) {// 3gwap
type = CURRENT_NETWORK_TYPE_UNIWAP;
} else if (temp.indexOf(CONNECT_TYPE_UNINET) > -1) {// uninet
type = CURRENT_NETWORK_TYPE_UNIET;
} else if (temp.indexOf(CONNECT_TYPE_UNI3GNET) > -1) {// 3gnet
type = CURRENT_NETWORK_TYPE_UNIET;
}
}
}
if (type == CURRENT_NETWORK_TYPE_NONE) {
String apnType = getApnType(context);
if (apnType != null && apnType.equals(CONNECT_TYPE_CTNET)) {// ctnet
type = CURRENT_NETWORK_TYPE_CTNET;
} else if (apnType != null && apnType.equals(CONNECT_TYPE_CTWAP)) {// ctwap
type = CURRENT_NETWORK_TYPE_CTWAP;
} else if (apnType != null && apnType.equals(CONNECT_TYPE_CMWAP)) {// cmwap
type = CURRENT_NETWORK_TYPE_CMWAP;
} else if (apnType != null && apnType.equals(CONNECT_TYPE_CMNET)) {// cmnet
type = CURRENT_NETWORK_TYPE_CMNET;
} else if (apnType != null && apnType.equals(CONNECT_TYPE_UNIWAP)) {// uniwap
type = CURRENT_NETWORK_TYPE_UNIWAP;
} else if (apnType != null && apnType.equals(CONNECT_TYPE_UNI3GWAP)) {// 3gwap
type = CURRENT_NETWORK_TYPE_UNIWAP;
} else if (apnType != null && apnType.equals(CONNECT_TYPE_UNINET)) {// uninet
type = CURRENT_NETWORK_TYPE_UNIET;
} else if (apnType != null && apnType.equals(CONNECT_TYPE_UNI3GNET)) {// 3gnet
type = CURRENT_NETWORK_TYPE_UNIET;
}
}
curNetworkType = type;
return type;
}
/**
* 判断APNTYPE
*
* @param context
* @return
*/
/**
* @deprecated 4.0
* doc:
* Since the DB may contain corp passwords, we should secure it. Using the same permission as writing to the DB as the read is potentially as damaging as a write
*/
public static String getApnType(Context context) {
String apntype = "nomatch";
Cursor c = context.getContentResolver().query(PREFERRED_APN_URI, null, null, null, null);
if (c != null) {
if (c.moveToFirst()) {
String user = c.getString(c.getColumnIndex("user"));
if (user != null && user.startsWith(CONNECT_TYPE_CTNET)) {
apntype = CONNECT_TYPE_CTNET;
} else if (user != null && user.startsWith(CONNECT_TYPE_CTWAP)) {
apntype = CONNECT_TYPE_CTWAP;
} else if (user != null && user.startsWith(CONNECT_TYPE_CMWAP)) {
apntype = CONNECT_TYPE_CMWAP;
} else if (user != null && user.startsWith(CONNECT_TYPE_CMNET)) {
apntype = CONNECT_TYPE_CMNET;
} else if (user != null && user.startsWith(CONNECT_TYPE_UNIWAP)) {
apntype = CONNECT_TYPE_UNIWAP;
} else if (user != null && user.startsWith(CONNECT_TYPE_UNINET)) {
apntype = CONNECT_TYPE_UNINET;
} else if (user != null && user.startsWith(CONNECT_TYPE_UNI3GWAP)) {
apntype = CONNECT_TYPE_UNI3GWAP;
} else if (user != null && user.startsWith(CONNECT_TYPE_UNI3GNET)) {
apntype = CONNECT_TYPE_UNI3GNET;
}
}
c.close();
c = null;
}
return apntype;
}
/**
* 判断是否有网络可用
*
@@ -207,22 +24,6 @@ public class NetworkUtil {
}
}
/**
* 此判断不可靠
*
* @param context
* @return
*/
public static boolean isNetworkConnected(Context context) {
NetworkInfo networkInfo = getActiveNetworkInfo(context);
if (networkInfo != null) {
boolean a = networkInfo.isConnected();
return a;
} else {
return false;
}
}
/**
* 获取可用的网络信息
*
@@ -238,50 +39,6 @@ public class NetworkUtil {
}
}
public static boolean isWifiOr3G(Context context) {
if (isWifi(context)) {
return true;
} else {
return is3G(context);
}
}
public static boolean is2G(Context context) {
return !isWifiOr3G(context);
}
public static boolean is3G(Context context) {
int type = getNetworkClass(context);
if (type == NETWORK_CLASS_3_G || type == NETWORK_CLASS_4_G) {
return true;
} else {
return false;
}
}
/**
* 当前网络是否是wifi网络
*
* @param context
* @return
*/
public static boolean isWifi(Context context) {
try {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = cm.getActiveNetworkInfo();
if (ni != null) {
if (ni.getType() == ConnectivityManager.TYPE_WIFI) {
return true;
} else {
return false;
}
} else {
return false;
}
} catch (Exception e) {
return false;
}
}
public static boolean getNetworkConnectionStatus(Context context) {
ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
@@ -307,559 +64,4 @@ public class NetworkUtil {
}
}
public static String getNetworkProxyInfo(Context context) {
String proxyHost = android.net.Proxy.getDefaultHost();
int proxyPort = android.net.Proxy.getDefaultPort();
String szport = String.valueOf(proxyPort);
String proxyInfo = null;
ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (manager == null) {
return null;
} else {
NetworkInfo info = manager.getActiveNetworkInfo();
if (info != null) {
String typeName = info.getTypeName().toLowerCase();
if (typeName != null && typeName.equals("wifi")) {
return null;
}
} else {
return null;
}
}
if (proxyHost != null && (0 < proxyPort && proxyPort < 65535)) {
proxyInfo = proxyHost + ":" + szport;
return proxyInfo;
} else {
return null;
}
}
public static String getNetworkProxyUrl(Context context) {
if (isWifi(context)) {
return null;
}
String proxyHost = android.net.Proxy.getDefaultHost();
LogUtil.e(TAG, "proxyHost:" + proxyHost);
return proxyHost;
}
public static String getNetworkProxyUrl() {
/**
* 当网络为wifi时,直接返回空代理: 当ctwap,cmwap,uniwap,3gwap开启时同时开启wifi网络
* ,通过下面的getDefaultHost接口将得到对应wap网络代理ip ,这是错误的,所以在此判断当前网络是否为wifi
*/
if (curNetworkType == CURRENT_NETWORK_TYPE_WIFI) {
return null;
}
String proxyHost = android.net.Proxy.getDefaultHost();
LogUtil.e(TAG, "proxyHost:" + proxyHost);
return proxyHost;
}
public static int getNetworkProxyPort() {
int proxyPort = android.net.Proxy.getDefaultPort();
return proxyPort;
}
public static boolean isCtwap(Context context) {
if (getApnType(context).equals(CONNECT_TYPE_CTWAP)) {
return true;
} else {
return false;
}
}
public static boolean isUniwap(Context context) {
if (getApnType(context).equals(CONNECT_TYPE_UNIWAP)) {
return true;
} else {
return false;
}
}
public static boolean isCmwap(Context context) {
if (getApnType(context).equals(CONNECT_TYPE_CMWAP)) {
return true;
} else {
return false;
}
}
/**
* 判断是否是电信网络(ctwap,ctnet)
*
* @return
*/
public static boolean isCtcNetwork(Context context) {
byte type = getCurrentNetType(context);
return isCtcNetwork(type);
}
public static boolean isCtcNetwork(String apnName) {
if (apnName == null) {
return false;
}
if (apnName.equals(CONNECT_TYPE_CTWAP) || apnName.equals(CONNECT_TYPE_CTNET)) {
return true;
} else {
return false;
}
}
public static boolean isCtcNetwork(byte type) {
if (type == CURRENT_NETWORK_TYPE_CTWAP || type == CURRENT_NETWORK_TYPE_CTNET) {
return true;
} else {
return false;
}
}
/**
* 判断是否是联通网络(uniwap,uninet,3gwap,3gnet)
*
* @return
*/
public static boolean isCucNetwork(Context context) {
byte type = getCurrentNetType(context);
return isCucNetwork(type);
}
public static boolean isCucNetwork(String apnName) {
if (apnName == null) {
return false;
}
if (apnName.equals(CONNECT_TYPE_UNIWAP) || apnName.equals(CONNECT_TYPE_UNINET)
|| apnName.equals(CONNECT_TYPE_UNI3GWAP) || apnName.equals(CONNECT_TYPE_UNI3GNET)) {
return true;
} else {
return false;
}
}
public static boolean isCucNetwork(byte type) {
if (type == CURRENT_NETWORK_TYPE_UNIWAP || type == CURRENT_NETWORK_TYPE_UNIET) {
return true;
} else {
return false;
}
}
/**
* 判断是否是移动网络(cmwap,cmnet)
*
* @return
*/
public static boolean isCmbNetwork(Context context) {
byte type = getCurrentNetType(context);
return isCmbNetwork(type);
}
public static boolean isCmbNetwork(String apnName) {
if (apnName == null) {
return false;
}
if (apnName.equals(CONNECT_TYPE_CMWAP) || apnName.equals(CONNECT_TYPE_CMNET)) {
return true;
} else {
return false;
}
}
public static boolean isCmbNetwork(byte type) {
if (type == CURRENT_NETWORK_TYPE_CMWAP || type == CURRENT_NETWORK_TYPE_CMNET) {
return true;
} else {
return false;
}
}
/**
* 获取网络运营商类型(中国移动,中国联通,中国电信,wifi)
*
* @param context
* @return
*/
public static byte getNetworkOperators(Context context) {
if (isWifi(context)) {
return CURRENT_NETWORK_TYPE_WIFI;
} else if (isCtcNetwork(context)) {
return CURRENT_NETWORK_TYPE_CTC;
} else if (isCmbNetwork(context)) {
return CURRENT_NETWORK_TYPE_CM;
} else if (isCucNetwork(context)) {
return CURRENT_NETWORK_TYPE_CUC;
} else {
return CURRENT_NETWORK_TYPE_NONE;
}
}
public static byte getNetworkOperators(byte type) {
if (type == CURRENT_NETWORK_TYPE_NONE) {
return CURRENT_NETWORK_TYPE_NONE;
} else if (type == CURRENT_NETWORK_TYPE_WIFI) {
return CURRENT_NETWORK_TYPE_WIFI;
} else if (type == CURRENT_NETWORK_TYPE_CTNET || type == CURRENT_NETWORK_TYPE_CTWAP) {
return CURRENT_NETWORK_TYPE_CTC;
} else if (type == CURRENT_NETWORK_TYPE_CMWAP || type == CURRENT_NETWORK_TYPE_CMNET) {
return CURRENT_NETWORK_TYPE_CM;
} else if (type == CURRENT_NETWORK_TYPE_UNIWAP || type == CURRENT_NETWORK_TYPE_UNIET) {
return CURRENT_NETWORK_TYPE_CUC;
} else {
return CURRENT_NETWORK_TYPE_NONE;
}
}
/**
* 是否需要设置代理(网络请求,一般用于wap网络,但有些机型设置代理会导致系统异常)
*
* @return
*/
public static boolean isNeedSetProxyForNetRequest() { // #00044 +
if (Build.MODEL.equals("SCH-N719") || Build.MODEL.equals("SCH-I939D")) {
return false;
} else {
return true;
}
}
/**
* get mac address of wifi if wifi is active
*/
public static String getActiveMacAddress(Context context) {
WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
WifiInfo info = wifi.getConnectionInfo();
if (info != null) {
return info.getMacAddress();
}
return "";
}
public static String getNetworkInfo(Context context) {
String info = "";
ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity != null) {
NetworkInfo activeNetInfo = connectivity.getActiveNetworkInfo();
if (activeNetInfo != null) {
if (activeNetInfo.getType() == ConnectivityManager.TYPE_WIFI) {
info = activeNetInfo.getTypeName();
} else {
StringBuilder sb = new StringBuilder();
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
sb.append(activeNetInfo.getTypeName());
sb.append(" [");
if (tm != null) {
// Result may be unreliable on CDMA networks
sb.append(tm.getNetworkOperatorName());
sb.append("#");
}
sb.append(activeNetInfo.getSubtypeName());
sb.append("]");
info = sb.toString();
}
}
}
return info;
}
public enum NetworkSpeedMode {
LOW, NORMAL, HIGH, UNKNOWN
}
/**
* 网络类型
*/
public static final int NETWORK_CLASS_UNKNOWN = 0;
public static final int NETWORK_CLASS_2_G = 1;
public static final int NETWORK_CLASS_3_G = 2;
public static final int NETWORK_CLASS_4_G = 3;
public static final int NETWORK_CLASS_WIFI = 10;
/**
* 仅判断Mobile网络的慢速.蓝牙等其他网络不做判断.
*
* @param context
* @return
*/
public static NetworkSpeedMode getNetworkSpeedModeInMobile(Context context) {
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivityManager != null) {
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
if (networkInfo != null) {
if (networkInfo.getType() == ConnectivityManager.TYPE_MOBILE) {
switch (networkInfo.getSubtype()) {
case TelephonyManager.NETWORK_TYPE_IDEN: // ~25 kbps
return NetworkSpeedMode.LOW;
case TelephonyManager.NETWORK_TYPE_CDMA: // ~ 14-64 kbps
return NetworkSpeedMode.LOW;
case TelephonyManager.NETWORK_TYPE_1xRTT: // ~ 50-100 kbps
return NetworkSpeedMode.LOW;
case TelephonyManager.NETWORK_TYPE_EDGE: // ~ 50-100 kbps
return NetworkSpeedMode.LOW;
case TelephonyManager.NETWORK_TYPE_GPRS: // ~ 100 kbps
return NetworkSpeedMode.LOW;
case TelephonyManager.NETWORK_TYPE_EVDO_0: // ~ 400-1000
// kbps
return NetworkSpeedMode.NORMAL;
case TelephonyManager.NETWORK_TYPE_EVDO_A: // ~ 600-1400
// kbps
return NetworkSpeedMode.NORMAL;
case TelephonyManager.NETWORK_TYPE_HSPA: // ~ 700-1700 kbps
return NetworkSpeedMode.NORMAL;
case TelephonyManager.NETWORK_TYPE_UMTS: // ~ 400-7000 kbps
return NetworkSpeedMode.NORMAL;
case 14: // TelephonyManager.NETWORK_TYPE_EHRPD: // ~ 1-2
// Mbps
return NetworkSpeedMode.NORMAL;
case 12: // TelephonyManager.NETWORK_TYPE_EVDO_B: // ~ 5
// Mbps
return NetworkSpeedMode.NORMAL;
case TelephonyManager.NETWORK_TYPE_HSDPA: // ~ 2-14 Mbps
return NetworkSpeedMode.HIGH;
case TelephonyManager.NETWORK_TYPE_HSUPA: // ~ 1-23 Mbps
return NetworkSpeedMode.HIGH;
case 15: // TelephonyManager.NETWORK_TYPE_HSPAP: // ~ 10-20
// Mbps
return NetworkSpeedMode.HIGH;
case 13: // TelephonyManager.NETWORK_TYPE_LTE: // ~ 10+ Mbps
return NetworkSpeedMode.HIGH;
case TelephonyManager.NETWORK_TYPE_UNKNOWN:
return NetworkSpeedMode.NORMAL;
default:
break;
}
}
}
}
return NetworkSpeedMode.UNKNOWN;
}
/**
* 获取在Mobile网络下的网络类型. 2G,3G,4G
*
* @param context
* @return
*/
public static int getNetworkClass(Context context) {
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivityManager != null) {
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
if (networkInfo != null) {
if (networkInfo.getType() == ConnectivityManager.TYPE_MOBILE) {
switch (networkInfo.getSubtype()) {
case TelephonyManager.NETWORK_TYPE_GPRS:
case TelephonyManager.NETWORK_TYPE_EDGE:
case TelephonyManager.NETWORK_TYPE_CDMA:
case TelephonyManager.NETWORK_TYPE_1xRTT:
case TelephonyManager.NETWORK_TYPE_IDEN:
return NETWORK_CLASS_2_G;
case TelephonyManager.NETWORK_TYPE_UMTS:
case TelephonyManager.NETWORK_TYPE_EVDO_0:
case TelephonyManager.NETWORK_TYPE_EVDO_A:
case TelephonyManager.NETWORK_TYPE_HSDPA:
case TelephonyManager.NETWORK_TYPE_HSUPA:
case TelephonyManager.NETWORK_TYPE_HSPA:
case 12: // TelephonyManager.NETWORK_TYPE_EVDO_B:
case 14: // TelephonyManager.NETWORK_TYPE_EHRPD:
case 15: // TelephonyManager.NETWORK_TYPE_HSPAP:
return NETWORK_CLASS_3_G;
case 13: // TelephonyManager.NETWORK_TYPE_LTE:
return NETWORK_CLASS_4_G;
default:
return NETWORK_CLASS_UNKNOWN;
}
} else if (networkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
return NETWORK_CLASS_WIFI;
}
}
}
return NETWORK_CLASS_UNKNOWN;
}
public static String getNetworkTypeName(Context context) {
String networkName = "UNKNOWN";
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivityManager != null) {
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
if (networkInfo != null) {
networkName = getNetworkTypeName(networkInfo.getType());
if (networkInfo.getType() == ConnectivityManager.TYPE_MOBILE) {
networkName += "#" + getNetworkTypeNameInMobile(networkInfo.getSubtype());
}
}
}
return networkName;
}
private static String getNetworkTypeNameInMobile(int type) {
switch (type) {
case TelephonyManager.NETWORK_TYPE_GPRS:
return "GPRS";
case TelephonyManager.NETWORK_TYPE_EDGE:
return "EDGE";
case TelephonyManager.NETWORK_TYPE_UMTS:
return "UMTS";
case TelephonyManager.NETWORK_TYPE_HSDPA:
return "HSDPA";
case TelephonyManager.NETWORK_TYPE_HSUPA:
return "HSUPA";
case TelephonyManager.NETWORK_TYPE_HSPA:
return "HSPA";
case TelephonyManager.NETWORK_TYPE_CDMA:
return "CDMA";
case TelephonyManager.NETWORK_TYPE_EVDO_0:
return "CDMA - EvDo rev. 0";
case TelephonyManager.NETWORK_TYPE_EVDO_A:
return "CDMA - EvDo rev. A";
case TelephonyManager.NETWORK_TYPE_EVDO_B:
return "CDMA - EvDo rev. B";
case TelephonyManager.NETWORK_TYPE_1xRTT:
return "CDMA - 1xRTT";
case TelephonyManager.NETWORK_TYPE_LTE:
return "LTE";
case TelephonyManager.NETWORK_TYPE_EHRPD:
return "CDMA - eHRPD";
case TelephonyManager.NETWORK_TYPE_IDEN:
return "iDEN";
case TelephonyManager.NETWORK_TYPE_HSPAP:
return "HSPA+";
default:
return "UNKNOWN";
}
}
private static String getNetworkTypeName(int type) {
switch (type) {
case ConnectivityManager.TYPE_MOBILE:
return "MOBILE";
case ConnectivityManager.TYPE_WIFI:
return "WIFI";
case ConnectivityManager.TYPE_MOBILE_MMS:
return "MOBILE_MMS";
case ConnectivityManager.TYPE_MOBILE_SUPL:
return "MOBILE_SUPL";
case ConnectivityManager.TYPE_MOBILE_DUN:
return "MOBILE_DUN";
case ConnectivityManager.TYPE_MOBILE_HIPRI:
return "MOBILE_HIPRI";
case ConnectivityManager.TYPE_WIMAX:
return "WIMAX";
case ConnectivityManager.TYPE_BLUETOOTH:
return "BLUETOOTH";
case ConnectivityManager.TYPE_DUMMY:
return "DUMMY";
case ConnectivityManager.TYPE_ETHERNET:
return "ETHERNET";
case 10: // ConnectivityManager.TYPE_MOBILE_FOTA:
return "MOBILE_FOTA";
case 11: // ConnectivityManager.TYPE_MOBILE_IMS:
return "MOBILE_IMS";
case 12: // ConnectivityManager.TYPE_MOBILE_CBS:
return "MOBILE_CBS";
case 13: // ConnectivityManager.TYPE_WIFI_P2P:
return "WIFI_P2P";
default:
return Integer.toString(type);
}
}
//中国电信
public static final int ISP_CTCC = 0;
//中国联通
public static final int ISP_CUCC = 1;
//中国移动
public static final int ISP_CMCC = 2;
//中国铁通
public static final int ISP_CTT = 3;
//其他
public static final int ISP_OTHERS = -1;
public static String getSimOperator(Context context) {
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
if (tm != null) {
return tm.getSimOperator();
}
return null;
}
public static String getNetworkOperator(Context context) {
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
if (tm != null) {
return tm.getNetworkOperator();
}
return null;
}
public interface LinkNetWorkType {
public static final int UNKNOWN = 0;
public static final int WIFI = 1;
public static final int WWAN = 2;
public static final int _2G = 3;
public static final int _3G = 4;
public static final int _4G = 5;
}
public static int getNetworkTypeForLink(Context context) {
try {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = cm.getActiveNetworkInfo();
if (ni != null) {
if (ni.getType() == ConnectivityManager.TYPE_WIFI) {
return LinkNetWorkType.WIFI;
} else {
if (ni.getType() == ConnectivityManager.TYPE_MOBILE) {
switch (ni.getSubtype()) {
case TelephonyManager.NETWORK_TYPE_GPRS:
case TelephonyManager.NETWORK_TYPE_EDGE:
case TelephonyManager.NETWORK_TYPE_CDMA:
case TelephonyManager.NETWORK_TYPE_1xRTT:
case TelephonyManager.NETWORK_TYPE_IDEN:
return LinkNetWorkType._2G;
case TelephonyManager.NETWORK_TYPE_UMTS:
case TelephonyManager.NETWORK_TYPE_EVDO_0:
case TelephonyManager.NETWORK_TYPE_EVDO_A:
case TelephonyManager.NETWORK_TYPE_HSDPA:
case TelephonyManager.NETWORK_TYPE_HSUPA:
case TelephonyManager.NETWORK_TYPE_HSPA:
case 12: // TelephonyManager.NETWORK_TYPE_EVDO_B:
case 14: // TelephonyManager.NETWORK_TYPE_EHRPD:
case 15: // TelephonyManager.NETWORK_TYPE_HSPAP:
return LinkNetWorkType._3G;
case 13: // TelephonyManager.NETWORK_TYPE_LTE:
return LinkNetWorkType._4G;
default:
return LinkNetWorkType._2G;
}
}
}
}
} catch (Exception e) {
return LinkNetWorkType.UNKNOWN;
}
return LinkNetWorkType.UNKNOWN;
}
}