From 39899e421b107065f9b793414b442f6369091c71 Mon Sep 17 00:00:00 2001 From: litingting Date: Sun, 4 Jan 2026 14:58:08 +0800 Subject: [PATCH] V1.2(3) --- app/build.gradle.kts | 203 +++++++++++------- .../TradPlusLibrary_01_04_12_20-release.aar | Bin 0 -> 23056 bytes .../keyborad/theme/trendyborad/TrendyApp.kt | 2 +- .../theme/trendyborad/ad/AdInstLoad.kt | 94 -------- .../theme/trendyborad/ad/AdInstShower.kt | 69 ------ .../theme/trendyborad/ad/AdShowFailed.kt | 5 - .../theme/trendyborad/ad/AdsInsUtil.kt | 28 --- .../trendyborad/ad/InstAdCacheManager.kt | 35 --- .../theme/trendyborad/ad/LoadListener.kt | 8 - .../theme/trendyborad/ad/ShowListener.kt | 10 - .../TrendyMyKeyBoardViewTrendy.java | 20 +- .../trendyuiactivity/SplashActivity.kt | 140 +++--------- .../TrendyCategoryActivity.java | 34 +-- .../TrendyCategoryListActivity.java | 39 ++-- .../TrendySetKeyboardActivity.kt | 44 ++-- .../TrendySuccessPreviewActivity.java | 44 ++-- app/src/main/res/drawable/background.xml | 1 - app/src/main/res/values-night/themes.xml | 1 - app/src/main/res/values/themes.xml | 1 - app/src/main/res/xml/net.xml | 3 + gradle.properties | 4 +- settings.gradle.kts | 21 +- 22 files changed, 257 insertions(+), 549 deletions(-) create mode 100644 app/libs/TradPlusLibrary_01_04_12_20-release.aar delete mode 100644 app/src/main/java/com/keyborad/theme/trendyborad/ad/AdInstLoad.kt delete mode 100644 app/src/main/java/com/keyborad/theme/trendyborad/ad/AdInstShower.kt delete mode 100644 app/src/main/java/com/keyborad/theme/trendyborad/ad/AdShowFailed.kt delete mode 100644 app/src/main/java/com/keyborad/theme/trendyborad/ad/AdsInsUtil.kt delete mode 100644 app/src/main/java/com/keyborad/theme/trendyborad/ad/InstAdCacheManager.kt delete mode 100644 app/src/main/java/com/keyborad/theme/trendyborad/ad/LoadListener.kt delete mode 100644 app/src/main/java/com/keyborad/theme/trendyborad/ad/ShowListener.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index fe3b754..f423340 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -19,8 +19,8 @@ android { applicationId = "com.keyborad.theme.trendyborad" minSdk = 24 targetSdk = 36 - versionCode = 2 - versionName = "1.1" + versionCode = 3 + versionName = "1.2" setProperty( "archivesBaseName", "TrendyBoard-" + versionName + "(${versionCode})_$timestamp" @@ -38,12 +38,12 @@ android { } } compileOptions { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 } kotlinOptions { - jvmTarget = "17" + jvmTarget = "1.8" } buildFeatures { buildConfig = true @@ -51,84 +51,129 @@ android { } -} - -dependencies { - - implementation("androidx.core:core-ktx:1.15.0") - implementation("androidx.appcompat:appcompat:1.7.1") - implementation("com.google.android.material:material:1.13.0") - implementation("androidx.constraintlayout:constraintlayout:2.2.1") - implementation("androidx.activity:activity:1.12.1") - testImplementation("junit:junit:4.13.2") - androidTestImplementation("androidx.test.ext:junit:1.3.0") - androidTestImplementation("androidx.test.espresso:espresso-core:3.7.0") - implementation("com.squareup.okhttp3:okhttp:5.3.2") - implementation("com.github.bumptech.glide:glide:5.0.5") - implementation ("jp.wasabeef:glide-transformations:4.3.0") - //Glide支持webp动图的库 - implementation("com.github.zjupure:webpdecoder:2.7.4.16.0") - implementation("com.github.omicronapps:7-Zip-JBinding-4Android:Release-16.02-2.03") + dependencies { - val room_version = "2.8.4" - implementation ("androidx.room:room-runtime:$room_version") - kapt("androidx.room:room-compiler:$room_version") - implementation ("androidx.room:room-ktx:$room_version") - implementation ("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.2") - implementation ("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.10.2") - - implementation("com.google.android.material:material:1.8.0") - - implementation("androidx.viewpager2:viewpager2:1.0.0") - implementation("com.github.bumptech.glide:glide:4.12.0") - annotationProcessor("com.github.bumptech.glide:compiler:4.12.0") + implementation("androidx.core:core-ktx:1.15.0") + implementation("androidx.appcompat:appcompat:1.7.1") + implementation("com.google.android.material:material:1.13.0") + implementation("androidx.constraintlayout:constraintlayout:2.2.1") + implementation("androidx.activity:activity:1.12.1") + testImplementation("junit:junit:4.13.2") + androidTestImplementation("androidx.test.ext:junit:1.3.0") + androidTestImplementation("androidx.test.espresso:espresso-core:3.7.0") - implementation(files("libs/UpLoadLibrary_12_03_15_13-release.aar")) - implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.2") - implementation("com.google.android.gms:play-services-ads-identifier:18.0.1") - implementation("com.google.android.gms:play-services-location:21.0.1") - implementation("com.google.android.gms:play-services-appset:16.0.1") - // Import the Firebase BoM - implementation(platform("com.google.firebase:firebase-bom:34.6.0")) - implementation("com.google.firebase:firebase-crashlytics-ndk") - implementation("com.google.firebase:firebase-analytics") - // okhttp - implementation ("com.squareup.okhttp3:okhttp:4.12.0") - implementation("com.squareup.okhttp3:logging-interceptor:4.12.0") + implementation("com.squareup.okhttp3:okhttp:5.3.2") + implementation("com.github.bumptech.glide:glide:5.0.5") + implementation("jp.wasabeef:glide-transformations:4.3.0") + //Glide支持webp动图的库 + implementation("com.github.zjupure:webpdecoder:2.7.4.16.0") + implementation("com.github.omicronapps:7-Zip-JBinding-4Android:Release-16.02-2.03") - // TradPlus - implementation("com.tradplusad:tradplus:15.1.10.1") -//noinspection GradleCompatible - implementation("androidx.legacy:legacy-support-v4:1.0.0") - implementation("androidx.appcompat:appcompat:1.3.0-alpha02") -// Ironsource - implementation("com.ironsource.sdk:mediationsdk:9.0.0") - implementation("com.tradplusad:tradplus-ironsource:10.15.1.10.1") -// Pangle - implementation("com.tradplusad:tradplus-pangle:19.15.1.10.1") - implementation("com.pangle.global:pag-sdk:7.7.0.2") -// UnityAds - implementation("com.tradplusad:tradplus-unity:5.15.1.10.1") - implementation("com.unity3d.ads:unity-ads:4.16.3") -//optional dependency for better targeting - implementation("androidx.browser:browser:1.8.0") - implementation("com.squareup.picasso:picasso:2.8") - implementation("androidx.viewpager:viewpager:1.0.0") - implementation("androidx.recyclerview:recyclerview:1.2.1") -// Mintegral - implementation("com.tradplusad:tradplus-mintegralx_overseas:18.15.1.10.1") - implementation("androidx.recyclerview:recyclerview:1.1.0") - implementation("com.mbridge.msdk.oversea:mbridge_android_sdk:16.10.11") -// Liftoff - implementation("com.tradplusad:tradplus-vunglex:7.15.1.10.1") - implementation("com.vungle:vungle-ads:7.6.0") -// Cross Promotion - implementation("com.tradplusad:tradplus-crosspromotion:27.15.1.10.1") -// TP Exchange -// 请注意保持与主包版本同步更新 - implementation("com.google.code.gson:gson:2.8.6") - implementation("com.tradplusad:tp_exchange:40.15.1.10.1") + val room_version = "2.8.4" + implementation("androidx.room:room-runtime:$room_version") + kapt("androidx.room:room-compiler:$room_version") + implementation("androidx.room:room-ktx:$room_version") + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.2") + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.10.2") + + implementation("com.google.android.material:material:1.8.0") + + implementation("androidx.viewpager2:viewpager2:1.0.0") + implementation("com.github.bumptech.glide:glide:4.12.0") + annotationProcessor("com.github.bumptech.glide:compiler:4.12.0") + + + implementation(files("libs/UpLoadLibrary_12_03_15_13-release.aar")) + implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.2") + implementation("com.google.android.gms:play-services-ads-identifier:18.0.1") + implementation("com.google.android.gms:play-services-location:21.0.1") + implementation("com.google.android.gms:play-services-appset:16.0.1") + // Import the Firebase BoM + implementation(platform("com.google.firebase:firebase-bom:34.6.0")) + implementation("com.google.firebase:firebase-crashlytics-ndk") + implementation("com.google.firebase:firebase-analytics") + // okhttp + implementation("com.squareup.okhttp3:okhttp:4.12.0") + implementation("com.squareup.okhttp3:logging-interceptor:4.12.0") + + + + implementation(files("libs/TradPlusLibrary_01_04_12_20-release.aar")) + // TradPlus + implementation("com.tradplusad:tradplus:15.2.0.1") + implementation("androidx.legacy:legacy-support-v4:1.0.0") + implementation("androidx.appcompat:appcompat:1.3.0-alpha02") + + // IronSource + implementation("com.ironsource.sdk:mediationsdk:9.0.0") + implementation("com.tradplusad:tradplus-ironsource:10.15.2.0.1") + + // Pangle + implementation("com.tradplusad:tradplus-pangle:19.15.2.0.1") + implementation("com.pangle.global:pag-sdk:7.8.0.7") + + // UnityAds + implementation("com.tradplusad:tradplus-unity:5.15.2.0.1") + implementation("com.unity3d.ads:unity-ads:4.16.3") + + // Chartboost +// implementation("com.tradplusad:tradplus-chartboostx:15.15.2.0.1") +// implementation("com.chartboost:chartboost-sdk:9.10.0") +// implementation("com.google.android.gms:play-services-ads-identifier:17.0.0") +// implementation("com.google.android.gms:play-services-base:17.4.0") + + + //上面新版本下载失败用旧版本 + implementation("com.tradplusad:tradplus-chartboostx:15.14.5.0.1") + implementation("com.chartboost:chartboost-sdk:9.8.3") + implementation("com.google.android.gms:play-services-ads-identifier:17.0.0") + implementation("com.google.android.gms:play-services-base:17.4.0") + + // InMobi + implementation("com.tradplusad:tradplus-inmobix:23.15.2.0.1") + implementation("com.inmobi.monetization:inmobi-ads-kotlin:11.0.0") + implementation("com.squareup.okhttp3:okhttp:3.14.9") + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4") + implementation("androidx.core:core-ktx:1.5.0") + implementation("org.jetbrains.kotlin:kotlin-stdlib:1.9.0") + + implementation("com.google.android.gms:play-services-ads-identifier:18.0.1") + implementation("com.google.android.gms:play-services-location:21.0.1") // optional + implementation("androidx.browser:browser:1.8.0") + implementation("com.squareup.picasso:picasso:2.8") + implementation("androidx.viewpager:viewpager:1.0.0") + implementation("androidx.recyclerview:recyclerview:1.2.1") + + // Fyber + implementation("com.fyber:marketplace-sdk:8.4.0") + implementation("com.tradplusad:tradplus-fyber:24.15.2.0.1") + implementation("com.google.android.gms:play-services-ads-identifier:17.0.0") + implementation("com.google.android.gms:play-services-base:17.4.0") + + // Mintegral + implementation("com.tradplusad:tradplus-mintegralx_overseas:18.15.2.0.1") + implementation("androidx.recyclerview:recyclerview:1.1.0") + implementation("com.mbridge.msdk.oversea:mbridge_android_sdk:16.10.11") + + // Liftoff (Vungle) + implementation("com.tradplusad:tradplus-vunglex:7.15.2.0.1") + implementation("com.vungle:vungle-ads:7.6.0") + + // Bigo + implementation("com.bigossp:bigo-ads:5.5.2") + implementation("com.tradplusad:tradplus-bigo:57.15.2.0.1") + + // Cross Promotion + implementation("com.tradplusad:tradplus-crosspromotion:27.15.2.0.1") + + // TP Exchange(注意与主包版本同步) + implementation("com.google.code.gson:gson:2.8.6") + implementation("com.tradplusad:tp_exchange:40.15.2.0.1") + + // Google UMP + implementation ("com.google.android.ump:user-messaging-platform:3.2.0") + } } \ No newline at end of file diff --git a/app/libs/TradPlusLibrary_01_04_12_20-release.aar b/app/libs/TradPlusLibrary_01_04_12_20-release.aar new file mode 100644 index 0000000000000000000000000000000000000000..de049ac6827d9b7e82ea67b4207bb1e145705bf3 GIT binary patch literal 23056 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 S|F}YZu4;$~2;~O<%>D}rAB)uh literal 0 HcmV?d00001 diff --git a/app/src/main/java/com/keyborad/theme/trendyborad/TrendyApp.kt b/app/src/main/java/com/keyborad/theme/trendyborad/TrendyApp.kt index 0b663b7..afcbd47 100644 --- a/app/src/main/java/com/keyborad/theme/trendyborad/TrendyApp.kt +++ b/app/src/main/java/com/keyborad/theme/trendyborad/TrendyApp.kt @@ -33,7 +33,7 @@ class TrendyApp : Application() { dealFile() init(this, "ocean") { s: String?, s2: String? -> null } - TradPlusSdk.initSdk(this, "820EA2E07D9C3C4D0DD816EB220F2711") + } private fun dealFile() { val openFile = trendyAppInstance.assets.open("new_res.json") diff --git a/app/src/main/java/com/keyborad/theme/trendyborad/ad/AdInstLoad.kt b/app/src/main/java/com/keyborad/theme/trendyborad/ad/AdInstLoad.kt deleted file mode 100644 index 1997602..0000000 --- a/app/src/main/java/com/keyborad/theme/trendyborad/ad/AdInstLoad.kt +++ /dev/null @@ -1,94 +0,0 @@ -package com.keyborad.theme.trendyborad.ad - -import android.app.Activity -import android.util.Log -import com.tradplus.ads.base.bean.TPAdError -import com.tradplus.ads.base.bean.TPAdInfo -import com.tradplus.ads.open.interstitial.InterstitialAdListener -import com.tradplus.ads.open.interstitial.TPInterstitial - -class AdInstLoad { - private var mPlace: String - private var adLoadListener: LoadListener? = null - private var activity: Activity? = null - - constructor(activity: Activity, place: String, listener: LoadListener?) { - this.mPlace = place - this.adLoadListener = listener - this.activity = activity - init() - } - - constructor(place: String, listener: LoadListener?) { - this.mPlace = place - this.adLoadListener = listener - init() - } - - private fun init() { - val interstitialAd = InstAdCacheManager.Companion.instance.getAdCache(mPlace) - if (interstitialAd != null && interstitialAd.isReady) { - Log.d("ocean", "$mPlace 有缓存不进行load") - adLoadListener?.loadFailed("有缓存不进行load") - return - } - - val tpInterstitial = TPInterstitial(activity, mPlace) - tpInterstitial.setAdListener(object : InterstitialAdListener { - //广告加载完成 首个广告源加载成功时回调 一次加载流程只会回调一次 - override fun onAdLoaded(tpAdInfo: TPAdInfo?) { - if (tpAdInfo != null) { - Log.d("ocean", "$mPlace 广告load成功,tpAdInfo有值") - InstAdCacheManager.Companion.instance.setAdCache(mPlace, tpInterstitial) - adLoadListener?.loaded(tpAdInfo) - } else { - adLoadListener?.loadFailed("tpAdInfo没有值") - Log.d("ocean", "$mPlace tpAdInfo没有值") - } - } - - // 广告被点击 - override fun onAdClicked(tpAdInfo: TPAdInfo?) { - Log.d("ocean", "$mPlace tradplus onAdClicked") - } - - // 广告成功展示在页面上 - override fun onAdImpression(tpAdInfo: TPAdInfo?) { - Log.d("ocean", "$mPlace tradplus onAdImpression") - } - - // 广告加载失败 - override fun onAdFailed(error: TPAdError?) { - adLoadListener?.loadFailed("code->${error?.errorCode}message->${error?.errorMsg}") - Log.d( - "ocean", - "$mPlace load ad onError->code->${error?.errorCode}message->${error?.errorMsg}" - ) - } - - // 广告被关闭 - override fun onAdClosed(tpAdInfo: TPAdInfo?) { - Log.d("ocean", "$mPlace tradplus onAdClosed") - } - - // 视频播放开始(部分广告源支持) - override fun onAdVideoStart(tpAdInfo: TPAdInfo?) { - Log.d("ocean", "$mPlace tradplus onAdVideoStart") - } - - //视频播放结束(部分广告源支持) - override fun onAdVideoEnd(tpAdInfo: TPAdInfo?) { - Log.d("ocean", "$mPlace tradplus onAdVideoEnd") - } - - //视频播放失败(部分广告源支持) - override fun onAdVideoError(tpAdInfo: TPAdInfo?, error: TPAdError?) { - Log.d( - "ocean", - "$mPlace onAdVideoError code->${error?.errorCode}message->${error?.errorMsg}" - ) - } - }) - tpInterstitial.loadAd() - } -} \ No newline at end of file diff --git a/app/src/main/java/com/keyborad/theme/trendyborad/ad/AdInstShower.kt b/app/src/main/java/com/keyborad/theme/trendyborad/ad/AdInstShower.kt deleted file mode 100644 index 9ba5194..0000000 --- a/app/src/main/java/com/keyborad/theme/trendyborad/ad/AdInstShower.kt +++ /dev/null @@ -1,69 +0,0 @@ -package com.keyborad.theme.trendyborad.ad - -import android.app.Activity -import android.util.Log -import com.tradplus.ads.base.bean.TPAdError -import com.tradplus.ads.base.bean.TPAdInfo -import com.tradplus.ads.open.interstitial.InterstitialAdListener - -class AdInstShower { - private var mPlace: String - private var showListener: ShowListener? = null - private var activity: Activity? = null - - constructor(activity: Activity, place: String, showListener: ShowListener?) { - this.mPlace = place - this.showListener = showListener - this.activity = activity - init() - } - - constructor(place: String, showListener: ShowListener?) { - this.mPlace = place - this.showListener = showListener - init() - } - - private fun init() { - val interstitialAd = InstAdCacheManager.Companion.instance.getAdCache(mPlace) - interstitialAd?.setAdListener(object : InterstitialAdListener { - //广告加载完成 首个广告源加载成功时回调 一次加载流程只会回调一次 - override fun onAdLoaded(tpAdInfo: TPAdInfo?) {} - - // 广告被点击 - override fun onAdClicked(tpAdInfo: TPAdInfo?) { - showListener?.onAdClicked() - Log.d("ocean", "AdInstShower 广告点击回调") - } - - // 广告成功展示在页面上 - override fun onAdImpression(tpAdInfo: TPAdInfo?) { - showListener?.onAdShown(tpAdInfo) - Log.d("ocean", "AdInstShower 广告展示回调") - } - - // 广告加载失败 - override fun onAdFailed(error: TPAdError?) {} - - // 广告被关闭 - override fun onAdClosed(tpAdInfo: TPAdInfo?) { - showListener?.onAdClosed() - Log.d("ocean", "AdInstShower 广告关闭回调") - } - - // 视频播放开始(部分广告源支持) - override fun onAdVideoStart(tpAdInfo: TPAdInfo?) {} - - //视频播放结束(部分广告源支持) - override fun onAdVideoEnd(tpAdInfo: TPAdInfo?) {} - - //视频播放失败(部分广告源支持) - override fun onAdVideoError(tpAdInfo: TPAdInfo?, error: TPAdError?) { - Log.d("ocean", "AdInstShower 视频广告播放失败回调->${error}") - showListener?.onAdShowFailed(AdShowFailed(error?.errorMsg.toString())) - } - }) - interstitialAd?.showAd(activity!!, mPlace) - } - -} \ No newline at end of file diff --git a/app/src/main/java/com/keyborad/theme/trendyborad/ad/AdShowFailed.kt b/app/src/main/java/com/keyborad/theme/trendyborad/ad/AdShowFailed.kt deleted file mode 100644 index 6a0919f..0000000 --- a/app/src/main/java/com/keyborad/theme/trendyborad/ad/AdShowFailed.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.keyborad.theme.trendyborad.ad - -data class AdShowFailed( - val msg: String = "", -) \ No newline at end of file diff --git a/app/src/main/java/com/keyborad/theme/trendyborad/ad/AdsInsUtil.kt b/app/src/main/java/com/keyborad/theme/trendyborad/ad/AdsInsUtil.kt deleted file mode 100644 index b3a2d24..0000000 --- a/app/src/main/java/com/keyborad/theme/trendyborad/ad/AdsInsUtil.kt +++ /dev/null @@ -1,28 +0,0 @@ -package com.keyborad.theme.trendyborad.ad - -import android.app.Activity - -object AdsInsUtil { - - object Placement { - const val TOP_ON_AD_ONE = "15DEDAAB580016A6FEA0F5A5DF85E712" - const val TOP_ON_AD_TOW = "739DD8E223572D6D65CC4EC1DE1CDC12" - const val TOP_ON_AD_THREE = "0D27FE8F7CB7A19D82235897A01DF112" - } - - fun loadAd( - act: Activity, - adID: String, - loadListener: LoadListener? - ): AdInstLoad { - return AdInstLoad(act, adID, loadListener) - } - - fun showAd( - act: Activity, - adID: String, - listener: ShowListener - ): AdInstShower { - return AdInstShower(act, adID, listener) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/keyborad/theme/trendyborad/ad/InstAdCacheManager.kt b/app/src/main/java/com/keyborad/theme/trendyborad/ad/InstAdCacheManager.kt deleted file mode 100644 index d8c1475..0000000 --- a/app/src/main/java/com/keyborad/theme/trendyborad/ad/InstAdCacheManager.kt +++ /dev/null @@ -1,35 +0,0 @@ -package com.keyborad.theme.trendyborad.ad - -import com.tradplus.ads.open.interstitial.TPInterstitial - -class InstAdCacheManager { - private val mAdCacheDict: MutableMap = mutableMapOf() - - companion object { - val instance: InstAdCacheManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { - InstAdCacheManager() - } - } - - fun setAdCache(place: String, adCache: TPInterstitial) { - mAdCacheDict[place] = adCache - } - - fun getAdCache(place: String): TPInterstitial? { - return mAdCacheDict[place] - } - - fun getLoadedInstCount(): Int { - var count = 0 - try { - mAdCacheDict.forEach { (key, value) -> - if (value.isReady) { - count += 1 - } - } - } catch (_: Exception) { - - } - return count - } -} \ No newline at end of file diff --git a/app/src/main/java/com/keyborad/theme/trendyborad/ad/LoadListener.kt b/app/src/main/java/com/keyborad/theme/trendyborad/ad/LoadListener.kt deleted file mode 100644 index 7ff942b..0000000 --- a/app/src/main/java/com/keyborad/theme/trendyborad/ad/LoadListener.kt +++ /dev/null @@ -1,8 +0,0 @@ -package com.keyborad.theme.trendyborad.ad - -import com.tradplus.ads.base.bean.TPAdInfo - -interface LoadListener { - fun loadFailed(error: String) {} - fun loaded(ad: TPAdInfo) {} -} \ No newline at end of file diff --git a/app/src/main/java/com/keyborad/theme/trendyborad/ad/ShowListener.kt b/app/src/main/java/com/keyborad/theme/trendyborad/ad/ShowListener.kt deleted file mode 100644 index 7a60da1..0000000 --- a/app/src/main/java/com/keyborad/theme/trendyborad/ad/ShowListener.kt +++ /dev/null @@ -1,10 +0,0 @@ -package com.keyborad.theme.trendyborad.ad - -import com.tradplus.ads.base.bean.TPAdInfo - -interface ShowListener { - fun onAdShown(ad: TPAdInfo?) {} - fun onAdShowFailed(error: AdShowFailed?) {} - fun onAdClosed() {} - fun onAdClicked() {} -} diff --git a/app/src/main/java/com/keyborad/theme/trendyborad/trendykeyboardhelper/TrendyMyKeyBoardViewTrendy.java b/app/src/main/java/com/keyborad/theme/trendyborad/trendykeyboardhelper/TrendyMyKeyBoardViewTrendy.java index c14da65..3c428d0 100644 --- a/app/src/main/java/com/keyborad/theme/trendyborad/trendykeyboardhelper/TrendyMyKeyBoardViewTrendy.java +++ b/app/src/main/java/com/keyborad/theme/trendyborad/trendykeyboardhelper/TrendyMyKeyBoardViewTrendy.java @@ -170,7 +170,15 @@ public class TrendyMyKeyBoardViewTrendy extends TrendyCodeKeyBoardView { case TrendyKeyNames.KEY_CODE_SPACE: onDrawCurKey(curKey, canvas, null, configBg, null); break; - case TrendyKeyNames.KEY_CODE_COMPLETE, TrendyKeyNames.KEY_CODE_CANCEL: + case TrendyKeyNames.KEY_CODE_COMPLETE: + Log.d(TrendyApp.TAG, "-11111111111---------curImeAction=" + curImeAction); + if (curImeAction == EditorInfo.IME_ACTION_SEARCH) { + onDrawCurKey(curKey, canvas, "Search", configBg, null); + } else { + onDrawCurKey(curKey, canvas, "Done", configBg, null); + } + break; + case TrendyKeyNames.KEY_CODE_CANCEL: Log.d(TrendyApp.TAG, "-11111111111---------curImeAction=" + curImeAction); if (curImeAction == EditorInfo.IME_ACTION_SEARCH) { onDrawCurKey(curKey, canvas, "Search", configBg, null); @@ -210,7 +218,15 @@ public class TrendyMyKeyBoardViewTrendy extends TrendyCodeKeyBoardView { case TrendyKeyNames.KEY_CODE_SPACE: onDrawCurKey(curKey, canvas, null, themesManager.getSpaceDraw(), null); break; - case TrendyKeyNames.KEY_CODE_COMPLETE, TrendyKeyNames.KEY_CODE_CANCEL: + case TrendyKeyNames.KEY_CODE_COMPLETE: + Log.d(TrendyApp.TAG, "-11111111111---------curImeAction=" + curImeAction); + if (curImeAction == EditorInfo.IME_ACTION_SEARCH) { + onDrawCurKey(curKey, canvas, "Search", themesManager.getFunctionDraw(), null); + } else { + onDrawCurKey(curKey, canvas, "Done", themesManager.getFunctionDraw(), null); + } + break; + case TrendyKeyNames.KEY_CODE_CANCEL: Log.d(TrendyApp.TAG, "-11111111111---------curImeAction=" + curImeAction); if (curImeAction == EditorInfo.IME_ACTION_SEARCH) { onDrawCurKey(curKey, canvas, "Search", themesManager.getFunctionDraw(), null); diff --git a/app/src/main/java/com/keyborad/theme/trendyborad/trendyuiactivity/SplashActivity.kt b/app/src/main/java/com/keyborad/theme/trendyborad/trendyuiactivity/SplashActivity.kt index 320e771..9cb4e0e 100644 --- a/app/src/main/java/com/keyborad/theme/trendyborad/trendyuiactivity/SplashActivity.kt +++ b/app/src/main/java/com/keyborad/theme/trendyborad/trendyuiactivity/SplashActivity.kt @@ -1,22 +1,23 @@ package com.keyborad.theme.trendyborad.trendyuiactivity import android.annotation.SuppressLint +import android.app.Activity import android.content.Intent import android.os.Bundle import android.os.CountDownTimer -import android.widget.Toast +import androidx.activity.enableEdgeToEdge import androidx.core.view.ViewCompat -import androidx.core.view.WindowCompat import androidx.core.view.WindowInsetsCompat +import com.ad.tradpluslibrary.TPAdManager import com.keyborad.theme.trendyborad.R -import com.keyborad.theme.trendyborad.ad.AdShowFailed -import com.keyborad.theme.trendyborad.ad.AdsInsUtil -import com.keyborad.theme.trendyborad.ad.LoadListener -import com.keyborad.theme.trendyborad.ad.ShowListener +import com.keyborad.theme.trendyborad.TrendyApp import com.keyborad.theme.trendyborad.databinding.ActivityLaTrendyBinding -import com.tradplus.ads.base.bean.TPAdInfo +import com.keyborad.theme.trendyborad.trendyutils.TrendyCommon -class SplashActivity : BaseActivity() { +/** + * 继承Activity不要修改 + */ +class SplashActivity : Activity() { private var countDownTimer: CountDownTimer? = null private lateinit var vb: ActivityLaTrendyBinding @@ -48,121 +49,48 @@ class SplashActivity : BaseActivity() { super.onCreate(savedInstanceState) vb = ActivityLaTrendyBinding.inflate(layoutInflater) setContentView(vb.root) - ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets -> val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom) insets } - val windowInsetsController = WindowCompat.getInsetsController(window, window.decorView) - windowInsetsController.isAppearanceLightStatusBars = true//状态栏文字颜色 + TrendyCommon.initFullScreen(this@SplashActivity,true) // 1. 进来就 load 广告 - loadSplashAd() - - // 2. 启动进度条(只启动一次) - startProgressTimer() +// loadSplashAd() +// +// // 2. 启动进度条(只启动一次) +// startProgressTimer() + init() } + private fun init(){ + TPAdManager.init( + this, + TrendyApp.TAG, + "820EA2E07D9C3C4D0DD816EB220F2711", + "15DEDAAB580016A6FEA0F5A5DF85E712", + "739DD8E223572D6D65CC4EC1DE1CDC12", + "0D27FE8F7CB7A19D82235897A01DF112" + ){} + countDownTimer = + TPAdManager.showWelcomeAd(this, totalTime, { aLong-> - private fun startProgressTimer() { - countDownTimer?.cancel() + val progressPercentage = ((100 * aLong) / totalTime) + val countdownPercentage = 100 - progressPercentage + vb.novaProgress.progress = countdownPercentage.toString().toInt() - countDownTimer = object : CountDownTimer(totalTime, tickInterval) { - @SuppressLint("SetTextI18n") - override fun onTick(millisUntilFinished: Long) { - progress += currentStep - if (progress >= 100f) { - progress = 100f - vb.novaProgress.progress = 100 - cancel() - onProgressFinished() - } else { - vb.novaProgress.progress = progress.toInt() - } + }){ + vb.novaProgress.progress = 100 + startActivity(Intent(this, TrendyCategoryActivity::class.java)) + finish() } - - override fun onFinish() { - // 不使用 - } - }.start() + countDownTimer?.start() } - // 进度走完后的统一出口 - private fun onProgressFinished() { - if (hasNavigated) return - if (adAvailable) { - showSplashAd() - } else { - navigateToNext() - } - } - private fun loadSplashAd() { - AdsInsUtil.loadAd( - act = this, - adID = AdsInsUtil.Placement.TOP_ON_AD_ONE, - loadListener = object : LoadListener { - - override fun loaded(ad: TPAdInfo) { - adAvailable = true - accelerateProgress() - } - - override fun loadFailed(error: String) { - adAvailable = false - accelerateProgress() - } - } - ) - } - - // 广告 load 完 → 加速 - private fun accelerateProgress() { - currentStep = fastStep - } - - private fun showSplashAd() { - AdsInsUtil.showAd( - act = this, - adID = AdsInsUtil.Placement.TOP_ON_AD_ONE, - listener = object : ShowListener { - - override fun onAdShown(ad: TPAdInfo?) {} - - override fun onAdShowFailed(error: AdShowFailed?) { - navigateToNext() - } - - override fun onAdClosed() { - navigateToNext() - } - } - ) - } - - private fun navigateToNext() { - if (hasNavigated) return - hasNavigated = true - navigateToMainActivity() - } - - override fun shouldInterceptBackPress(): Boolean = true - override fun onInterceptBackPressed() {} - - @SuppressLint("QueryPermissionsNeeded") - private fun navigateToMainActivity() { - try { - startActivity(Intent(this, TrendyCategoryActivity::class.java)) - finish() - } catch (e: Exception) { - Toast.makeText(this, "跳转失败", Toast.LENGTH_SHORT).show() - e.printStackTrace() - finish() - } - } override fun onDestroy() { super.onDestroy() diff --git a/app/src/main/java/com/keyborad/theme/trendyborad/trendyuiactivity/TrendyCategoryActivity.java b/app/src/main/java/com/keyborad/theme/trendyborad/trendyuiactivity/TrendyCategoryActivity.java index 6e72313..d30d328 100644 --- a/app/src/main/java/com/keyborad/theme/trendyborad/trendyuiactivity/TrendyCategoryActivity.java +++ b/app/src/main/java/com/keyborad/theme/trendyborad/trendyuiactivity/TrendyCategoryActivity.java @@ -16,17 +16,12 @@ import androidx.fragment.app.Fragment; import androidx.viewpager2.adapter.FragmentStateAdapter; import androidx.viewpager2.widget.ViewPager2; +import com.google.android.material.tabs.TabLayout; import com.keyborad.theme.trendyborad.R; -import com.keyborad.theme.trendyborad.ad.AdsInsUtil; -import com.keyborad.theme.trendyborad.ad.LoadListener; import com.keyborad.theme.trendyborad.databinding.ActivityCaTrendyBinding; -import com.keyborad.theme.trendyborad.trendyutils.TrendyCustomTextView; import com.keyborad.theme.trendyborad.trendyuifragment.TrendyFragmentFavoriteKeyboard; import com.keyborad.theme.trendyborad.trendyuifragment.TrendyFragmentHome; -import com.google.android.material.tabs.TabLayout; -import com.tradplus.ads.base.bean.TPAdInfo; - -import org.jetbrains.annotations.NotNull; +import com.keyborad.theme.trendyborad.trendyutils.TrendyCustomTextView; import java.util.ArrayList; import java.util.List; @@ -127,31 +122,8 @@ public class TrendyCategoryActivity extends AppCompatActivity { @Override protected void onResume() { super.onResume(); - loadAd(); + } - private void loadAd() { - AdsInsUtil.INSTANCE.loadAd(this, AdsInsUtil.Placement.TOP_ON_AD_THREE, new LoadListener() { - @Override - public void loaded(@NotNull TPAdInfo ad) { - } - - @Override - public void loadFailed(@NotNull String error) { - - } - }); - AdsInsUtil.INSTANCE.loadAd(this, AdsInsUtil.Placement.TOP_ON_AD_TOW, new LoadListener() { - @Override - public void loaded(@NotNull TPAdInfo ad) { - - } - - @Override - public void loadFailed(@NotNull String error) { - - } - }); - } } \ No newline at end of file diff --git a/app/src/main/java/com/keyborad/theme/trendyborad/trendyuiactivity/TrendyCategoryListActivity.java b/app/src/main/java/com/keyborad/theme/trendyborad/trendyuiactivity/TrendyCategoryListActivity.java index 53e2053..7c26387 100644 --- a/app/src/main/java/com/keyborad/theme/trendyborad/trendyuiactivity/TrendyCategoryListActivity.java +++ b/app/src/main/java/com/keyborad/theme/trendyborad/trendyuiactivity/TrendyCategoryListActivity.java @@ -3,29 +3,25 @@ package com.keyborad.theme.trendyborad.trendyuiactivity; import android.os.Bundle; import androidx.activity.EdgeToEdge; -import androidx.appcompat.app.AppCompatActivity; import androidx.core.graphics.Insets; import androidx.core.view.ViewCompat; import androidx.core.view.WindowInsetsCompat; import androidx.recyclerview.widget.GridLayoutManager; -import com.keyborad.theme.trendyborad.TrendyApp; +import com.ad.tradpluslibrary.TPAdManager; import com.keyborad.theme.trendyborad.R; -import com.keyborad.theme.trendyborad.ad.AdsInsUtil; -import com.keyborad.theme.trendyborad.ad.LoadListener; -import com.keyborad.theme.trendyborad.ad.ShowListener; +import com.keyborad.theme.trendyborad.TrendyApp; import com.keyborad.theme.trendyborad.bean.BeanDetails; import com.keyborad.theme.trendyborad.bean.BeanWrapper; import com.keyborad.theme.trendyborad.databinding.ActivityCaLtTrendyBinding; -import com.keyborad.theme.trendyborad.trendylistutils.TrendyNewCategoryAdapter; // 替换为新适配器 +import com.keyborad.theme.trendyborad.trendylistutils.TrendyNewCategoryAdapter; import com.keyborad.theme.trendyborad.trendyutils.TrendyListDecoration; -import com.tradplus.ads.base.bean.TPAdInfo; - -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import java.util.List; +import kotlin.Unit; +import kotlin.jvm.functions.Function0; + public class TrendyCategoryListActivity extends BaseActivity { private ActivityCaLtTrendyBinding vb; public static final String KEY_NAME = "class_name"; @@ -50,6 +46,12 @@ public class TrendyCategoryListActivity extends BaseActivity { name = getIntent().getStringExtra(KEY_NAME); initData(); initClick(); + TPAdManager.INSTANCE.showTPAD(TrendyCategoryListActivity.this, new Function0() { + @Override + public Unit invoke() { + return null; + } + }); } private void initData() { @@ -96,15 +98,11 @@ public class TrendyCategoryListActivity extends BaseActivity { @Override protected void onInterceptBackPressed() { - AdsInsUtil.INSTANCE.showAd(this, AdsInsUtil.Placement.TOP_ON_AD_TOW, new ShowListener() { - @Override - public void onAdShown(@Nullable TPAdInfo ad) { - loadAd(); - } + TPAdManager.INSTANCE.showTPAD(TrendyCategoryListActivity.this, new Function0() { @Override - public void onAdClosed() { - loadAd(); + public Unit invoke() { + return null; } }); if (getBackPressedCallback() != null) { @@ -113,12 +111,5 @@ public class TrendyCategoryListActivity extends BaseActivity { getOnBackPressedDispatcher().onBackPressed(); } - private void loadAd(){ - AdsInsUtil.INSTANCE.loadAd(this, AdsInsUtil.Placement.TOP_ON_AD_TOW, new LoadListener() { - @Override - public void loadFailed(@NotNull String error) { - } - }); - } } \ No newline at end of file diff --git a/app/src/main/java/com/keyborad/theme/trendyborad/trendyuiactivity/TrendySetKeyboardActivity.kt b/app/src/main/java/com/keyborad/theme/trendyborad/trendyuiactivity/TrendySetKeyboardActivity.kt index e8573d8..7808291 100644 --- a/app/src/main/java/com/keyborad/theme/trendyborad/trendyuiactivity/TrendySetKeyboardActivity.kt +++ b/app/src/main/java/com/keyborad/theme/trendyborad/trendyuiactivity/TrendySetKeyboardActivity.kt @@ -20,23 +20,24 @@ import androidx.core.view.isVisible import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.RecyclerView -import com.keyborad.theme.trendyborad.TrendyApp -import com.keyborad.theme.trendyborad.R -import com.keyborad.theme.trendyborad.bean.BeanDetails -import com.keyborad.theme.trendyborad.trendycallback.TrendyOnItemClickCallback -import com.keyborad.theme.trendyborad.trendycallback.TrendySetKeyboardCallback -import com.keyborad.theme.trendyborad.database.DatabaseManager -import com.keyborad.theme.trendyborad.trendylistutils.TrendySetKeyboardMoreAdapter -import com.keyborad.theme.trendyborad.trendyuifragment.TrendyDialogEnableKeyboard -import com.keyborad.theme.trendyborad.trendyutils.TrendyCommon -import com.keyborad.theme.trendyborad.trendyutils.TrendyDealZipFile -import com.keyborad.theme.trendyborad.trendyutils.TrendySaveCurrentTheme +import com.ad.tradpluslibrary.TPAdManager import com.bumptech.glide.Glide import com.bumptech.glide.integration.webp.decoder.WebpDrawable import com.bumptech.glide.load.DataSource import com.bumptech.glide.load.engine.GlideException import com.bumptech.glide.request.RequestListener import com.bumptech.glide.request.target.Target +import com.keyborad.theme.trendyborad.R +import com.keyborad.theme.trendyborad.TrendyApp +import com.keyborad.theme.trendyborad.bean.BeanDetails +import com.keyborad.theme.trendyborad.database.DatabaseManager +import com.keyborad.theme.trendyborad.trendycallback.TrendyOnItemClickCallback +import com.keyborad.theme.trendyborad.trendycallback.TrendySetKeyboardCallback +import com.keyborad.theme.trendyborad.trendylistutils.TrendySetKeyboardMoreAdapter +import com.keyborad.theme.trendyborad.trendyuifragment.TrendyDialogEnableKeyboard +import com.keyborad.theme.trendyborad.trendyutils.TrendyCommon +import com.keyborad.theme.trendyborad.trendyutils.TrendyDealZipFile +import com.keyborad.theme.trendyborad.trendyutils.TrendySaveCurrentTheme import kotlinx.coroutines.launch import java.io.File @@ -106,6 +107,7 @@ class TrendySetKeyboardActivity : AppCompatActivity() { displayData() setApply() onClick() + TPAdManager.showTPAD(this@TrendySetKeyboardActivity) { } } @@ -167,7 +169,10 @@ class TrendySetKeyboardActivity : AppCompatActivity() { private fun onClick() { imgBack.setOnClickListener { - finish() + TPAdManager.showTPAD(this@TrendySetKeyboardActivity){ + finish() + } + } imgLike.setOnClickListener { @@ -242,13 +247,16 @@ class TrendySetKeyboardActivity : AppCompatActivity() { private fun setApply() { applyBtn.setOnClickListener { - val checkEnable = TrendyCommon.checkEnable(this) - val checkSetDefault = TrendyCommon.checkSetDefault(this) - if (!checkEnable || !checkSetDefault) { - showDialog() - return@setOnClickListener + TPAdManager.showTPAD(this@TrendySetKeyboardActivity) { + val checkEnable = TrendyCommon.checkEnable(this) + val checkSetDefault = TrendyCommon.checkSetDefault(this) + if (!checkEnable || !checkSetDefault) { + showDialog() + return@showTPAD + } + startDown() } - startDown() + } } diff --git a/app/src/main/java/com/keyborad/theme/trendyborad/trendyuiactivity/TrendySuccessPreviewActivity.java b/app/src/main/java/com/keyborad/theme/trendyborad/trendyuiactivity/TrendySuccessPreviewActivity.java index 059e286..7b01942 100644 --- a/app/src/main/java/com/keyborad/theme/trendyborad/trendyuiactivity/TrendySuccessPreviewActivity.java +++ b/app/src/main/java/com/keyborad/theme/trendyborad/trendyuiactivity/TrendySuccessPreviewActivity.java @@ -18,24 +18,21 @@ import androidx.core.graphics.Insets; import androidx.core.view.ViewCompat; import androidx.core.view.WindowInsetsCompat; -import com.keyborad.theme.trendyborad.R; -import com.keyborad.theme.trendyborad.ad.AdsInsUtil; -import com.keyborad.theme.trendyborad.ad.LoadListener; -import com.keyborad.theme.trendyborad.ad.ShowListener; -import com.keyborad.theme.trendyborad.databinding.ActivitySsPwTrendyBinding; -import com.keyborad.theme.trendyborad.trendyutils.TrendyKeyNames; -import com.keyborad.theme.trendyborad.trendyutils.TrendyCommon; -import com.keyborad.theme.trendyborad.trendyutils.TrendySaveCurrentTheme; +import com.ad.tradpluslibrary.TPAdManager; import com.bumptech.glide.Glide; import com.bumptech.glide.load.DataSource; import com.bumptech.glide.load.engine.GlideException; import com.bumptech.glide.request.RequestListener; import com.bumptech.glide.request.target.Target; -import com.tradplus.ads.base.bean.TPAdInfo; - -import org.jetbrains.annotations.NotNull; +import com.keyborad.theme.trendyborad.R; +import com.keyborad.theme.trendyborad.databinding.ActivitySsPwTrendyBinding; +import com.keyborad.theme.trendyborad.trendyutils.TrendyCommon; +import com.keyborad.theme.trendyborad.trendyutils.TrendyKeyNames; +import com.keyborad.theme.trendyborad.trendyutils.TrendySaveCurrentTheme; import jp.wasabeef.glide.transformations.BlurTransformation; +import kotlin.Unit; +import kotlin.jvm.functions.Function0; public class TrendySuccessPreviewActivity extends AppCompatActivity { @@ -51,17 +48,7 @@ public class TrendySuccessPreviewActivity extends AppCompatActivity { EdgeToEdge.enable(this); setContentView(vb.getRoot()); - AdsInsUtil.INSTANCE.showAd(this, AdsInsUtil.Placement.TOP_ON_AD_THREE, new ShowListener() { - @Override - public void onAdShown(@org.jetbrains.annotations.Nullable TPAdInfo ad) { - loadAd(); - } - @Override - public void onAdClosed() { - loadAd(); - } - }); ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> { Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()); @@ -85,7 +72,13 @@ public class TrendySuccessPreviewActivity extends AppCompatActivity { vb.idBack.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - finish(); + TPAdManager.INSTANCE.showTPAD(TrendySuccessPreviewActivity.this, new Function0() { + @Override + public Unit invoke() { + finish(); + return null; + } + }); } }); if (curPath == null) { @@ -148,12 +141,5 @@ public class TrendySuccessPreviewActivity extends AppCompatActivity { }); } - private void loadAd(){ - AdsInsUtil.INSTANCE.loadAd(this, AdsInsUtil.Placement.TOP_ON_AD_THREE, new LoadListener() { - @Override - public void loadFailed(@NotNull String error) { - } - }); - } } \ No newline at end of file diff --git a/app/src/main/res/drawable/background.xml b/app/src/main/res/drawable/background.xml index 2f6e42b..254c3a0 100644 --- a/app/src/main/res/drawable/background.xml +++ b/app/src/main/res/drawable/background.xml @@ -1,6 +1,5 @@ - @color/teal_200 @color/black - @color/transparent \ No newline at end of file diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 88d74d4..2287322 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -10,7 +10,6 @@ @color/teal_700 @color/black - @color/transparent diff --git a/app/src/main/res/xml/net.xml b/app/src/main/res/xml/net.xml index 69cc842..17c4835 100644 --- a/app/src/main/res/xml/net.xml +++ b/app/src/main/res/xml/net.xml @@ -3,4 +3,7 @@ mobile-server.lux-ad.com + + + diff --git a/gradle.properties b/gradle.properties index dae8329..b68c89c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -20,4 +20,6 @@ kotlin.code.style=official # Enables namespacing of each library's R class so that its R class includes only the # resources declared in the library itself and none from the library's dependencies, # thereby reducing the size of the R class for that library -android.nonTransitiveRClass=true \ No newline at end of file +android.nonTransitiveRClass=true +# Firebase Crashlytics ?? mapping ??????? +firebaseCrashlytics.mappingFileUploadTimeout=60 \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index 9081d1f..b755631 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -15,17 +15,26 @@ dependencyResolutionManagement { flatDir { dirs("libs") } - maven("https://jitpack.io") - // TradPlus - mavenCentral() + + //------------------------- TradPlus // Ironsource - maven("https://android-sdk.is.com/") + maven { url = uri("https://android-sdk.is.com/") } // Pangle - maven("https://artifact.bytedance.com/repository/pangle") + maven { url = uri("https://artifact.bytedance.com/repository/pangle") } + // Chartboost + maven { url = uri("https://cboost.jfrog.io/artifactory/chartboost-ads/") } + maven { + name = "Chartboost Mediation’s maven repo" + url = uri("https://cboost.jfrog.io/artifactory/chartboost-mediation") + } // Mintegral //Launch GP market application, Android X Version //If you fail to pull the code using gradle, add the maven warehouse configuration to the project root build.gradle file - maven("https://dl-maven-android.mintegral.com/repository/mbridge_android_sdk_oversea") + maven { + url = uri("https://dl-maven-android.mintegral.com/repository/mbridge_android_sdk_oversea") + } + + } }