同步PD:日志系统

This commit is contained in:
zlzw 2024-07-10 09:41:58 +08:00
parent cff607eabb
commit 6f7e5b123a
27 changed files with 428 additions and 193 deletions

View File

@ -13,7 +13,7 @@ import com.google.gson.JsonObject;
import com.yunbao.faceunity.entity.net.FineStickerEntity; import com.yunbao.faceunity.entity.net.FineStickerEntity;
import com.yunbao.faceunity.utils.FaceUnityData; import com.yunbao.faceunity.utils.FaceUnityData;
import com.yunbao.faceunity.utils.FileUtils; import com.yunbao.faceunity.utils.FileUtils;
import com.yunbao.faceunity.utils.ZipUtils; import com.yunbao.common.utils.ZipUtils;
import java.io.File; import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;

View File

@ -6,9 +6,6 @@ apply plugin: 'com.alibaba.arouter'
apply from: "../package_config.gradle" apply from: "../package_config.gradle"
android { android {
namespace "com.pandoralive.shayu" namespace "com.pandoralive.shayu"
dexOptions {
jumboMode = true
}
/* applicationVariants.all { variant -> /* applicationVariants.all { variant ->
variant.mergeAssetsProvider.configure { variant.mergeAssetsProvider.configure {
doLast { doLast {
@ -114,10 +111,11 @@ android {
println "清空build文件夹"; println "清空build文件夹";
for (final def project in rootProject.getAllprojects()) { for (final def project in rootProject.getAllprojects()) {
def name = variant.name.replace('Debug', '').replace('Release', '').toLowerCase() def name = variant.name.replace('Debug', '').replace('Release', '').toLowerCase()
delete project.buildDir //delete project.buildDir
delete 'app' + File.separator + name delete project.rootDir.absolutePath+File.separator+"app"+File.separator+name
println project.buildDir //println project.buildDir
} }
//delete project.rootDir.absolutePath + File.separator + "outputs"
String variantName = variant.name.capitalize() String variantName = variant.name.capitalize()
def processManifestTask = project.tasks.getByName("process${variantName}Manifest") def processManifestTask = project.tasks.getByName("process${variantName}Manifest")
processManifestTask.doLast { pm -> processManifestTask.doLast { pm ->
@ -183,29 +181,38 @@ android {
} }
} }
} }
variant.outputs.all { vt -> variant.assemble.doLast { vt ->
println("输出文件名:${vt}")
def channel = '' def channel = ''
def server='' def server = ''
if (variant.name.startsWith('huawei')) { if (variant.name.contains('huawei')) {
channel = "华为" channel = "华为"
} else if (variant.name.startsWith('samsung')) { } else if (variant.name.contains('samsung')) {
channel = "三星" channel = "三星"
} else if (variant.name.startsWith('google')) { } else if (variant.name.contains('google')) {
channel = "谷歌" channel = "谷歌"
} else { } else {
channel = "链接" channel = "链接"
} }
if(variant.name.contains('online')){ if (variant.name.contains('online')) {
server='正式服' server = '正式服'
}else{ } else {
server='测试服' server = '测试服'
}
def fileName = "[${new Date().format("yyyy-MM-dd HHmmss", TimeZone.getTimeZone("GMT+8"))}]潘多拉-${defaultConfig.versionName}-${defaultConfig.versionCode}-${channel}-${server}-${variant.buildType.name}.apk"
variant.outputs.forEach { fe ->
copy {
from fe.outputFile
into file("${project.rootDir}\\outputs\\apk\\")
rename { fn ->
fileName
}
}
} }
outputFileName = "[${new Date().format("yyyy-MM-dd HHmmss", TimeZone.getTimeZone("GMT+8"))}]潘多拉-${defaultConfig.versionName}-${channel}-${server}-${variant.buildType.name}.apk"
} }
tasks.named("sign${variant.name.capitalize()}Bundle", com.android.build.gradle.internal.tasks.FinalizeBundleTask) { tasks.named("sign${variant.name.capitalize()}Bundle", com.android.build.gradle.internal.tasks.FinalizeBundleTask) {
File file = finalBundleFile.asFile.get() File file = finalBundleFile.asFile.get()
def channel = '' def channel = ''
def server = ''
if (variant.name.startsWith('huawei')) { if (variant.name.startsWith('huawei')) {
channel = "华为" channel = "华为"
} else if (variant.name.startsWith('samsung')) { } else if (variant.name.startsWith('samsung')) {
@ -215,7 +222,13 @@ android {
} else { } else {
channel = "链接" channel = "链接"
} }
File finalFile = new File(file.parentFile, "[${new Date().format("yyyy-MM-dd HHmmss", TimeZone.getTimeZone("GMT+8"))}]潘多拉-${defaultConfig.versionName}-${channel}-${variant.buildType.name}.aab") if (variant.name.contains('online')) {
server = '正式服'
} else {
server = '测试服'
}
def fileName = "[${new Date().format("yyyy-MM-dd HHmmss", TimeZone.getTimeZone("GMT+8"))}]潘多拉-${defaultConfig.versionName}-${defaultConfig.versionCode}-${channel}-${server}-${variant.buildType.name}.aab"
File finalFile = new File("${project.rootDir}\\outputs\\aab", fileName)
finalBundleFile.set(finalFile) finalBundleFile.set(finalFile)
} }
project.afterEvaluate { project -> project.afterEvaluate { project ->
@ -294,13 +307,16 @@ android {
multiDexEnabled true multiDexEnabled true
ndk { ndk {
// TODO: // TODO:
println("打包版本:${rootProject.ext.manifestPlaceholders.isGooglePlay}") Gradle gradle = getGradle()
if (rootProject.ext.manifestPlaceholders.isGooglePlay == 0) { String tskReqStr = gradle.getStartParameter().getTaskRequests().args.toString()
println("处理ndk 版本 = " + tskReqStr)
def isLink = tskReqStr.contains("Link")
if (isLink) {
abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64" abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64"
println("链接包") println("打包ndk 链接")
} else { } else {
abiFilters "armeabi-v7a", "arm64-v8a" abiFilters "armeabi-v7a", "arm64-v8a"
println("谷歌包") println("打包ndk其他")
} }
} }
@ -357,17 +373,3 @@ dependencies {
} }
//
/*
project.afterEvaluate {
android.applicationVariants.all { variant ->
variant.outputs.each { output ->
output.processResources.doFirst { pm->
String manifestPath = output.processResources.manifestFile;
def manifestContent = file(manifestPath).getText()
manifestContent = manifestContent.replace('android.permission.REQUEST_INSTALL_PACKAGES', '')
file(manifestPath).write(manifestContent)
}
}
}
}*/

View File

@ -27,7 +27,7 @@ import com.facebook.appevents.AppEventsLogger;
import com.fm.openinstall.OpenInstall; import com.fm.openinstall.OpenInstall;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.pandoralive.shayu.R; import com.pandoralive.shayu.R;
import com.shayu.phonelive.utils.LogUtils; import com.yunbao.common.utils.LogUtils;
import com.tencent.imsdk.v2.V2TIMGroupMemberInfo; import com.tencent.imsdk.v2.V2TIMGroupMemberInfo;
import com.yunbao.common.http.Data; import com.yunbao.common.http.Data;
import com.tencent.imsdk.v2.V2TIMManager; import com.tencent.imsdk.v2.V2TIMManager;
@ -60,6 +60,7 @@ import com.yunbao.common.utils.MessageChatNotifyManager;
import com.yunbao.common.utils.MessageSayHiNotifyManager; import com.yunbao.common.utils.MessageSayHiNotifyManager;
import com.yunbao.common.utils.SoundUtils; import com.yunbao.common.utils.SoundUtils;
import com.yunbao.common.utils.SpUtil; import com.yunbao.common.utils.SpUtil;
import com.yunbao.common.utils.ToastUtil;
import com.yunbao.common.utils.WordUtil; import com.yunbao.common.utils.WordUtil;
import com.yunbao.live.activity.LiveActivity; import com.yunbao.live.activity.LiveActivity;
import com.yunbao.live.activity.SudRyGameActivity; import com.yunbao.live.activity.SudRyGameActivity;
@ -153,6 +154,7 @@ public class AppContext extends CommonAppContext {
} }
if (activity instanceof LoginActivity) { if (activity instanceof LoginActivity) {
MessageSayHiNotifyManager.getInstance().stop(); MessageSayHiNotifyManager.getInstance().stop();
MessageSayHiNotifyManager.getInstance().clear();
return; return;
} }
if (activity instanceof EntryActivity) { if (activity instanceof EntryActivity) {

View File

@ -416,7 +416,7 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
-ignorewarnings -ignorewarnings
# End of content from C:\Users\58381\Documents\AndroidProject\pandorapan\app\proguard-rules.pro # End of content from C:\Users\58381\Documents\AndroidProject\pandorapan\app\proguard-rules.pro
# The proguard configuration file for the following section is C:\Users\58381\Documents\AndroidProject\pandorapan\app\build\intermediates\aapt_proguard_file\link_testRelease\processLink_testReleaseResources\aapt_rules.txt # The proguard configuration file for the following section is C:\Users\58381\Documents\AndroidProject\pandorapan\app\build\intermediates\aapt_proguard_file\link_onlineRelease\processLink_onlineReleaseResources\aapt_rules.txt
-keep class androidx.core.app.CoreComponentFactory { <init>(); } -keep class androidx.core.app.CoreComponentFactory { <init>(); }
-keep class androidx.core.content.FileProvider { <init>(); } -keep class androidx.core.content.FileProvider { <init>(); }
-keep class androidx.core.content.FileProvider4Utils { <init>(); } -keep class androidx.core.content.FileProvider4Utils { <init>(); }
@ -1090,10 +1090,10 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
-keepclassmembers class * { *** videoEditClick(android.view.View); } -keepclassmembers class * { *** videoEditClick(android.view.View); }
# End of content from C:\Users\58381\Documents\AndroidProject\pandorapan\app\build\intermediates\aapt_proguard_file\link_testRelease\processLink_testReleaseResources\aapt_rules.txt # End of content from C:\Users\58381\Documents\AndroidProject\pandorapan\app\build\intermediates\aapt_proguard_file\link_onlineRelease\processLink_onlineReleaseResources\aapt_rules.txt
# The proguard configuration file for the following section is C:\Users\58381\Documents\AndroidProject\pandorapan\lib_faceunity\build\intermediates\consumer_proguard_dir\link_testRelease\exportLink_testReleaseConsumerProguardFiles\lib0\proguard.txt # The proguard configuration file for the following section is C:\Users\58381\Documents\AndroidProject\pandorapan\lib_faceunity\build\intermediates\consumer_proguard_dir\link_onlineRelease\exportLink_onlineReleaseConsumerProguardFiles\lib0\proguard.txt
# End of content from C:\Users\58381\Documents\AndroidProject\pandorapan\lib_faceunity\build\intermediates\consumer_proguard_dir\link_testRelease\exportLink_testReleaseConsumerProguardFiles\lib0\proguard.txt # End of content from C:\Users\58381\Documents\AndroidProject\pandorapan\lib_faceunity\build\intermediates\consumer_proguard_dir\link_onlineRelease\exportLink_onlineReleaseConsumerProguardFiles\lib0\proguard.txt
# The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\8d3e3177c15403546de73d87508067d6\transformed\jetified-XPopup-2.10.0\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\8d3e3177c15403546de73d87508067d6\transformed\jetified-XPopup-2.10.0\proguard.txt
# Generated keep rule for Lifecycle observer adapter. # Generated keep rule for Lifecycle observer adapter.
-if class com.lxj.xpopup.core.BasePopupView { -if class com.lxj.xpopup.core.BasePopupView {
@ -1153,9 +1153,9 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
# End of content from C:\gradle-6.1.1\caches\transforms-3\a1df9a6aa192455030f7c9970b70e0e9\transformed\material-1.4.0\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\a1df9a6aa192455030f7c9970b70e0e9\transformed\material-1.4.0\proguard.txt
# The proguard configuration file for the following section is C:\Users\58381\Documents\AndroidProject\pandorapan\lib_google\build\intermediates\consumer_proguard_dir\link_testRelease\exportLink_testReleaseConsumerProguardFiles\lib0\proguard.txt # The proguard configuration file for the following section is C:\Users\58381\Documents\AndroidProject\pandorapan\lib_google\build\intermediates\consumer_proguard_dir\link_onlineRelease\exportLink_onlineReleaseConsumerProguardFiles\lib0\proguard.txt
# End of content from C:\Users\58381\Documents\AndroidProject\pandorapan\lib_google\build\intermediates\consumer_proguard_dir\link_testRelease\exportLink_testReleaseConsumerProguardFiles\lib0\proguard.txt # End of content from C:\Users\58381\Documents\AndroidProject\pandorapan\lib_google\build\intermediates\consumer_proguard_dir\link_onlineRelease\exportLink_onlineReleaseConsumerProguardFiles\lib0\proguard.txt
# The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\2929985d9627ba3bb45a0ebd18eaf9d3\transformed\jetified-linesdk-5.0.1\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\2929985d9627ba3bb45a0ebd18eaf9d3\transformed\jetified-linesdk-5.0.1\proguard.txt
-keepattributes *Annotation* -keepattributes *Annotation*
@ -1506,36 +1506,6 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
public boolean isLayoutSuppressed(); public boolean isLayoutSuppressed();
} }
# End of content from C:\gradle-6.1.1\caches\transforms-3\e9de7db2640f13ae2ab2a585dfd19337\transformed\recyclerview-1.2.1\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\e9de7db2640f13ae2ab2a585dfd19337\transformed\recyclerview-1.2.1\proguard.txt
# The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\6905c56d188193f144e40adf093778f1\transformed\jetified-utilcode-1.30.0\proguard.txt
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in G:\Android_IDE\ADT\sdk/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
-dontwarn com.blankj.utilcode.**
-keepclassmembers class * {
@com.blankj.utilcode.util.BusUtils$Bus <methods>;
}
-keep public class * extends com.blankj.utilcode.util.ApiUtils$BaseApi
-keep,allowobfuscation @interface com.blankj.utilcode.util.ApiUtils$Api
-keep @com.blankj.utilcode.util.ApiUtils$Api class *
-keepattributes *Annotation*
# End of content from C:\gradle-6.1.1\caches\transforms-3\6905c56d188193f144e40adf093778f1\transformed\jetified-utilcode-1.30.0\proguard.txt
# The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\bb5ec4ef561b90312eb1ca52da1f144d\transformed\jetified-facebook-applinks-15.2.0\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\bb5ec4ef561b90312eb1ca52da1f144d\transformed\jetified-facebook-applinks-15.2.0\proguard.txt
# Copyright (c) Meta Platforms, Inc. and affiliates. # Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved. # All rights reserved.
@ -2049,6 +2019,36 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
# The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\acd3bab55cb4f819050ef57ea2e25987\transformed\jetified-beautysdk-202202241203\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\acd3bab55cb4f819050ef57ea2e25987\transformed\jetified-beautysdk-202202241203\proguard.txt
# End of content from C:\gradle-6.1.1\caches\transforms-3\acd3bab55cb4f819050ef57ea2e25987\transformed\jetified-beautysdk-202202241203\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\acd3bab55cb4f819050ef57ea2e25987\transformed\jetified-beautysdk-202202241203\proguard.txt
# The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\6905c56d188193f144e40adf093778f1\transformed\jetified-utilcode-1.30.0\proguard.txt
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in G:\Android_IDE\ADT\sdk/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
-dontwarn com.blankj.utilcode.**
-keepclassmembers class * {
@com.blankj.utilcode.util.BusUtils$Bus <methods>;
}
-keep public class * extends com.blankj.utilcode.util.ApiUtils$BaseApi
-keep,allowobfuscation @interface com.blankj.utilcode.util.ApiUtils$Api
-keep @com.blankj.utilcode.util.ApiUtils$Api class *
-keepattributes *Annotation*
# End of content from C:\gradle-6.1.1\caches\transforms-3\6905c56d188193f144e40adf093778f1\transformed\jetified-utilcode-1.30.0\proguard.txt
# The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\b75b75d929caf1295aec25af1cc611a0\transformed\jetified-crash-1.0.8\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\b75b75d929caf1295aec25af1cc611a0\transformed\jetified-crash-1.0.8\proguard.txt
-keep class cn.rongcloud.xcrash.NativeHandler { -keep class cn.rongcloud.xcrash.NativeHandler {
native <methods>; native <methods>;

View File

@ -258,4 +258,6 @@ dependencies {
//SDK //SDK
//api 'io.agora.rtc:agora-special-full:4.2.6.245' //api 'io.agora.rtc:agora-special-full:4.2.6.245'
api 'com.xj.marqueeView:marqueeView:0.1.20' api 'com.xj.marqueeView:marqueeView:0.1.20'
api rootProject.ext.dependencies["blank-utilcode"]
} }

View File

@ -59,7 +59,6 @@ public abstract class AbsActivity extends AppCompatActivity {
@Override @Override
protected void onCreate(@Nullable Bundle savedInstanceState) { protected void onCreate(@Nullable Bundle savedInstanceState) {
create();
Intent intent = getIntent(); Intent intent = getIntent();
if (intent != null) { if (intent != null) {
isFullWindow = getIntent().getBooleanExtra("isFull", false); isFullWindow = getIntent().getBooleanExtra("isFull", false);
@ -68,6 +67,7 @@ public abstract class AbsActivity extends AppCompatActivity {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
} }
} }
create();
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
mTag = this.getClass().getSimpleName(); mTag = this.getClass().getSimpleName();
setStatusBar(); setStatusBar();
@ -133,7 +133,7 @@ public abstract class AbsActivity extends AppCompatActivity {
/** /**
* 设置透明状态栏 * 设置透明状态栏
*/ */
private void setStatusBar() { public void setStatusBar() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = getWindow(); Window window = getWindow();

View File

@ -5,6 +5,7 @@ import android.content.ClipData;
import android.content.ClipboardManager; import android.content.ClipboardManager;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.graphics.Color;
import android.net.Uri; import android.net.Uri;
import android.os.Build; import android.os.Build;
import android.os.Handler; import android.os.Handler;
@ -12,6 +13,7 @@ import android.provider.MediaStore;
import android.text.TextUtils; import android.text.TextUtils;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.WindowManager;
import android.webkit.ValueCallback; import android.webkit.ValueCallback;
import android.webkit.WebChromeClient; import android.webkit.WebChromeClient;
import android.webkit.WebSettings; import android.webkit.WebSettings;
@ -82,6 +84,15 @@ public class WebViewActivity extends AbsActivity {
return R.layout.activity_webview; return R.layout.activity_webview;
} }
@Override
public void setStatusBar() {
getWindow().setStatusBarColor(Color.parseColor("#FFFFFF"));
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
}
@Override @Override
protected void main() { protected void main() {
String url = getIntent().getStringExtra(Constants.URL); String url = getIntent().getStringExtra(Constants.URL);

View File

@ -0,0 +1,16 @@
package com.yunbao.common.bean;
import com.alibaba.fastjson.annotation.JSONField;
public class QiniuLog extends BaseModel{
@JSONField(name = "log_type")
private int log_type;
public int getLog_type() {
return log_type;
}
public void setLog_type(int log_type) {
this.log_type = log_type;
}
}

View File

@ -8,6 +8,7 @@ import android.util.Log;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.blankj.utilcode.util.DeviceUtils;
import com.lzy.okgo.OkGo; import com.lzy.okgo.OkGo;
import com.lzy.okgo.callback.Callback; import com.lzy.okgo.callback.Callback;
import com.lzy.okgo.callback.StringCallback; import com.lzy.okgo.callback.StringCallback;
@ -29,6 +30,7 @@ import com.yunbao.common.utils.AppManager;
import com.yunbao.common.utils.DialogUitl; import com.yunbao.common.utils.DialogUitl;
import com.yunbao.common.utils.L; import com.yunbao.common.utils.L;
import com.yunbao.common.utils.SpUtil; import com.yunbao.common.utils.SpUtil;
import com.yunbao.common.utils.StringUtil;
import com.yunbao.common.utils.ToastUtil; import com.yunbao.common.utils.ToastUtil;
import com.yunbao.common.utils.VersionUtil; import com.yunbao.common.utils.VersionUtil;
import com.yunbao.common.utils.WordUtil; import com.yunbao.common.utils.WordUtil;
@ -487,6 +489,20 @@ public class CommonHttpUtil {
HttpClient.getInstance().get("User.getUserBaseinfo", CommonHttpConsts.GET_USER_BASEINFO) HttpClient.getInstance().get("User.getUserBaseinfo", CommonHttpConsts.GET_USER_BASEINFO)
.params("touid", touid) .params("touid", touid)
.execute(callback); .execute(callback);
} /**
* 上传文件 获取七牛云token的接口
*/
public static void getUploadQiNiuTokenLog(HttpCallback callback,String fileName) {
String uid = CommonAppConfig.getInstance().getUid();
if(StringUtil.isEmpty(uid)){
uid="NotLogin_"+ DeviceUtils.getUniqueDeviceId();
}
HttpClient.getInstance().get("Pdluserhome.getQiNiuToken3", "Pdluserhome.getQiNiuToken3")
.params("uid",uid)
.params("token", CommonAppConfig.getInstance().getToken())
.params("file_name", fileName)
.params("ext", ".zip")
.execute(callback);
} }
// //
// //埋点唯一性 // //埋点唯一性

View File

@ -36,7 +36,6 @@ public abstract class HttpCallback extends AbsCallback<JsonBean> {
public void onSuccess(Response<JsonBean> response) { public void onSuccess(Response<JsonBean> response) {
JsonBean bean = response.body(); JsonBean bean = response.body();
String gson = new Gson().toJson(bean); String gson = new Gson().toJson(bean);
Log.e("onSuccess", gson);
if (bean != null) { if (bean != null) {
if (200 == bean.getRet()) { if (200 == bean.getRet()) {

View File

@ -133,15 +133,18 @@ public class HttpLoggingInterceptor implements Interceptor {
ResponseBody responseBody = clone.body(); ResponseBody responseBody = clone.body();
boolean logBody = (printLevel == Level.BODY); boolean logBody = (printLevel == Level.BODY);
boolean logHeaders = (printLevel == Level.BODY || printLevel == Level.HEADERS); boolean logHeaders = (printLevel == Level.BODY || printLevel == Level.HEADERS);
StringBuilder sb=new StringBuilder();
try { try {
log("<-- " + clone.code() + ' ' + clone.message() + ' ' + clone.request().url() + " (" + tookMs + "ms"); sb.append("<-- ").append(clone.code())
.append(' ').append(clone.message())
.append(' ').append(clone.request().url())
.append(" (").append(tookMs).append("ms\n");
if (logHeaders) { if (logHeaders) {
Headers headers = clone.headers(); Headers headers = clone.headers();
for (int i = 0, count = headers.size(); i < count; i++) { for (int i = 0, count = headers.size(); i < count; i++) {
log("\t" + headers.name(i) + ": " + headers.value(i)); sb.append("\t").append(headers.name(i)).append(": ").append(headers.value(i)).append("\n");
} }
log(" "); sb.append("\n");
if (logBody && HttpHeaders.hasBody(clone)) { if (logBody && HttpHeaders.hasBody(clone)) {
if (responseBody == null) return response; if (responseBody == null) return response;
@ -149,18 +152,19 @@ public class HttpLoggingInterceptor implements Interceptor {
byte[] bytes = IOUtils.toByteArray(responseBody.byteStream()); byte[] bytes = IOUtils.toByteArray(responseBody.byteStream());
MediaType contentType = responseBody.contentType(); MediaType contentType = responseBody.contentType();
String body = new String(bytes, getCharset(contentType)); String body = new String(bytes, getCharset(contentType));
log("\tbody:" + body); sb.append("\tbody:").append(body).append("\n");
responseBody = ResponseBody.create(responseBody.contentType(), bytes); responseBody = ResponseBody.create(responseBody.contentType(), bytes);
return response.newBuilder().body(responseBody).build(); return response.newBuilder().body(responseBody).build();
} else { } else {
log("\tbody: maybe [binary body], omitted!"); sb.append("\tbody: maybe [binary body], omitted!").append("\n");
} }
} }
} }
} catch (Exception e) { } catch (Exception e) {
OkLogger.printStackTrace(e); OkLogger.printStackTrace(e);
} finally { } finally {
log("<-- END HTTP"); sb.append("<-- END HTTP").append("\n");
log(sb.toString());
} }
return response; return response;
} }

View File

@ -69,6 +69,7 @@ import com.yunbao.common.bean.PrankGiftBean;
import com.yunbao.common.bean.PrankGiftResultBean; import com.yunbao.common.bean.PrankGiftResultBean;
import com.yunbao.common.bean.PrankHttpTurntableBean; import com.yunbao.common.bean.PrankHttpTurntableBean;
import com.yunbao.common.bean.PrankProgressBean; import com.yunbao.common.bean.PrankProgressBean;
import com.yunbao.common.bean.QiniuLog;
import com.yunbao.common.bean.QuickGiftSendGiftModel; import com.yunbao.common.bean.QuickGiftSendGiftModel;
import com.yunbao.common.bean.RandomPkUserBean; import com.yunbao.common.bean.RandomPkUserBean;
import com.yunbao.common.bean.RankPkInfoBean; import com.yunbao.common.bean.RankPkInfoBean;
@ -1405,4 +1406,8 @@ public interface PDLiveApi {
@Query("anchor_id")String anchor_id, @Query("anchor_id")String anchor_id,
@Query("gift_id")String gift_id @Query("gift_id")String gift_id
); );
@GET("/api/public/?service=Tx.androidQiniuLog")
Observable<ResponseModel<QiniuLog>> getPrankList(
@Query("type")String type
);
} }

View File

@ -71,6 +71,7 @@ import com.yunbao.common.bean.PrankGiftBean;
import com.yunbao.common.bean.PrankGiftResultBean; import com.yunbao.common.bean.PrankGiftResultBean;
import com.yunbao.common.bean.PrankHttpTurntableBean; import com.yunbao.common.bean.PrankHttpTurntableBean;
import com.yunbao.common.bean.PrankProgressBean; import com.yunbao.common.bean.PrankProgressBean;
import com.yunbao.common.bean.QiniuLog;
import com.yunbao.common.bean.QuickGiftSendGiftModel; import com.yunbao.common.bean.QuickGiftSendGiftModel;
import com.yunbao.common.bean.RandomPkUserBean; import com.yunbao.common.bean.RandomPkUserBean;
import com.yunbao.common.bean.RankPkInfoBean; import com.yunbao.common.bean.RankPkInfoBean;
@ -3298,6 +3299,32 @@ public class LiveNetManager {
} }
/**
* 上报日志相关
* @param type 1为查询3为删除
* @param callback
*/
public void getLogUpdateStatus(String type, HttpCallback<QiniuLog>callback) {
API.get().pdLiveApi(mContext)
.getPrankList(type)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(listResponseModel -> {
if (callback != null) {
callback.onSuccess(listResponseModel.getData().getInfo());
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
throwable.printStackTrace();
if (callback != null) {
callback.onError(mContext.getString(R.string.net_error));
}
}
}).isDisposed();
}
public void getPdluserFriend(int p, HttpCallback<List<MessageChatUserBean>> callback) { public void getPdluserFriend(int p, HttpCallback<List<MessageChatUserBean>> callback) {
API.get().pdLiveApi(mContext) API.get().pdLiveApi(mContext)
.getPdluserFriend(p) .getPdluserFriend(p)
@ -3551,7 +3578,6 @@ public class LiveNetManager {
} }
public void updateFile(File file, HttpCallback<AvatarBean> callback) { public void updateFile(File file, HttpCallback<AvatarBean> callback) {
MultipartBody.Part uploadFile = createUploadFile(file); MultipartBody.Part uploadFile = createUploadFile(file);
API.get().pdLiveApi(mContext) API.get().pdLiveApi(mContext)

View File

@ -11,6 +11,7 @@ public class UploadBean {
public static final int IMG = 0; public static final int IMG = 0;
public static final int VIDEO = 1; public static final int VIDEO = 1;
public static final int VOICE = 2; public static final int VOICE = 2;
public static final int LOG = 3;
private File mOriginFile;//要被上传的源文件 private File mOriginFile;//要被上传的源文件
private File mCompressFile;//压缩后的图片文件 private File mCompressFile;//压缩后的图片文件
private String mRemoteFileName;//上传成功后在云存储上的文件名字 private String mRemoteFileName;//上传成功后在云存储上的文件名字

View File

@ -1,5 +1,7 @@
package com.yunbao.common.upload; package com.yunbao.common.upload;
import static java.text.DateFormat.DEFAULT;
import android.content.Context; import android.content.Context;
import android.text.TextUtils; import android.text.TextUtils;
@ -11,6 +13,7 @@ import com.qiniu.android.storage.UpCompletionHandler;
import com.qiniu.android.storage.UploadManager; import com.qiniu.android.storage.UploadManager;
import com.yunbao.common.http.CommonHttpUtil; import com.yunbao.common.http.CommonHttpUtil;
import com.yunbao.common.http.HttpCallback; import com.yunbao.common.http.HttpCallback;
import com.yunbao.common.manager.IMLoginManager;
import com.yunbao.common.utils.L; import com.yunbao.common.utils.L;
import com.yunbao.common.utils.StringUtil; import com.yunbao.common.utils.StringUtil;
@ -18,7 +21,10 @@ import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import java.io.File; import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Locale;
import top.zibin.luban.Luban; import top.zibin.luban.Luban;
@ -52,7 +58,9 @@ public class UploadQnImpl implements UploadStrategy {
assert response != null; assert response != null;
mList.get(mIndex).setRemoteAccessUrl(response.getString("key")); mList.get(mIndex).setRemoteAccessUrl(response.getString("key"));
} catch (JSONException e) { } catch (JSONException e) {
throw new RuntimeException(e); // throw new RuntimeException(e);
L.e(e);
return;
} }
if (mList == null || mList.size() == 0) { if (mList == null || mList.size() == 0) {
if (mUploadCallback != null) { if (mUploadCallback != null) {
@ -72,6 +80,8 @@ public class UploadQnImpl implements UploadStrategy {
compressedFile.delete(); compressedFile.delete();
} }
} }
} else if (uploadBean.getType() == UploadBean.LOG) {
uploadBean.getOriginFile().delete();
} }
mIndex++; mIndex++;
if (mIndex < mList.size()) { if (mIndex < mList.size()) {
@ -90,6 +100,10 @@ public class UploadQnImpl implements UploadStrategy {
@Override @Override
public void upload(List<UploadBean> list, boolean needCompress, UploadCallback callback, boolean isImg) { public void upload(List<UploadBean> list, boolean needCompress, UploadCallback callback, boolean isImg) {
upload(list, needCompress, callback, isImg, false);
}
public void upload(List<UploadBean> list, boolean needCompress, UploadCallback callback, boolean isImg, boolean isLog) {
System.err.println("-------upload------>" + list.size()); System.err.println("-------upload------>" + list.size());
if (callback == null) { if (callback == null) {
return; return;
@ -127,7 +141,11 @@ public class UploadQnImpl implements UploadStrategy {
} }
}; };
} }
CommonHttpUtil.getUploadQiNiuTokenNew(mGetUploadTokenCallback, isImg); if (isLog) {
CommonHttpUtil.getUploadQiNiuTokenLog(mGetUploadTokenCallback, list.get(0).getOriginFile().getName());
} else {
CommonHttpUtil.getUploadQiNiuToken(mGetUploadTokenCallback, isImg);
}
} }
@Override @Override
@ -159,8 +177,16 @@ public class UploadQnImpl implements UploadStrategy {
bean.setRemoteFileName(StringUtil.contact(StringUtil.generateFileName(), ".mp4")); bean.setRemoteFileName(StringUtil.contact(StringUtil.generateFileName(), ".mp4"));
} else if (bean.getType() == UploadBean.VOICE) { } else if (bean.getType() == UploadBean.VOICE) {
bean.setRemoteFileName(StringUtil.contact(StringUtil.generateFileName(), ".m4a")); bean.setRemoteFileName(StringUtil.contact(StringUtil.generateFileName(), ".m4a"));
} else if (bean.getType() == UploadBean.LOG) {
bean.setRemoteFileName("logs/"
+ IMLoginManager.get(mContext).getUserInfo().getId()
+ "/"
+ SimpleDateFormat.getDateInstance(DEFAULT, Locale.CHINA).format(new Date())
+ "/"
+ bean.getOriginFile().getName()
);
} }
System.err.println("-------mIndex >= bean.getType() == UploadBean.IMG------>" + bean); System.err.println("-------mIndex >= bean.getType() == " + bean.getType() + "------>" + bean);
upload(bean); upload(bean);
/*if (bean.getType() == UploadBean.IMG && mNeedCompress) { /*if (bean.getType() == UploadBean.IMG && mNeedCompress) {
System.err.println("-------UploadBean.IMG && mNeedCompress------>" + bean + "UploadBean.IMG:" + UploadBean.IMG + "__mNeedCompress" + mNeedCompress); System.err.println("-------UploadBean.IMG && mNeedCompress------>" + bean + "UploadBean.IMG:" + UploadBean.IMG + "__mNeedCompress" + mNeedCompress);

View File

@ -2,6 +2,13 @@ package com.yunbao.common.utils;
import android.util.Log; import android.util.Log;
import org.json.JSONException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.UUID;
/** /**
* Created by cxf on 2017/8/3. * Created by cxf on 2017/8/3.
*/ */
@ -24,13 +31,23 @@ public class L {
} }
} }
final static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);
public static void e(String tag, String s) { public static void e(String tag, String s) {
if (sDeBug) { if (sDeBug) {
Log.e(tag, s); Log.e(tag, s);
} else {
String uuid = UUID.randomUUID().toString();
Log.e(tag, uuid);
LogUtils.addSafeLog(dateFormat.format(new Date()) + " [" + uuid + "|" + tag + "] " + s);
} }
} }
public static void setDeBug(boolean deBug) { public static void setDeBug(boolean deBug) {
sDeBug = deBug; sDeBug = deBug;
} }
public static void e(Exception e) {
Log.e("Exception", e.getMessage(), e);
}
} }

View File

@ -24,28 +24,25 @@ import com.lzy.okgo.request.PostRequest;
import com.lzy.okserver.OkUpload; import com.lzy.okserver.OkUpload;
import com.lzy.okserver.upload.UploadListener; import com.lzy.okserver.upload.UploadListener;
import com.lzy.okserver.upload.UploadTask; import com.lzy.okserver.upload.UploadTask;
import com.yunbao.common.BuildConfig;
import com.yunbao.common.CommonAppConfig; import com.yunbao.common.CommonAppConfig;
import com.yunbao.common.bean.IMLoginModel; import com.yunbao.common.http.live.LiveNetManager;
import com.yunbao.common.manager.IMLoginManager; import com.yunbao.common.upload.UploadBean;
import com.yunbao.common.upload.UploadCallback;
import com.yunbao.common.upload.UploadQnImpl;
import java.io.BufferedOutputStream;
import java.io.File; import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter; import java.io.FileWriter;
import java.io.IOException; import java.io.IOException;
import java.nio.channels.Channels;
import java.nio.channels.FileChannel;
import java.nio.channels.WritableByteChannel;
import java.nio.file.Files; import java.nio.file.Files;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import okhttp3.Call; import okhttp3.Call;
import okhttp3.Callback; import okhttp3.Callback;
@ -149,91 +146,56 @@ public class LogUtil {
public static void shareFile(Context context) { public static void shareFile(Context context) {
try { String title = "[Pandorapan]" + CommonAppConfig.getInstance().getUid() + "_";
IMLoginModel bean = IMLoginManager.get(context).getUserInfo();
boolean isAnchor = false;
if (bean != null) {
isAnchor = bean.anchorUserType();
}
//有debug文件或主播才允许
if (!new File(Environment.getExternalStorageDirectory().getAbsolutePath(), "pdlive.debug").exists() && !isAnchor) {
return;
}
} catch (Exception e) {
return;
}
/* if (PermissionChecker.checkCallingOrSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PERMISSION_GRANTED) {
ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 100);
return;
}*/
String title = "[PDLIVE]" + CommonAppConfig.getInstance().getUid() + "_";
String today = title + SimpleDateFormat.getDateInstance(DEFAULT, Locale.CHINA).format(new Date()); String today = title + SimpleDateFormat.getDateInstance(DEFAULT, Locale.CHINA).format(new Date());
File dir = new File(context.getDir("files", Context.MODE_PRIVATE).getAbsolutePath() + File.separator); File dir = new File("/data/data/" + context.getPackageName() + File.separator);
File zip = new File(context.getDir("files", Context.MODE_PRIVATE).getAbsolutePath() + File.separator + today + ".zip"); File zip = new File(context.getDir("files", Context.MODE_PRIVATE).getAbsolutePath() + File.separator + today + ".zip");
try { try {
ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(zip))); List<String> filters = getFiltersList(context.getPackageName());
FileInputStream fis = null; filters.add(context.getPackageName() + File.separator + "app_files" + File.separator + today + ".zip");
WritableByteChannel writableByteChannel = Channels.newChannel(zos); List<String> srcList = new ArrayList<>();
if (dir.listFiles() != null) { srcList.add(dir.getAbsolutePath());
for (File file : dir.listFiles()) { srcList.add(context.getExternalFilesDir("").getAbsolutePath());
if (file.getName().endsWith(".log")) { LogUtils.endSafeLog();
ZipEntry entry = new ZipEntry(file.getName()); ZipUtils.zipFolder(srcList, zip.getAbsolutePath(), filters, new Runnable() {
zos.putNextEntry(entry);
fis = new FileInputStream(file);
FileChannel channel = fis.getChannel();
channel.transferTo(0, file.length() - 1, writableByteChannel);
fis.close();
}
}
}
zos.close();
writableByteChannel.close();
} catch (Exception e) {
e.printStackTrace();
}
if (zip.exists()) {
DialogUitl.showSimpleDialog(context, "上报日志", new DialogUitl.SimpleCallback() {
@Override
public void onConfirmClick(Dialog dialog, String content) {
new Thread(new Runnable() {
@Override @Override
public void run() { public void run() {
uploadLog(zip); if (BuildConfig.DEBUG) {
// return;
} }
}).start(); UploadQnImpl mUploadStrategy = new UploadQnImpl(context);
dialog.dismiss(); List<UploadBean> list = new ArrayList<>();
ToastUtil.show("OK"); list.add(new UploadBean(zip, UploadBean.LOG));
Intent share = new Intent(Intent.ACTION_SEND); mUploadStrategy.upload(list, false, new UploadCallback() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { @Override
Uri contentUri = FileProvider.getUriForFile(context, context.getPackageName() + ".fileprovider", zip); public void onFinish(List<UploadBean> list, boolean success) {
share.putExtra(Intent.EXTRA_STREAM, contentUri); if (success) {
share.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); LiveNetManager.get(context).getLogUpdateStatus("3", null);
} else {
share.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(zip));
} }
share.setType("application/vnd.ms-excel"); LogUtils.startSafeLog(context);
share.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
share.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
context.startActivity(Intent.createChooser(share, "分享文件"));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R && CommonAppConfig.IS_GOOGLE_PLAY == 0) {
if (!Environment.isExternalStorageManager()) {
Intent intent = new Intent(ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
context.startActivity(intent);
} }
}, false, true);
} }
File out = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + zip.getName()); });
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
Files.copy(zip.toPath(), out.toPath());
}
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
});
} private static @NonNull List<String> getFiltersList(String packageName) {
List<String> filters = new ArrayList<>();
filters.add(packageName + File.separator + "files" + File.separator + "gif");
filters.add(packageName + File.separator + "app_textures");
filters.add(packageName + File.separator + "app_webview");
filters.add(packageName + File.separator + "code_cache");
filters.add(packageName + File.separator + "databases");
filters.add(packageName + File.separator + "cache" + File.separator + "https");
filters.add(packageName + File.separator + "cache" + File.separator + "image");
filters.add(packageName + File.separator + "cache" + File.separator + "jtechCache");
filters.add(packageName + File.separator + "cache" + File.separator + "picasso-cache");
filters.add(packageName + File.separator + "cache" + File.separator + "svga");
filters.add(packageName + File.separator + "cache" + File.separator + "WebView");
return filters;
} }
private static String TAG = "Upload"; private static String TAG = "Upload";
@ -271,5 +233,36 @@ public class LogUtil {
}); });
} }
private static void openShareDialog(Context context, File zip) {
Intent share = new Intent(Intent.ACTION_SEND);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
Uri contentUri = FileProvider.getUriForFile(context, context.getPackageName() + ".fileprovider", zip);
share.putExtra(Intent.EXTRA_STREAM, contentUri);
share.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
} else {
share.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(zip));
}
share.setType("application/vnd.ms-excel");
share.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
share.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
context.startActivity(Intent.createChooser(share, "分享文件"));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R && CommonAppConfig.IS_GOOGLE_PLAY == 0) {
if (!Environment.isExternalStorageManager()) {
Intent intent = new Intent(ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
context.startActivity(intent);
}
}
File out = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + zip.getName());
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
Files.copy(zip.toPath(), out.toPath());
}
} catch (Exception e) {
e.printStackTrace();
}
}
} }

