فهرست منبع

v1.0.3开发:
1)优化混淆规则
2)调整日志上报接口

#Suyghur 3 سال پیش
والد
کامیت
2e19dce648

+ 0 - 1
build.gradle

@@ -5,7 +5,6 @@ buildscript {
     ext {
         kotlin_version = '1.6.0'
         coroutines_version = '1.5.2'
-        compose_version = '1.1.0-rc01'
     }
     repositories {
         google()

+ 1 - 1
config.gradle

@@ -3,7 +3,7 @@ ext {
     module = [
             remoteLib    : false,
             minifyEnabled: true,
-            publish      : false,
+            publish      : true,
             language     : 1
     ]
 

+ 0 - 15
demo/build.gradle

@@ -24,7 +24,6 @@ android {
 
     buildFeatures {
         viewBinding true
-        compose true
         buildConfig false
     }
     signingConfigs {
@@ -57,10 +56,6 @@ android {
         sourceCompatibility JavaVersion.VERSION_1_8
         targetCompatibility JavaVersion.VERSION_1_8
     }
-    composeOptions {
-        kotlinCompilerExtensionVersion compose_version
-        kotlinCompilerVersion kotlin_version
-    }
     kotlinOptions {
         jvmTarget = '1.8'
         useIR = true
@@ -87,15 +82,5 @@ dependencies {
     // ui
     api rootProject.ext.uiLibs
 
-    implementation "androidx.compose.material:material:$compose_version"
-    implementation 'androidx.activity:activity-compose:1.4.0'
-    implementation "androidx.compose.ui:ui-tooling-preview:$compose_version"
-    implementation "androidx.compose.ui:ui:$compose_version"
-    implementation "androidx.compose.ui:ui-tooling:$compose_version"
-    implementation "androidx.compose.runtime:runtime:$compose_version"
-    implementation "androidx.compose.runtime:runtime-livedata:$compose_version"
-    implementation "androidx.lifecycle:lifecycle-viewmodel-compose:2.4.0"
-
-    debugImplementation "androidx.compose.ui:ui-tooling:$compose_version"
     debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.7'
 }

+ 106 - 117
demo/src/main/java/com/eyuangame/demo/DemoActivity.kt

@@ -6,32 +6,19 @@ import android.os.Handler
 import android.os.Looper
 import android.os.Message
 import android.view.KeyEvent
+import android.view.View
 import android.widget.*
-import androidx.activity.compose.setContent
 import androidx.appcompat.app.AppCompatActivity
-import androidx.compose.foundation.layout.Column
-import androidx.compose.foundation.layout.fillMaxSize
-import androidx.compose.foundation.layout.padding
-import androidx.compose.foundation.rememberScrollState
-import androidx.compose.foundation.verticalScroll
-import androidx.compose.material.Button
-import androidx.compose.material.MaterialTheme
-import androidx.compose.material.Surface
-import androidx.compose.material.Text
-import androidx.compose.runtime.*
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.tooling.preview.Preview
-import androidx.compose.ui.unit.dp
 import cn.yyxx.eyuangame.base.EYuanGame
 import cn.yyxx.eyuangame.base.entity.SdkChargeInfo
 import cn.yyxx.eyuangame.base.entity.SdkEvent
 import cn.yyxx.eyuangame.base.entity.SdkRoleInfo
 import cn.yyxx.eyuangame.base.internal.ICallback
+import cn.yyxx.eyuangame.core.entity.ResultInfo
+import cn.yyxx.eyuangame.core.internal.IRequestCallback
 import cn.yyxx.eyuangame.core.network.SdkRequest
 import cn.yyxx.support.hawkeye.LogUtils
 import cn.yyxx.support.hawkeye.ToastUtils
-import com.eyuangame.demo.ui.theme.EYuanGameSdkKTXTheme
 import kotlin.system.exitProcess
 
 
@@ -39,7 +26,7 @@ import kotlin.system.exitProcess
  * @author #Suyghur.
  * Created on 2021/06/09
  */
-class DemoActivity : AppCompatActivity() {
+class DemoActivity : AppCompatActivity(), View.OnClickListener {
 
     private val events = mutableListOf(
         Item(0, "00 接口环境切换"),
@@ -57,17 +44,20 @@ class DemoActivity : AppCompatActivity() {
         Item(12, "12 sdk日志上报测试")
     )
 
+    private lateinit var layout: LinearLayout
+    private lateinit var mTextView: TextView
     private var cacheRoleInfo: CacheRoleInfo.RoleInfo? = null
-    private val messageBuffer by lazy {
+
+    private val message: StringBuilder by lazy {
         StringBuilder()
     }
-    private var message by mutableStateOf("")
+
     private val handler = object : Handler(Looper.getMainLooper()) {
         override fun handleMessage(msg: Message) {
             when (msg.what) {
                 10001 -> {
-                    messageBuffer.append(msg.obj.toString())
-                    message = messageBuffer.toString()
+                    message.append(msg.obj.toString())
+                    mTextView.text = message.toString()
                 }
             }
         }
@@ -75,14 +65,7 @@ class DemoActivity : AppCompatActivity() {
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
-
-        setContent {
-            EYuanGameSdkKTXTheme {
-                Surface(color = Color.White) {
-                    DemoPage()
-                }
-            }
-        }
+        initView()
         LogUtils.handler = handler
         EYuanGame.getInstance().initialize(this, true, object : ICallback {
             override fun onResult(code: Int, result: String) {
@@ -91,110 +74,116 @@ class DemoActivity : AppCompatActivity() {
         })
     }
 
+    private fun initView() {
+        layout = LinearLayout(this)
+        layout.orientation = LinearLayout.VERTICAL
 
-    @Composable
-    fun DemoPage() {
-        Column(
-            modifier = Modifier
-                .fillMaxSize()
-                .verticalScroll(rememberScrollState()),
-        ) {
-            events.forEach {
-                Button(
-                    modifier = Modifier
-                        .fillMaxSize()
-                        .padding(start = 10.dp, end = 10.dp),
-                    onClick = { onClick(it.id) }
-                ) {
-                    Text(text = it.name)
-                }
-            }
-            Text(text = message)
+        initButton()
+        mTextView = TextView(this)
+        with(mTextView) {
+            text = ""
+            this@DemoActivity.layout.addView(this)
         }
+
+        val scrollView = ScrollView(this)
+        scrollView.addView(layout)
+        setContentView(scrollView)
     }
 
-    @Preview
-    @Composable
-    fun PreviewDemoPage() {
-        EYuanGameSdkKTXTheme {
-            Surface(color = MaterialTheme.colors.background) {
-                DemoPage()
+    private fun initButton() {
+        for (event in events) {
+            with(Button(this)) {
+                text = event.name
+                tag = event.id
+                id = event.id
+                setOnClickListener(this@DemoActivity)
+                this@DemoActivity.layout.addView(this)
             }
         }
     }
 
-    private fun onClick(action: Int) {
-        messageBuffer.clear()
-        when (action) {
-            0 -> EnvActivity.start(this@DemoActivity)
-            1 -> {
-                EYuanGame.getInstance().login(this@DemoActivity, true, object : ICallback {
-                    override fun onResult(code: Int, result: String) {
-                        ToastUtils.toastInfo(this@DemoActivity, "---- demo提示不做翻译 ----\ncode : $code\n msg : $result\n ---- demo提示不做翻译 ----")
-                        if (code == 0) {
-                            cacheRoleInfo = CacheRoleInfo.getDemoRoleInfo(this@DemoActivity, EYuanGame.getInstance().getCurrentUserId())
+    override fun onClick(v: View?) {
+        mTextView.text = ""
+        message.clear()
+        v?.apply {
+            when (tag as Int) {
+                0 -> EnvActivity.start(this@DemoActivity)
+                1 -> {
+                    EYuanGame.getInstance().login(this@DemoActivity, true, object : ICallback {
+                        override fun onResult(code: Int, result: String) {
+                            ToastUtils.toastInfo(this@DemoActivity, "---- demo提示不做翻译 ----\ncode : $code\n msg : $result\n ---- demo提示不做翻译 ----")
+                            if (code == 0) {
+                                cacheRoleInfo = CacheRoleInfo.getDemoRoleInfo(this@DemoActivity, EYuanGame.getInstance().getCurrentUserId())
+                            }
                         }
-                    }
-                })
-            }
-            2 -> {
-                EYuanGame.getInstance().logout(this@DemoActivity, object : ICallback {
-                    override fun onResult(code: Int, result: String) {
-                        if (code == 0) {
-                            EYuanGame.getInstance().login(this@DemoActivity, false, object : ICallback {
-                                override fun onResult(code: Int, result: String) {
-                                    ToastUtils.toastInfo(this@DemoActivity, "---- demo提示不做翻译 ----\ncode : $code\n msg : $result\n ---- demo提示不做翻译 ----")
-                                }
-                            })
+                    })
+                }
+                2 -> {
+                    EYuanGame.getInstance().logout(this@DemoActivity, object : ICallback {
+                        override fun onResult(code: Int, result: String) {
+                            if (code == 0) {
+                                EYuanGame.getInstance().login(this@DemoActivity, false, object : ICallback {
+                                    override fun onResult(code: Int, result: String) {
+                                        ToastUtils.toastInfo(this@DemoActivity, "---- demo提示不做翻译 ----\ncode : $code\n msg : $result\n ---- demo提示不做翻译 ----")
+                                    }
+                                })
+                            }
+                        }
+                    })
+                }
+                3 -> {
+                    cacheRoleInfo = null
+                    cacheRoleInfo = CacheRoleInfo.setDemoRoleInfo(this@DemoActivity, EYuanGame.getInstance().getCurrentUserId())
+                    EYuanGame.getInstance().roleCreate(this@DemoActivity, getGameRoleInfo())
+                }
+                4 -> EYuanGame.getInstance().roleLauncher(this@DemoActivity, getGameRoleInfo())
+                5 -> EYuanGame.getInstance().roleLevelUp(this@DemoActivity, getGameRoleInfo())
+                6 -> {
+                    EYuanGame.getInstance().charge(this@DemoActivity, getGameChargeInfo(), true, object : ICallback {
+                        override fun onResult(code: Int, result: String) {
+                            ToastUtils.toastInfo(this@DemoActivity, "---- demo提示不做翻译 ----\ncode : $code\n msg : $result\n ---- demo提示不做翻译 ----")
                         }
-                    }
-                })
-            }
-            3 -> {
-                cacheRoleInfo = null
-                cacheRoleInfo = CacheRoleInfo.setDemoRoleInfo(this@DemoActivity, EYuanGame.getInstance().getCurrentUserId())
-                EYuanGame.getInstance().roleCreate(this@DemoActivity, getGameRoleInfo())
-            }
-            4 -> EYuanGame.getInstance().roleLauncher(this@DemoActivity, getGameRoleInfo())
-            5 -> EYuanGame.getInstance().roleLevelUp(this@DemoActivity, getGameRoleInfo())
-            6 -> {
-                EYuanGame.getInstance().charge(this@DemoActivity, getGameChargeInfo(), true, object : ICallback {
-                    override fun onResult(code: Int, result: String) {
-                        ToastUtils.toastInfo(this@DemoActivity, "---- demo提示不做翻译 ----\ncode : $code\n msg : $result\n ---- demo提示不做翻译 ----")
-                    }
 
-                })
-            }
-            7 -> {
-                EYuanGame.getInstance().charge(this@DemoActivity, getGameChargeInfo(), false, object : ICallback {
+                    })
+                }
+                7 -> {
+                    EYuanGame.getInstance().charge(this@DemoActivity, getGameChargeInfo(), false, object : ICallback {
+                        override fun onResult(code: Int, result: String) {
+                            ToastUtils.toastInfo(this@DemoActivity, "---- demo提示不做翻译 ----\ncode : $code\n msg : $result\n ---- demo提示不做翻译 ----")
+                        }
+
+                    })
+                }
+                8 -> {
+                    val sdkEvent = SdkEvent()
+                    sdkEvent.eventName = "tutorial"
+                    sdkEvent.standard = true
+                    sdkEvent.fbAliasName = "fb_mobile_tutorial_completion"
+                    EYuanGame.getInstance().linkingEvent(this@DemoActivity, sdkEvent)
+                }
+                9 -> {
+                    val sdkEvent = SdkEvent()
+                    sdkEvent.eventName = "finish_marry"
+                    sdkEvent.standard = false
+                    EYuanGame.getInstance().linkingEvent(this@DemoActivity, sdkEvent)
+                }
+                10 -> throw RuntimeException("Test Crashlytics Feature")
+                11 -> EYuanGame.getInstance().share(this@DemoActivity, "https://www.baidu.com", "#测试标签", "测试引文", object : ICallback {
                     override fun onResult(code: Int, result: String) {
-                        ToastUtils.toastInfo(this@DemoActivity, "---- demo提示不做翻译 ----\ncode : $code\n msg : $result\n ---- demo提示不做翻译 ----")
+
                     }
 
                 })
-            }
-            8 -> {
-                val sdkEvent = SdkEvent()
-                sdkEvent.eventName = "tutorial"
-                sdkEvent.standard = true
-                sdkEvent.fbAliasName = "fb_mobile_tutorial_completion"
-                EYuanGame.getInstance().linkingEvent(this@DemoActivity, sdkEvent)
-            }
-            9 -> {
-                val sdkEvent = SdkEvent()
-                sdkEvent.eventName = "finish_marry"
-                sdkEvent.standard = false
-                EYuanGame.getInstance().linkingEvent(this@DemoActivity, sdkEvent)
-            }
-            10 -> throw RuntimeException("Test Crashlytics Feature")
-            11 -> EYuanGame.getInstance().share(this@DemoActivity, "https://www.baidu.com", "#测试标签", "测试引文", object : ICallback {
-                override fun onResult(code: Int, result: String) {
-
+                12 -> {
+                    SdkRequest.instance.uploadLogFile(this@DemoActivity, true, object : IRequestCallback {
+                        override fun onResponse(resultInfo: ResultInfo) {
+                            ToastUtils.toastInfo(
+                                this@DemoActivity,
+                                "---- demo提示不做翻译 ----\ncode : ${resultInfo.code}\n msg : ${resultInfo.msg}\n ---- demo提示不做翻译 ----"
+                            )
+                        }
+                    })
                 }
-
-            })
-            12 -> {
-                SdkRequest.instance.uploadLogFile(this)
             }
         }
     }

+ 24 - 56
demo/src/main/java/com/eyuangame/demo/EnvActivity.kt

@@ -3,29 +3,18 @@ package com.eyuangame.demo
 import android.app.Activity
 import android.content.Intent
 import android.os.Bundle
-import androidx.activity.compose.setContent
+import android.view.View
+import android.widget.Button
+import android.widget.LinearLayout
 import androidx.appcompat.app.AppCompatActivity
-import androidx.compose.foundation.layout.Column
-import androidx.compose.foundation.layout.fillMaxSize
-import androidx.compose.foundation.layout.padding
-import androidx.compose.foundation.rememberScrollState
-import androidx.compose.foundation.verticalScroll
-import androidx.compose.material.*
-import androidx.compose.runtime.Composable
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.tooling.preview.Preview
-import androidx.compose.ui.unit.dp
-import androidx.core.view.WindowCompat
 import cn.yyxx.support.HostModelUtils
 import cn.yyxx.support.hawkeye.ToastUtils
-import com.eyuangame.demo.ui.theme.EYuanGameSdkKTXTheme
 
 /**
  * @author #Suyghur.
  * Created on 2021/06/17
  */
-class EnvActivity : AppCompatActivity() {
+class EnvActivity : AppCompatActivity(), View.OnClickListener {
 
     companion object {
         fun start(activity: Activity) {
@@ -35,51 +24,30 @@ class EnvActivity : AppCompatActivity() {
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
-        WindowCompat.setDecorFitsSystemWindows(window, false)
-        setContent {
-            EYuanGameSdkKTXTheme {
-                Surface(color = MaterialTheme.colors.background) {
-                    EnvPage()
-                }
-            }
-        }
-    }
 
-    @Composable
-    fun EnvPage() {
-        Column(
-            modifier = Modifier
-                .fillMaxSize()
-                .verticalScroll(rememberScrollState()),
-        ) {
-            Button(
-                modifier = Modifier
-                    .fillMaxSize()
-                    .padding(start = 10.dp, end = 10.dp),
-                onClick = { changeModel(HostModelUtils.ENV_TEST) }
-            ) {
-                Text(text = "00 测试环境")
-            }
-            Button(modifier = Modifier
-                .fillMaxSize()
-                .padding(start = 10.dp, end = 10.dp),
-                onClick = { changeModel(HostModelUtils.ENV_ONLINE) }
-            ) {
-                Text(text = "01 正式环境")
-            }
-        }
-    }
+        with(LinearLayout(this)) {
 
-    @Preview
-    @Composable
-    fun PreviewEnv() {
-        Surface {
-            EnvPage()
+            orientation = LinearLayout.VERTICAL
+
+            val btnTest = Button(this@EnvActivity)
+            btnTest.text = "00 测试环境"
+            btnTest.tag = HostModelUtils.ENV_TEST
+            btnTest.setOnClickListener(this@EnvActivity)
+            addView(btnTest)
+
+            val btnOnline = Button(this@EnvActivity)
+            btnOnline.text = "01 线上环境"
+            btnOnline.tag = HostModelUtils.ENV_ONLINE
+            btnOnline.setOnClickListener(this@EnvActivity)
+            addView(btnOnline)
+            setContentView(this)
         }
     }
 
-    private fun changeModel(model: Int) {
-        HostModelUtils.setHostModel(this, model)
-        ToastUtils.toastInfo(this, "接口环境切换成功,重启应用后生效")
+    override fun onClick(v: View?) {
+        v?.apply {
+            HostModelUtils.setHostModel(this@EnvActivity, tag as Int)
+            ToastUtils.toastInfo(this@EnvActivity, "接口环境切换成功,重启应用后生效")
+        }
     }
 }

+ 0 - 8
demo/src/main/java/com/eyuangame/demo/ui/theme/Color.kt

@@ -1,8 +0,0 @@
-package com.eyuangame.demo.ui.theme
-
-import androidx.compose.ui.graphics.Color
-
-val Purple200 = Color(0xFFBB86FC)
-val Purple500 = Color(0xFF6200EE)
-val Purple700 = Color(0xFF3700B3)
-val Teal200 = Color(0xFF03DAC5)

+ 0 - 11
demo/src/main/java/com/eyuangame/demo/ui/theme/Shape.kt

@@ -1,11 +0,0 @@
-package com.eyuangame.demo.ui.theme
-
-import androidx.compose.foundation.shape.RoundedCornerShape
-import androidx.compose.material.Shapes
-import androidx.compose.ui.unit.dp
-
-val Shapes = Shapes(
-    small = RoundedCornerShape(4.dp),
-    medium = RoundedCornerShape(4.dp),
-    large = RoundedCornerShape(0.dp)
-)

+ 0 - 44
demo/src/main/java/com/eyuangame/demo/ui/theme/Theme.kt

@@ -1,44 +0,0 @@
-package com.eyuangame.demo.ui.theme
-
-import androidx.compose.foundation.isSystemInDarkTheme
-import androidx.compose.material.MaterialTheme
-import androidx.compose.material.darkColors
-import androidx.compose.material.lightColors
-import androidx.compose.runtime.Composable
-
-private val DarkColorPalette = darkColors(
-    primary = Purple200,
-    primaryVariant = Purple700,
-    secondary = Teal200
-)
-
-private val LightColorPalette = lightColors(
-    primary = Purple500,
-    primaryVariant = Purple700,
-    secondary = Teal200
-
-    /* Other default colors to override
-    background = Color.White,
-    surface = Color.White,
-    onPrimary = Color.White,
-    onSecondary = Color.Black,
-    onBackground = Color.Black,
-    onSurface = Color.Black,
-    */
-)
-
-@Composable
-fun EYuanGameSdkKTXTheme(darkTheme: Boolean = isSystemInDarkTheme(), content: @Composable() () -> Unit) {
-    val colors = if (darkTheme) {
-        DarkColorPalette
-    } else {
-        LightColorPalette
-    }
-
-    MaterialTheme(
-        colors = colors,
-        typography = Typography,
-        shapes = Shapes,
-        content = content
-    )
-}

+ 0 - 28
demo/src/main/java/com/eyuangame/demo/ui/theme/Type.kt

@@ -1,28 +0,0 @@
-package com.eyuangame.demo.ui.theme
-
-import androidx.compose.material.Typography
-import androidx.compose.ui.text.TextStyle
-import androidx.compose.ui.text.font.FontFamily
-import androidx.compose.ui.text.font.FontWeight
-import androidx.compose.ui.unit.sp
-
-// Set of Material typography styles to start with
-val Typography = Typography(
-    body1 = TextStyle(
-        fontFamily = FontFamily.Default,
-        fontWeight = FontWeight.Normal,
-        fontSize = 16.sp
-    )
-    /* Other default text styles to override
-    button = TextStyle(
-        fontFamily = FontFamily.Default,
-        fontWeight = FontWeight.W500,
-        fontSize = 14.sp
-    ),
-    caption = TextStyle(
-        fontFamily = FontFamily.Default,
-        fontWeight = FontWeight.Normal,
-        fontSize = 12.sp
-    )
-    */
-)

+ 1 - 1
library_base/buildJar.gradle

@@ -1,5 +1,5 @@
 def SDK_BASENAME = "eyuangamesdk_base"
-def SDK_VERSION = "1.0.2"
+def SDK_VERSION = "1.0.3"
 def SEPARATOR = "_"
 def sdkDestinationPath = "build/jar/"
 def zipFile = file('build/intermediates/aar_main_jar/release/classes.jar')

+ 26 - 25
library_base/proguard-rules.pro

@@ -41,27 +41,25 @@
 -keepattributes *Annotation*
 -keepattributes *JavascriptInterface*
 
-# 保留内部类
--keepattributes Exceptions,InnerClasses
+# keep javascript注释的方法,使用到webview js回调方法的需要添加此配置
+-keepclassmembers class * {
+    @android.webkit.JavascriptInterface <methods>;
+}
 
-# 保留泛型
--keepattributes Signature
+#  #保留内部接口或内部类、内部类、泛型签名类型
+-keepattributes Exceptions,InnerClasses,Signature
 
--keep class kotlin.** { *; }
--keep class kotlin.Metadata { *; }
--dontwarn kotlin.**
--keepclassmembers class **$WhenMappings {
-    <fields>;
-}
--keepclassmembers class kotlin.Metadata {
-    public <methods>;
-}
--assumenosideeffects class kotlin.jvm.internal.Intrinsics {
-    static void checkParameterIsNotNull(java.lang.Object, java.lang.String);
-}
+# 将崩溃日志文件来源重命名为"SourceFile"
+-renamesourcefileattribute SourceFile
+# 产生有用的混淆堆栈跟踪
+-keepattributes SourceFile,LineNumberTable
+# 保留注释
+-keepattributes *Annotation*
 
--keepnames class * implements java.io.Serializable
+# 保留函数的参数名
+-keepparameternames
 
+-keepnames class * implements java.io.Serializable
 -keepclassmembers class * implements java.io.Serializable {
    static final long serialVersionUID;
    private static final java.io.ObjectStreamField[] serialPersistentFields;
@@ -92,7 +90,6 @@
 -keep public class * extends android.content.ContentProvider
 -keep public class * extends android.app.backup.BackupAgentHelper
 -keep public class * extends android.preference.Preference
--keep public class * extends androidx.core.app.CoreComponentFactory
 
 
 -keepclassmembers enum * {
@@ -126,9 +123,18 @@
 
 -keep class **JNI* {*;}
 
+# 保留native方法
+-keepclasseswithmembernames class * {
+    native <methods>;
+}
 
+# keep R文件的静态字段
+-keepclassmembers class **.R$* {
+    public static <fields>;
+}
+
+-keeppackagenames cn.yyxx.eyuangame.**
 -keep class cn.yyxx.support.**{*;}
--keep class com.dolin.zap.**{*;}
 -keep class cn.yyxx.eyuangame.base.entity.SdkEvent{public <fields>; public <methods>;}
 -keep class cn.yyxx.eyuangame.base.entity.SdkChargeInfo{public <fields>; public <methods>;}
 -keep class cn.yyxx.eyuangame.base.entity.SdkRoleInfo{public <fields>; public <methods>;}
@@ -138,9 +144,4 @@
 -keep class cn.yyxx.eyuangame.base.utils.ParamsUtils{public <fields>; public <methods>;}
 -keep class cn.yyxx.eyuangame.base.EYuanGame{public <fields>; public <methods>;}
 -keep class cn.yyxx.eyuangame.base.EYuanGameApplication{public <fields>; public <methods>;}
--keep class cn.yyxx.eyuangame.Version{public <fields>; public <methods>;}
-
-# firebase
--keepattributes SourceFile,LineNumberTable        # Keep file names and line numbers.
--keep public class * extends java.lang.Exception  # Optional: Keep custom exceptions.
-
+-keep class cn.yyxx.eyuangame.Version{public <fields>; public <methods>;}

+ 4 - 4
library_core/build.gradle

@@ -70,12 +70,12 @@ dependencies {
 
     implementation 'androidx.core:core-ktx:1.7.0'
     implementation 'androidx.fragment:fragment-ktx:1.4.0'
-    implementation 'androidx.constraintlayout:constraintlayout:2.1.2'
-    implementation 'com.google.android.material:material:1.4.0'
+    implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
+    implementation 'com.google.android.material:material:1.5.0'
     implementation 'com.android.installreferrer:installreferrer:2.2'
 
     //google
-    implementation 'com.google.android.play:core:1.10.2'
+    implementation 'com.google.android.play:core:1.10.3'
     implementation 'com.google.android.gms:play-services-auth:20.0.1'
     //4.0.0的billing库消耗商品会回调两次,后续在排查,先用3.0.3
     implementation "com.android.billingclient:billing-ktx:3.0.3"
@@ -90,7 +90,7 @@ dependencies {
     implementation 'com.adjust.sdk:adjust-android:4.28.2'
 
     if (rootProject.ext.module.publish) {
-        api files('../libs/eyuangamesdk_base_1.0.2.jar')
+        api files('../libs/eyuangamesdk_base_1.0.3.jar')
     } else {
         api project(':library_base')
     }

+ 26 - 27
library_core/proguard-rules.pro

@@ -41,27 +41,25 @@
 -keepattributes *Annotation*
 -keepattributes *JavascriptInterface*
 
-# 保留内部类
--keepattributes Exceptions,InnerClasses
+# keep javascript注释的方法,使用到webview js回调方法的需要添加此配置
+-keepclassmembers class * {
+    @android.webkit.JavascriptInterface <methods>;
+}
 
-# 保留泛型
--keepattributes Signature
+#  #保留内部接口或内部类、内部类、泛型签名类型
+-keepattributes Exceptions,InnerClasses,Signature
 
--keep class kotlin.** { *; }
--keep class kotlin.Metadata { *; }
--dontwarn kotlin.**
--keepclassmembers class **$WhenMappings {
-    <fields>;
-}
--keepclassmembers class kotlin.Metadata {
-    public <methods>;
-}
--assumenosideeffects class kotlin.jvm.internal.Intrinsics {
-    static void checkParameterIsNotNull(java.lang.Object, java.lang.String);
-}
+# 将崩溃日志文件来源重命名为"SourceFile"
+-renamesourcefileattribute SourceFile
+# 产生有用的混淆堆栈跟踪
+-keepattributes SourceFile,LineNumberTable
+# 保留注释
+-keepattributes *Annotation*
 
--keepnames class * implements java.io.Serializable
+# 保留函数的参数名
+-keepparameternames
 
+-keepnames class * implements java.io.Serializable
 -keepclassmembers class * implements java.io.Serializable {
    static final long serialVersionUID;
    private static final java.io.ObjectStreamField[] serialPersistentFields;
@@ -92,7 +90,6 @@
 -keep public class * extends android.content.ContentProvider
 -keep public class * extends android.app.backup.BackupAgentHelper
 -keep public class * extends android.preference.Preference
--keep public class * extends androidx.core.app.CoreComponentFactory
 
 
 -keepclassmembers enum * {
@@ -126,19 +123,21 @@
 
 -keep class **JNI* {*;}
 
+# 保留native方法
+-keepclasseswithmembernames class * {
+    native <methods>;
+}
+
+# keep R文件的静态字段
+-keepclassmembers class **.R$* {
+    public static <fields>;
+}
 
--keep class com.tencent.mmkv.**{*;}
+-keeppackagenames cn.yyxx.eyuangame.**
 -keep class cn.yyxx.support.**{*;}
--keep class com.dolin.zap.**{*;}
 -keep class cn.yyxx.eyuangame.base.**{*;}
 -keep class cn.yyxx.eyuangame.Version{public <fields>; public <methods>;}
 -keep class cn.yyxx.eyuangame.core.internal.IJsCallback{public <fields>; public <methods>;}
 -keep class cn.yyxx.eyuangame.core.SdkBridge{public <fields>; public <methods>;}
 -keep class cn.yyxx.eyuangame.core.impl.SdkDrive{public <fields>; public <methods>;}
--keep class cn.yyxx.eyuangame.core.impl.SdkJsImpl{*;}
-
-
-# firebase
--keepattributes SourceFile,LineNumberTable        # Keep file names and line numbers.
--keep public class * extends java.lang.Exception  # Optional: Keep custom exceptions.
-
+-keep class cn.yyxx.eyuangame.core.impl.SdkJsImpl{*;}

+ 0 - 4
library_core/src/main/java/cn/yyxx/eyuangame/core/impl/SdkBridgeImpl.kt

@@ -68,9 +68,6 @@ class SdkBridgeImpl {
 
     private var initLoadingDialog: ScaleLoadingDialog? = null
 
-//    private var uploadMessageForAndroid5: ValueCallback<Array<Uri>>? = null
-
-
     fun attachBaseContext(application: Application, context: Context) {
         Logger.initZap(application)
         SdkDrive.instance.initSdkDrive(application)
@@ -95,7 +92,6 @@ class SdkBridgeImpl {
         }
     }
 
-    @RequiresApi(Build.VERSION_CODES.N)
     fun initApplication(application: Application) {
         Logger.i("EYuanGameSdk initApplication ...")
         MMKVUtils.instance.init(application)

+ 14 - 1
library_core/src/main/java/cn/yyxx/eyuangame/core/impl/center/HybridFeatureContainer.kt

@@ -14,6 +14,7 @@ import android.webkit.*
 import android.widget.FrameLayout
 import android.widget.ImageView
 import cn.yyxx.eyuangame.base.utils.Logger
+import cn.yyxx.eyuangame.core.entity.ResultInfo
 import cn.yyxx.eyuangame.core.entity.SdkBackLoginInfo
 import cn.yyxx.eyuangame.core.impl.SdkBridgeImpl
 import cn.yyxx.eyuangame.core.impl.SdkDrive
@@ -21,12 +22,15 @@ import cn.yyxx.eyuangame.core.impl.SdkJsImpl
 import cn.yyxx.eyuangame.core.impl.share.ShareImpl
 import cn.yyxx.eyuangame.core.internal.IImplCallback
 import cn.yyxx.eyuangame.core.internal.IJsCallback
+import cn.yyxx.eyuangame.core.internal.IRequestCallback
 import cn.yyxx.eyuangame.core.network.Host
+import cn.yyxx.eyuangame.core.network.SdkRequest
 import cn.yyxx.eyuangame.core.ui.dialog.ScaleLoadingDialog
 import cn.yyxx.support.DensityUtils
 import cn.yyxx.support.JsonUtils
 import cn.yyxx.support.ResUtils
 import cn.yyxx.support.device.DeviceInfoUtils
+import cn.yyxx.support.hawkeye.ToastUtils
 import org.json.JSONObject
 
 /**
@@ -40,7 +44,6 @@ class HybridFeatureContainer(private val activity: Activity, private val url: St
         var uploadMessageForAndroid5: ValueCallback<Array<Uri>>? = null
     }
 
-    //    private var uploadMessageForAndroid5: ValueCallback<Array<Uri>>? = null
     private lateinit var container: FrameLayout
     private lateinit var webView: WebView
     private lateinit var ivClose: ImageView
@@ -116,6 +119,16 @@ class HybridFeatureContainer(private val activity: Activity, private val url: St
                         }
                     }
                 }
+                "submitLog" -> {
+                    SdkRequest.instance.uploadLogFile(activity, true, object : IRequestCallback {
+                        override fun onResponse(resultInfo: ResultInfo) {
+                            Logger.d(resultInfo.msg)
+                            activity.runOnUiThread {
+                                ToastUtils.toastInfo(activity, resultInfo.msg)
+                            }
+                        }
+                    })
+                }
             }
             return ""
         }

+ 11 - 2
library_core/src/main/java/cn/yyxx/eyuangame/core/impl/login/UserSignInImpl.kt

@@ -176,7 +176,7 @@ class UserSignInImpl constructor(val activity: LoginActivity, private val callba
                             SdkBackLoginInfo.instance.loginType = LoginType.TYPE_ACCOUNT_LOGIN
 
                             if (jsonObject.getInt("upload_log_auto") == 1) {
-                                SdkRequest.instance.uploadLogFile(context)
+                                uploadLogFile(context)
                             }
 
                             with(Session()) {
@@ -231,7 +231,7 @@ class UserSignInImpl constructor(val activity: LoginActivity, private val callba
                         SdkBackLoginInfo.instance.loginType = loginParams.getInt("login_type")
 
                         if (jsonObject.getInt("upload_log_auto") == 1) {
-                            SdkRequest.instance.uploadLogFile(context)
+                            uploadLogFile(context)
                         }
 
                         with(Session()) {
@@ -288,6 +288,15 @@ class UserSignInImpl constructor(val activity: LoginActivity, private val callba
         }
     }
 
+    private fun uploadLogFile(context: Context) {
+        SdkRequest.instance.uploadLogFile(context, false, object : IRequestCallback {
+            override fun onResponse(resultInfo: ResultInfo) {
+                Logger.d(resultInfo.msg)
+                ToastUtils.toastInfo(context, resultInfo.msg)
+            }
+        })
+    }
+
     fun onSignInResult(requestCode: Int, resultCode: Int, intent: Intent) {
         fbCallback?.apply {
             onActivityResult(requestCode, resultCode, intent)

+ 7 - 8
library_core/src/main/java/cn/yyxx/eyuangame/core/network/SdkRequest.kt

@@ -6,7 +6,6 @@ import cn.yyxx.eyuangame.base.entity.SdkRoleInfo
 import cn.yyxx.eyuangame.base.utils.Logger
 import cn.yyxx.eyuangame.base.utils.ParamsUtils
 import cn.yyxx.eyuangame.core.entity.LoginType
-import cn.yyxx.eyuangame.core.entity.ResultInfo
 import cn.yyxx.eyuangame.core.entity.SdkBackLoginInfo
 import cn.yyxx.eyuangame.core.internal.IFileRequestCallback
 import cn.yyxx.eyuangame.core.internal.IRequestCallback
@@ -178,7 +177,7 @@ class SdkRequest {
     }
 
 
-    fun uploadLogFile(context: Context) {
+    fun uploadLogFile(context: Context, userClick: Boolean, callback: IRequestCallback) {
         val zapFolderPath = context.getExternalFilesDir("dolin/zap")!!.absolutePath
         val dolinFolderPath = context.getExternalFilesDir("dolin")!!.absolutePath
         GlobalScope.launch(Dispatchers.IO) {
@@ -188,15 +187,15 @@ class SdkRequest {
             val jsonObject = JSONObject()
             jsonObject.put("gcp_code", ParamsUtils.getGcpCode(context))
             jsonObject.put("game_code", ParamsUtils.getGameCode(context))
-            jsonObject.put("upload_type", "log")
+            if (userClick) {
+                jsonObject.put("upload_type", "user_upload_log")
+            } else {
+                jsonObject.put("upload_type", "log")
+            }
             jsonObject.put("upload_file_sign", md5)
             jsonObject.put("uid", SdkBackLoginInfo.instance.userId)
             val url = "${Host.HOST}/${Host.BASIC_ROUTE_UPLOAD_SDK_LOG}"
-            VolleyRequest.uploadFile(context, url, file, jsonObject, object : IRequestCallback {
-                override fun onResponse(resultInfo: ResultInfo) {
-                    Logger.d(resultInfo.toString())
-                }
-            })
+            VolleyRequest.uploadFile(context, url, file, jsonObject, callback)
         }
     }
 

BIN
libs/eyuangamesdk_base_1.0.2.jar


BIN
libs/eyuangamesdk_base_1.0.3.jar


BIN
libs/yyxx_support_1.0.1.jar


BIN
libs/yyxx_support_1.0.2.jar