View File

@ -1,4 +1,4 @@
package com.shayu.phonelive.utils; package com.yunbao.common.utils;
import static java.text.DateFormat.DEFAULT; import static java.text.DateFormat.DEFAULT;
@ -17,8 +17,11 @@ import java.util.Calendar;
import java.util.Date; import java.util.Date;
import java.util.Locale; import java.util.Locale;
import java.util.Objects; import java.util.Objects;
import java.util.concurrent.LinkedBlockingQueue;
public class LogUtils { public class LogUtils {
private static final LinkedBlockingQueue<String> QUEUE = new LinkedBlockingQueue<>();
/** /**
* 采集所有日志 * 采集所有日志
*/ */
@ -37,7 +40,7 @@ public class LogUtils {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream())); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line; String line;
PrintWriter writer = null; PrintWriter writer = null;
String title = "[PDLIVE]" + CommonAppConfig.getInstance().getUid() + "_"; String title = "[Pandorapan]" + CommonAppConfig.getInstance().getUid() + "_";
String today = title + SimpleDateFormat.getDateInstance(DEFAULT, Locale.CHINA).format(new Date()); String today = title + SimpleDateFormat.getDateInstance(DEFAULT, Locale.CHINA).format(new Date());
File dir = new File(context.getDir("files", Context.MODE_PRIVATE).getAbsolutePath() + File.separator); File dir = new File(context.getDir("files", Context.MODE_PRIVATE).getAbsolutePath() + File.separator);
if (dir.listFiles() != null) { if (dir.listFiles() != null) {
@ -68,7 +71,55 @@ public class LogUtils {
} }
} }
}).start(); }).start();
startSafeLog(context);
}
private static Thread safeThread;
private static boolean writerSafeLog = true;
public static void startSafeLog(Context context) {
if (safeThread != null && safeThread.isAlive()) {
return;
}
safeThread = new Thread(new Runnable() {
@Override
public void run() {
try {
String title = CommonAppConfig.getInstance().getUid() + "_";
String today = title + SimpleDateFormat.getDateInstance(DEFAULT, Locale.CHINA).format(new Date());
File saveFile = new File(context.getDir("files", Context.MODE_PRIVATE).getAbsolutePath() + File.separator + today + ".safe");
saveFile.createNewFile();
FileOutputStream os = new FileOutputStream(saveFile, true);
PrintWriter writer = new PrintWriter(os);
while (writerSafeLog) {
if (!QUEUE.isEmpty()) {
writer.append(QUEUE.poll()).write("\n");
writer.flush();
} else {
Thread.sleep(1000);
}
}
while (!QUEUE.isEmpty()){
writer.append(QUEUE.poll()).write("\n");
writer.flush();
}
writer.flush();
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
});
safeThread.setName("safeLog");
safeThread.start();
}
public static void addSafeLog(String log) {
QUEUE.offer(log);
}
public static void endSafeLog() {
writerSafeLog = false;
} }
/** /**

View File

@ -81,7 +81,7 @@ public class MessageSayHiNotifyManager {
} }
data.setOldTime(hiBean.getNextTime()); data.setOldTime(hiBean.getNextTime());
hiBean = data; hiBean = data;
if (data.getUser() == null || data.getStatus()==0) { if (data.getUser() == null || data.getStatus() == 0) {
timer.postDelayed(createTask(), data.getNextTime() * 1000L); timer.postDelayed(createTask(), data.getNextTime() * 1000L);
return; return;
} }
@ -126,6 +126,11 @@ public class MessageSayHiNotifyManager {
} }
} }
public void clear() {
hiBean = null;
isInit = false;
}
public void stop() { public void stop() {
Log.i(TAG, "stop: 停止定时器当前Activity:" + AppManager.getInstance().getLastActivity() + "|" + hiBean); Log.i(TAG, "stop: 停止定时器当前Activity:" + AppManager.getInstance().getLastActivity() + "|" + hiBean);
isStopShow = true; isStopShow = true;
@ -196,6 +201,12 @@ public class MessageSayHiNotifyManager {
hiBean.setStatus(-2); hiBean.setStatus(-2);
return; return;
} }
if (hiBean.getUser().getId() == 0 || hiBean.getUser().getUser() == null) {
Log.i(TAG, "showDialog: 数据为空,不展示");
isRun = false;
hiBean.setStatus(-2);
return;
}
isShowDialog = true; isShowDialog = true;
Log.i(TAG, "showDialog: 打开本轮打招呼弹框 " + hiBean); Log.i(TAG, "showDialog: 打开本轮打招呼弹框 " + hiBean);
lastActivity = AppManager.getInstance().getLastActivity().getClass().getSimpleName(); lastActivity = AppManager.getInstance().getLastActivity().getClass().getSimpleName();

View File

@ -1,10 +1,11 @@
package com.yunbao.faceunity.utils; package com.yunbao.common.utils;
import android.util.Log; import android.util.Log;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -151,16 +152,36 @@ public class ZipUtils {
* @param zipFileString 解压完成的Zip路径 * @param zipFileString 解压完成的Zip路径
* @throws Exception * @throws Exception
*/ */
public static void zipFolder(String srcFileString, String zipFileString) throws Exception { public static void zipFolder(List<String> srcFileString, String zipFileString, List<String> filters, Runnable runnable) throws Exception {
if (filters == null) {
filters = new ArrayList<>();
}
filters.add(new File(zipFileString).getAbsolutePath());
final List<String> tmp = new ArrayList<>(filters);
//创建ZIP //创建ZIP
ZipOutputStream outZip = new ZipOutputStream(new FileOutputStream(zipFileString)); ZipOutputStream outZip = new ZipOutputStream(new FileOutputStream(zipFileString));
//创建文件
File file = new File(srcFileString); new Thread(new Runnable() {
@Override
public void run() {
try {
for (String src : srcFileString) {
File file = new File(src);
//压缩 //压缩
zipFiles(file.getParent() + File.separator, file.getName(), outZip); zipFiles(file.getParent() + File.separator, file.getName(), outZip, tmp);
}
//创建文件
//完成和关闭 //完成和关闭
outZip.finish(); outZip.finish();
outZip.close(); outZip.close();
runnable.run();
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
} }
/** /**
@ -171,9 +192,15 @@ public class ZipUtils {
* @param zipOutputSteam * @param zipOutputSteam
* @throws Exception * @throws Exception
*/ */
private static void zipFiles(String folderString, String fileString, ZipOutputStream zipOutputSteam) throws Exception { private static void zipFiles(String folderString, String fileString, ZipOutputStream zipOutputSteam, List<String> filters) throws Exception {
if (zipOutputSteam == null) if (zipOutputSteam == null)
return; return;
for (String filter : filters) {
if (fileString.startsWith(filter)) {
return;
}
}
System.out.println("压缩文件:" + folderString + "|" + fileString);
File file = new File(folderString + fileString); File file = new File(folderString + fileString);
if (file.isFile()) { if (file.isFile()) {
ZipEntry zipEntry = new ZipEntry(fileString); ZipEntry zipEntry = new ZipEntry(fileString);
@ -196,7 +223,7 @@ public class ZipUtils {
} }
//子文件和递归 //子文件和递归
for (int i = 0; i < fileList.length; i++) { for (int i = 0; i < fileList.length; i++) {
zipFiles(folderString, fileString + File.separator + fileList[i], zipOutputSteam); zipFiles(folderString, fileString + File.separator + fileList[i], zipOutputSteam, filters);
} }
} }
} }

View File

@ -17,8 +17,9 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="72dp" android:layout_height="72dp"
android:background="@color/white"
android:paddingTop="24dp" android:paddingTop="24dp"
android:background="@color/white"> tools:visibility="gone">
<RelativeLayout <RelativeLayout
android:layout_width="match_parent" android:layout_width="match_parent"

View File

@ -4,7 +4,7 @@ ext {
buildToolsVersion: "29.0.2", buildToolsVersion: "29.0.2",
minSdkVersion : 23, minSdkVersion : 23,
targetSdkVersion : 33, targetSdkVersion : 33,
versionCode : 531, versionCode : 534,
versionName : "6.7.1", versionName : "6.7.1",
namespace : "com.pandoralive.shayu" namespace : "com.pandoralive.shayu"
] ]

View File

@ -242,7 +242,7 @@ public class SWManager extends BaseCacheManager {
// 功能模块的类型为视频截图上传 // 功能模块的类型为视频截图上传
config.modules[0].type = ContentInspectConfig.CONTENT_INSPECT_TYPE_SUPERVISE; config.modules[0].type = ContentInspectConfig.CONTENT_INSPECT_TYPE_SUPERVISE;
// 视频截图上传的频率为 2 秒一次 // 视频截图上传的频率为 2 秒一次
config.modules[0].interval = 2; config.modules[0].interval = 20;
mRtcEngine.enableContentInspect(true, config); mRtcEngine.enableContentInspect(true, config);
} }

View File

@ -1 +1 @@
apply plugin: 'com.android.library' apply plugin: 'img-optimizer' apply plugin: 'kotlin-android' apply from: "../package_config.gradle" android { namespace "com.yunbao.live" compileSdk rootProject.ext.android.compileSdkVersion aaptOptions.cruncherEnabled = false aaptOptions.useNewCruncher = false packagingOptions { pickFirst "lib/armeabi/libyuvutils.so" pickFirst "lib/arm64-v8a/libyuvutils.so" pickFirst "lib/armeabi-v7a/libyuvutils.so" pickFirst "lib/armeabi/libyuvtools.so" pickFirst "lib/arm64-v8a/libyuvtools.so" pickFirst "lib/armeabi-v7a/libyuvtools.so" exclude "lib/arm64-v8a/libmmcv_api_handgesture.so" exclude "lib/arm64-v8a/libmmcv_api_express.so" exclude "lib/arm64-v8a/libMediaEncoder.so" exclude "lib/arm64-v8a/libarcore_sdk_c.so" exclude "lib/arm64-v8a/libmediadecoder.so" exclude "lib/arm64-v8a/libMediaMuxer.so" exclude "lib/arm64-v8a/libarcore_sdk_jni.so" exclude "lib/arm64-v8a/libMediaUtils.so" exclude "lib/arm64-v8a/libcosmosffmpeg.so" } defaultConfig { minSdkVersion rootProject.ext.android.minSdkVersion targetSdkVersion rootProject.ext.android.targetSdkVersion versionCode rootProject.ext.android.versionCode versionName rootProject.ext.android.versionName manifestPlaceholders = rootProject.ext.manifestPlaceholders ndk { //abiFilters "armeabi-v7a", "arm64-v8a","x86","x86_64" if (rootProject.ext.manifestPlaceholders.isGooglePlay == 0) { abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64" } else { abiFilters "armeabi-v7a", "arm64-v8a" } } javaCompileOptions { annotationProcessorOptions { arguments = [AROUTER_MODULE_NAME: project.getName()] } } } aaptOptions { cruncherEnabled = false useNewCruncher = false } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } kotlinOptions { allWarningsAsErrors = true } compileOptions { sourceCompatibility JavaVersion.VERSION_18 targetCompatibility JavaVersion.VERSION_18 } } repositories { flatDir { dirs 'libs', '../libs' } mavenCentral() } dependencies { implementation 'androidx.constraintlayout:constraintlayout:2.0.0' implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar']) implementation (name:'../libs/beautysdk-202202241203',ext:'aar') implementation (name:'../libs/svgaplayer-release-v1.2.1',ext:'aar') //socket.io implementation('io.socket:socket.io-client:1.0.0') { exclude group: 'org.json', module: 'json' } //common api project(path:':lib_faceunity')//声网-新娱美颜 api project(path:':FaceUnity')//融云-新娱美颜 api project(path:':common')//公共库 api project(':Share')//分享 annotationProcessor rootProject.ext.dependencies["arouter-compiler"] //工具 api rootProject.ext.dependencies["blank-utilcode"] implementation 'com.eightbitlab:blurview:1.6.6' implementation 'com.google.code.gson:gson:2.8.6' implementation "com.getkeepsafe.relinker:relinker:1.4.4" } apply plugin: 'com.android.library' apply plugin: 'img-optimizer' apply plugin: 'kotlin-android' apply from: "../package_config.gradle" android { namespace "com.yunbao.live" compileSdk rootProject.ext.android.compileSdkVersion aaptOptions.cruncherEnabled = false aaptOptions.useNewCruncher = false packagingOptions { pickFirst "lib/armeabi/libyuvutils.so" pickFirst "lib/arm64-v8a/libyuvutils.so" pickFirst "lib/armeabi-v7a/libyuvutils.so" pickFirst "lib/armeabi/libyuvtools.so" pickFirst "lib/arm64-v8a/libyuvtools.so" pickFirst "lib/armeabi-v7a/libyuvtools.so" exclude "lib/arm64-v8a/libmmcv_api_handgesture.so" exclude "lib/arm64-v8a/libmmcv_api_express.so" exclude "lib/arm64-v8a/libMediaEncoder.so" exclude "lib/arm64-v8a/libarcore_sdk_c.so" exclude "lib/arm64-v8a/libmediadecoder.so" exclude "lib/arm64-v8a/libMediaMuxer.so" exclude "lib/arm64-v8a/libarcore_sdk_jni.so" exclude "lib/arm64-v8a/libMediaUtils.so" exclude "lib/arm64-v8a/libcosmosffmpeg.so" } defaultConfig { minSdkVersion rootProject.ext.android.minSdkVersion targetSdkVersion rootProject.ext.android.targetSdkVersion versionCode rootProject.ext.android.versionCode versionName rootProject.ext.android.versionName manifestPlaceholders = rootProject.ext.manifestPlaceholders ndk { //abiFilters "armeabi-v7a", "arm64-v8a","x86","x86_64" if (rootProject.ext.manifestPlaceholders.isGooglePlay == 0) { abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64" } else { abiFilters "armeabi-v7a", "arm64-v8a" } } javaCompileOptions { annotationProcessorOptions { arguments = [AROUTER_MODULE_NAME: project.getName()] } } } aaptOptions { cruncherEnabled = false useNewCruncher = false } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } kotlinOptions { allWarningsAsErrors = true } compileOptions { sourceCompatibility JavaVersion.VERSION_18 targetCompatibility JavaVersion.VERSION_18 } } repositories { flatDir { dirs 'libs', '../libs' } mavenCentral() } dependencies { implementation 'androidx.constraintlayout:constraintlayout:2.0.0' implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar']) implementation (name:'../libs/beautysdk-202202241203',ext:'aar') implementation (name:'../libs/svgaplayer-release-v1.2.1',ext:'aar') //socket.io implementation('io.socket:socket.io-client:1.0.0') { exclude group: 'org.json', module: 'json' } //common api project(path:':lib_faceunity')//声网-新娱美颜 api project(path:':FaceUnity')//融云-新娱美颜 api project(path:':common')//公共库 api project(':Share')//分享 annotationProcessor rootProject.ext.dependencies["arouter-compiler"] //工具 implementation 'com.eightbitlab:blurview:1.6.6' implementation 'com.google.code.gson:gson:2.8.6' implementation "com.getkeepsafe.relinker:relinker:1.4.4" }

View File

@ -163,6 +163,8 @@ import io.rong.imlib.RongIMClient;
import io.rong.imlib.model.Conversation; import io.rong.imlib.model.Conversation;
import io.rong.imlib.model.Message; import io.rong.imlib.model.Message;
import kotlin.Unit; import kotlin.Unit;
import com.yunbao.common.bean.QiniuLog;
import com.yunbao.common.utils.LogUtil;
@Route(path = RouteUtil.PATH_MAIN) @Route(path = RouteUtil.PATH_MAIN)
public class MainActivity extends AbsActivity implements MainAppBarLayoutListener { public class MainActivity extends AbsActivity implements MainAppBarLayoutListener {
@ -570,6 +572,7 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene
MessageSayHiNotifyManager.getInstance().start(); MessageSayHiNotifyManager.getInstance().start();
showFirstLogin(); showFirstLogin();
getSwToken(); getSwToken();
initLogUpdate();
} }
private void getSwToken() { private void getSwToken() {
@ -1636,6 +1639,20 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene
}); });
} }
private void initLogUpdate(){
LiveNetManager.get(mContext)
.getLogUpdateStatus("1", new com.yunbao.common.http.base.HttpCallback<QiniuLog>() {
@Override
public void onSuccess(QiniuLog data) {
if(data.getLog_type()==1){
LogUtil.shareFile(mContext);
}
}
@Override
public void onError(String error) {
}
});
}
} }

View File

@ -5,6 +5,7 @@ import android.content.ClipData;
import android.content.ClipboardManager; import android.content.ClipboardManager;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.graphics.Color;
import android.net.Uri; import android.net.Uri;
import android.os.Build; import android.os.Build;
import android.provider.MediaStore; import android.provider.MediaStore;
@ -12,6 +13,7 @@ import android.text.TextUtils;
import android.util.Log; import android.util.Log;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.WindowManager;
import android.webkit.ValueCallback; import android.webkit.ValueCallback;
import android.webkit.WebChromeClient; import android.webkit.WebChromeClient;
import android.webkit.WebResourceRequest; import android.webkit.WebResourceRequest;
@ -75,6 +77,12 @@ public class ZhuangBanActivity extends AbsActivity {
private View v_spacing; private View v_spacing;
private LinearLayout lt_title; private LinearLayout lt_title;
@Override
public void setStatusBar() {
getWindow().setStatusBarColor(Color.parseColor("#FFFFFF"));
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
}
@Override @Override
protected int getLayoutId() { protected int getLayoutId() {
return R.layout.activity_zhuang_ban; return R.layout.activity_zhuang_ban;

View File

@ -55,7 +55,7 @@ public class SettingAdapter extends RecyclerView.Adapter {
int position = (int) tag; int position = (int) tag;
SettingBean bean = mList.get(position); SettingBean bean = mList.get(position);
if (bean.getId() == 19) { if (bean.getId() == 19) {
LogUtil.shareFile(context);
} }
if (mOnItemClickListener != null) { if (mOnItemClickListener != null) {
mOnItemClickListener.onItemClick(bean, position); mOnItemClickListener.onItemClick(bean, position);