Jelajahi Sumber

[FC]GroMore聚合平台接入

fengcong 4 tahun lalu
induk
melakukan
11696fbffb
11 mengubah file dengan 1372 tambahan dan 12 penghapusan
  1. 6 0
      build/jsb-link/frameworks/runtime-src/proj.android-studio/.idea/compiler.xml
  2. 51 0
      build/jsb-link/frameworks/runtime-src/proj.android-studio/.idea/modules/-1746423203/proj.android-studio.libcocos2dx.iml
  3. 139 0
      build/jsb-link/frameworks/runtime-src/proj.android-studio/.idea/modules/app/proj.android-studio.EasyEliminate.iml
  4. 0 12
      build/jsb-link/frameworks/runtime-src/proj.android-studio/.idea/runConfigurations.xml
  5. 2 0
      build/jsb-link/frameworks/runtime-src/proj.android-studio/app/src/org/cocos2dx/javascript/thirdSdk/groMore/GroMoreMgr.java
  6. 199 0
      build/jsb-link/frameworks/runtime-src/proj.android-studio/app/src/org/cocos2dx/javascript/thirdSdk/groMore/ad/activity/BannerAdActivity.java
  7. 245 0
      build/jsb-link/frameworks/runtime-src/proj.android-studio/app/src/org/cocos2dx/javascript/thirdSdk/groMore/ad/activity/FullVideoAdActivity.java
  8. 203 0
      build/jsb-link/frameworks/runtime-src/proj.android-studio/app/src/org/cocos2dx/javascript/thirdSdk/groMore/ad/activity/InterstitialAdActivity.java
  9. 2 0
      build/jsb-link/frameworks/runtime-src/proj.android-studio/app/src/org/cocos2dx/javascript/thirdSdk/groMore/ad/activity/NativeAdActivity.java
  10. 297 0
      build/jsb-link/frameworks/runtime-src/proj.android-studio/app/src/org/cocos2dx/javascript/thirdSdk/groMore/ad/activity/RewardVideoAdActivity.java
  11. 228 0
      build/jsb-link/frameworks/runtime-src/proj.android-studio/app/src/org/cocos2dx/javascript/thirdSdk/groMore/ad/activity/SplashAdActivity.java

+ 6 - 0
build/jsb-link/frameworks/runtime-src/proj.android-studio/.idea/compiler.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="CompilerConfiguration">
+    <bytecodeTargetLevel target="1.8" />
+  </component>
+</project>

+ 51 - 0
build/jsb-link/frameworks/runtime-src/proj.android-studio/.idea/modules/-1746423203/proj.android-studio.libcocos2dx.iml

@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module external.linked.project.id=":libcocos2dx" external.linked.project.path="$MODULE_DIR$/../../../../../../../../../../Develop/CocosDashboard_1.0.9/resources/.editors/Creator/2.4.5/resources/cocos2d-x/cocos/platform/android/libcocos2dx" external.root.project.path="$MODULE_DIR$/../../.." external.system.id="GRADLE" external.system.module.group="proj.android-studio" external.system.module.version="unspecified" type="JAVA_MODULE" version="4">
+  <component name="FacetManager">
+    <facet type="android-gradle" name="Android-Gradle">
+      <configuration>
+        <option name="GRADLE_PROJECT_PATH" value=":libcocos2dx" />
+        <option name="LAST_SUCCESSFUL_SYNC_AGP_VERSION" />
+        <option name="LAST_KNOWN_AGP_VERSION" value="3.3.3" />
+      </configuration>
+    </facet>
+    <facet type="android" name="Android">
+      <configuration>
+        <option name="SELECTED_BUILD_VARIANT" value="debug" />
+        <option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
+        <option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" />
+        <afterSyncTasks>
+          <task>generateDebugSources</task>
+        </afterSyncTasks>
+        <option name="ALLOW_USER_CONFIGURATION" value="false" />
+        <option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" />
+        <option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/../../../../../../../../../../Develop/CocosDashboard_1.0.9/resources/.editors/Creator/2.4.5/resources/cocos2d-x/cocos/platform/android/libcocos2dx/src/main/res;file://$MODULE_DIR$/../../../../../../../../../../Develop/CocosDashboard_1.0.9/resources/.editors/Creator/2.4.5/resources/cocos2d-x/cocos/platform/android/libcocos2dx/src/debug/res;file://$MODULE_DIR$/../../../../../../../../../../Develop/CocosDashboard_1.0.9/resources/.editors/Creator/2.4.5/resources/cocos2d-x/cocos/platform/android/libcocos2dx/build/generated/res/rs/debug;file://$MODULE_DIR$/../../../../../../../../../../Develop/CocosDashboard_1.0.9/resources/.editors/Creator/2.4.5/resources/cocos2d-x/cocos/platform/android/libcocos2dx/build/generated/res/resValues/debug" />
+        <option name="TEST_RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/../../../../../../../../../../Develop/CocosDashboard_1.0.9/resources/.editors/Creator/2.4.5/resources/cocos2d-x/cocos/platform/android/libcocos2dx/src/androidTest/res;file://$MODULE_DIR$/../../../../../../../../../../Develop/CocosDashboard_1.0.9/resources/.editors/Creator/2.4.5/resources/cocos2d-x/cocos/platform/android/libcocos2dx/src/androidTestDebug/res;file://$MODULE_DIR$/../../../../../../../../../../Develop/CocosDashboard_1.0.9/resources/.editors/Creator/2.4.5/resources/cocos2d-x/cocos/platform/android/libcocos2dx/build/generated/res/rs/androidTest/debug;file://$MODULE_DIR$/../../../../../../../../../../Develop/CocosDashboard_1.0.9/resources/.editors/Creator/2.4.5/resources/cocos2d-x/cocos/platform/android/libcocos2dx/build/generated/res/resValues/androidTest/debug" />
+        <option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" />
+        <option name="PROJECT_TYPE" value="1" />
+      </configuration>
+    </facet>
+  </component>
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
+    <output url="file://$MODULE_DIR$/../../../../../../../../../../Develop/CocosDashboard_1.0.9/resources/.editors/Creator/2.4.5/resources/cocos2d-x/cocos/platform/android/libcocos2dx/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes" />
+    <output-test url="file://$MODULE_DIR$/../../../../../../../../../../Develop/CocosDashboard_1.0.9/resources/.editors/Creator/2.4.5/resources/cocos2d-x/cocos/platform/android/libcocos2dx/build/intermediates/javac/debugUnitTest/compileDebugUnitTestJavaWithJavac/classes" />
+    <exclude-output />
+    <content url="file://$MODULE_DIR$/../../../../../../../../../../Develop/CocosDashboard_1.0.9/resources/.editors/Creator/2.4.5/resources/cocos2d-x/cocos/platform/android/java/src">
+      <sourceFolder url="file://$MODULE_DIR$/../../../../../../../../../../Develop/CocosDashboard_1.0.9/resources/.editors/Creator/2.4.5/resources/cocos2d-x/cocos/platform/android/java/src" isTestSource="false" />
+    </content>
+    <content url="file://$MODULE_DIR$/../../../../../../../../../../Develop/CocosDashboard_1.0.9/resources/.editors/Creator/2.4.5/resources/cocos2d-x/cocos/platform/android/libcocos2dx">
+      <sourceFolder url="file://$MODULE_DIR$/../../../../../../../../../../Develop/CocosDashboard_1.0.9/resources/.editors/Creator/2.4.5/resources/cocos2d-x/cocos/platform/android/libcocos2dx/build/generated/renderscript_source_output_dir/debug/compileDebugRenderscript/out" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/../../../../../../../../../../Develop/CocosDashboard_1.0.9/resources/.editors/Creator/2.4.5/resources/cocos2d-x/cocos/platform/android/libcocos2dx/build/generated/res/resValues/debug" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/../../../../../../../../../../Develop/CocosDashboard_1.0.9/resources/.editors/Creator/2.4.5/resources/cocos2d-x/cocos/platform/android/libcocos2dx/build/generated/res/rs/debug" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/../../../../../../../../../../Develop/CocosDashboard_1.0.9/resources/.editors/Creator/2.4.5/resources/cocos2d-x/cocos/platform/android/libcocos2dx/build/generated/source/apt/debug" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/../../../../../../../../../../Develop/CocosDashboard_1.0.9/resources/.editors/Creator/2.4.5/resources/cocos2d-x/cocos/platform/android/libcocos2dx/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/../../../../../../../../../../Develop/CocosDashboard_1.0.9/resources/.editors/Creator/2.4.5/resources/cocos2d-x/cocos/platform/android/libcocos2dx/src/main/res" type="java-resource" />
+      <excludeFolder url="file://$MODULE_DIR$/../../../../../../../../../../Develop/CocosDashboard_1.0.9/resources/.editors/Creator/2.4.5/resources/cocos2d-x/cocos/platform/android/libcocos2dx/.gradle" />
+      <excludeFolder url="file://$MODULE_DIR$/../../../../../../../../../../Develop/CocosDashboard_1.0.9/resources/.editors/Creator/2.4.5/resources/cocos2d-x/cocos/platform/android/libcocos2dx/build" />
+    </content>
+    <orderEntry type="jdk" jdkName="Android API 29 Platform" jdkType="Android SDK" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" name="Gradle: ./../../../../../../../Develop/CocosDashboard_1.0.9/resources/.editors/Creator/2.4.5/resources/cocos2d-x/cocos/platform/android/java/libs/com.android.vending.expansion.zipfile.jar" level="project" />
+    <orderEntry type="library" name="Gradle: ./../../../../../../../Develop/CocosDashboard_1.0.9/resources/.editors/Creator/2.4.5/resources/cocos2d-x/cocos/platform/android/java/libs/okhttp-3.12.7.jar" level="project" />
+    <orderEntry type="library" name="Gradle: ./../../../../../../../Develop/CocosDashboard_1.0.9/resources/.editors/Creator/2.4.5/resources/cocos2d-x/cocos/platform/android/java/libs/okio-1.15.0.jar" level="project" />
+  </component>
+</module>

+ 139 - 0
build/jsb-link/frameworks/runtime-src/proj.android-studio/.idea/modules/app/proj.android-studio.EasyEliminate.iml

@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module external.linked.project.id=":EasyEliminate" external.linked.project.path="$MODULE_DIR$/../../../app" external.root.project.path="$MODULE_DIR$/../../.." external.system.id="GRADLE" external.system.module.group="proj.android-studio" external.system.module.version="unspecified" type="JAVA_MODULE" version="4">
+  <component name="FacetManager">
+    <facet type="native-android-gradle" name="Native-Android-Gradle">
+      <configuration>
+        <option name="SELECTED_ABI" value="armeabi-v7a" />
+        <option name="SELECTED_VARIANT" value="debug" />
+      </configuration>
+    </facet>
+    <facet type="android-gradle" name="Android-Gradle">
+      <configuration>
+        <option name="GRADLE_PROJECT_PATH" value=":EasyEliminate" />
+        <option name="LAST_SUCCESSFUL_SYNC_AGP_VERSION" />
+        <option name="LAST_KNOWN_AGP_VERSION" value="3.3.3" />
+      </configuration>
+    </facet>
+    <facet type="android" name="Android">
+      <configuration>
+        <option name="SELECTED_BUILD_VARIANT" value="debug" />
+        <option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
+        <option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" />
+        <afterSyncTasks>
+          <task>generateDebugSources</task>
+        </afterSyncTasks>
+        <option name="ALLOW_USER_CONFIGURATION" value="false" />
+        <option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" />
+        <option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/../../../app/src/main/res;file://$MODULE_DIR$/../../../res;file://$MODULE_DIR$/../../../app/res;file://$MODULE_DIR$/../../../app/libs/topon/res;file://$MODULE_DIR$/../../../app/src/debug/res;file://$MODULE_DIR$/../../../app/build/generated/res/rs/debug;file://$MODULE_DIR$/../../../app/build/generated/res/resValues/debug" />
+        <option name="TEST_RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/../../../app/src/androidTest/res;file://$MODULE_DIR$/../../../app/src/androidTestDebug/res;file://$MODULE_DIR$/../../../app/build/generated/res/rs/androidTest/debug;file://$MODULE_DIR$/../../../app/build/generated/res/resValues/androidTest/debug" />
+        <option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" />
+      </configuration>
+    </facet>
+  </component>
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7">
+    <output url="file://$MODULE_DIR$/../../../app/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes" />
+    <output-test url="file://$MODULE_DIR$/../../../app/build/intermediates/javac/debugUnitTest/compileDebugUnitTestJavaWithJavac/classes" />
+    <exclude-output />
+    <content url="file://$MODULE_DIR$/../../../../Classes">
+      <sourceFolder url="file://$MODULE_DIR$/../../../../Classes" type="native-Source-root" />
+    </content>
+    <content url="file://$MODULE_DIR$/../../../app">
+      <sourceFolder url="file://$MODULE_DIR$/../../../app/build/generated/renderscript_source_output_dir/debug/compileDebugRenderscript/out" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/../../../app/build/generated/res/resValues/debug" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/../../../app/build/generated/res/rs/debug" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/../../../app/build/generated/source/apt/debug" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/../../../app/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/../../../app/libs/topon/res" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/../../../app/src" isTestSource="false" />
+      <excludeFolder url="file://$MODULE_DIR$/../../../app/.gradle" />
+      <excludeFolder url="file://$MODULE_DIR$/../../../app/build" />
+      <excludeFolder url="file://$MODULE_DIR$/../../../app/.cxx" />
+      <excludeFolder url="file://$MODULE_DIR$/../../../app/.externalNativeBuild" />
+    </content>
+    <content url="file://$MODULE_DIR$/../../../jni">
+      <sourceFolder url="file://$MODULE_DIR$/../../../jni" type="native-header-root" />
+    </content>
+    <content url="file://$MODULE_DIR$/../../../jni/hellojavascript">
+      <sourceFolder url="file://$MODULE_DIR$/../../../jni/hellojavascript" type="native-Source-root" />
+    </content>
+    <content url="file://$MODULE_DIR$/../../../res">
+      <sourceFolder url="file://$MODULE_DIR$/../../../res" type="java-resource" />
+    </content>
+    <content url="file://$MODULE_DIR$/../../../src">
+      <sourceFolder url="file://$MODULE_DIR$/../../../src" isTestSource="false" />
+    </content>
+    <content url="file://$MODULE_DIR$/../../../../../../../../../../Develop/CocosDashboard_1.0.9/resources/.editors/Creator/2.4.5/resources/cocos2d-x">
+      <sourceFolder url="file://$MODULE_DIR$/../../../../../../../../../../Develop/CocosDashboard_1.0.9/resources/.editors/Creator/2.4.5/resources/cocos2d-x" type="native-Source-root" />
+    </content>
+    <orderEntry type="jdk" jdkName="Android API 29 Platform" jdkType="Android SDK" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" name="Gradle: ./app/libs/topon/libs/gson-2.8.4.jar" level="project" />
+    <orderEntry type="library" name="Gradle: ./app/libs/umeng/umeng-common-9.4.0.jar" level="project" />
+    <orderEntry type="library" name="Gradle: ./app/libs/umeng/umeng-game-9.2.0+G.jar" level="project" />
+    <orderEntry type="library" name="Gradle: ./app/libs/umeng/utdid4all-1.5.2.1-proguard.jar" level="project" />
+    <orderEntry type="library" name="Gradle: ./../../../../../../../Develop/CocosDashboard_1.0.9/resources/.editors/Creator/2.4.5/resources/cocos2d-x/cocos/platform/android/java/libs/com.android.vending.expansion.zipfile.jar" level="project" />
+    <orderEntry type="library" name="Gradle: ./../../../../../../../Develop/CocosDashboard_1.0.9/resources/.editors/Creator/2.4.5/resources/cocos2d-x/cocos/platform/android/java/libs/okhttp-3.12.7.jar" level="project" />
+    <orderEntry type="library" name="Gradle: ./../../../../../../../Develop/CocosDashboard_1.0.9/resources/.editors/Creator/2.4.5/resources/cocos2d-x/cocos/platform/android/java/libs/okio-1.15.0.jar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.collection:collection:1.0.0" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-common:2.0.0" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.arch.core:core-common:2.0.0" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.annotation:annotation:1.0.0" level="project" />
+    <orderEntry type="library" name="Gradle: ./app/libs/topon/anythink_cocosjs_bridge.aar" level="project" />
+    <orderEntry type="library" name="Gradle: ./app/libs/topon/libs/anythink_banner.aar" level="project" />
+    <orderEntry type="library" name="Gradle: ./app/libs/topon/libs/anythink_china_core.aar" level="project" />
+    <orderEntry type="library" name="Gradle: ./app/libs/topon/libs/anythink_core.aar" level="project" />
+    <orderEntry type="library" name="Gradle: ./app/libs/topon/libs/anythink_interstitial.aar" level="project" />
+    <orderEntry type="library" name="Gradle: ./app/libs/topon/libs/anythink_native.aar" level="project" />
+    <orderEntry type="library" name="Gradle: ./app/libs/topon/libs/anythink_network_baidu.aar" level="project" />
+    <orderEntry type="library" name="Gradle: ./app/libs/topon/libs/anythink_network_gdt.aar" level="project" />
+    <orderEntry type="library" name="Gradle: ./app/libs/topon/libs/anythink_network_kuaishou.aar" level="project" />
+    <orderEntry type="library" name="Gradle: ./app/libs/topon/libs/anythink_network_pangle_china.aar" level="project" />
+    <orderEntry type="library" name="Gradle: ./app/libs/topon/libs/anythink_network_sigmob.aar" level="project" />
+    <orderEntry type="library" name="Gradle: ./app/libs/topon/libs/anythink_rewardvideo.aar" level="project" />
+    <orderEntry type="library" name="Gradle: ./app/libs/topon/libs/anythink_splash.aar" level="project" />
+    <orderEntry type="library" name="Gradle: ./app/libs/topon/libs/Baidu_MobAds_SDK-release_v9.1.aar" level="project" />
+    <orderEntry type="library" name="Gradle: ./app/libs/topon/libs/GDTSDK.unionNormal.4.351.1221.aar" level="project" />
+    <orderEntry type="library" name="Gradle: ./app/libs/topon/libs/kssdk-ad--3.3.9-publishRelease-4ea04e00c.aar" level="project" />
+    <orderEntry type="library" name="Gradle: ./app/libs/topon/libs/open_ad_sdk_3.5.0.8.aar" level="project" />
+    <orderEntry type="library" name="Gradle: ./app/libs/topon/libs/tramini_sdk.aar" level="project" />
+    <orderEntry type="library" name="Gradle: ./app/libs/topon/libs/windAd-2.25.2.aar" level="project" />
+    <orderEntry type="library" name="Gradle: ./app/libs/oaid/oaid_sdk_1.0.25.aar" level="project" />
+    <orderEntry type="library" name="Gradle: ./app/libs/thinkingdata/ThinkingSDK.aar" level="project" />
+    <orderEntry type="library" name="Gradle: ./app/libs/umeng/umeng-abtest-v1.0.0.aar" level="project" />
+    <orderEntry type="library" name="Gradle: ./app/libs/umeng/umeng-asms-armeabi-v1.2.3.aar" level="project" />
+    <orderEntry type="library" name="Gradle: ./app/libs/aliRisk/Android-AliyunDevice-10017.aar" level="project" />
+    <orderEntry type="library" name="Gradle: com.tencent.mm.opensdk:wechat-sdk-android-without-mta:6.7.9@aar" level="project" />
+    <orderEntry type="library" name="Gradle: com.google.android.material:material:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.appcompat:appcompat:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.multidex:multidex:2.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.fragment:fragment:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.vectordrawable:vectordrawable-animated:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.recyclerview:recyclerview:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.legacy:legacy-support-core-ui:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.legacy:legacy-support-core-utils:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.vectordrawable:vectordrawable:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.transition:transition:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.loader:loader:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.viewpager:viewpager:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.coordinatorlayout:coordinatorlayout:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.drawerlayout:drawerlayout:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.slidingpanelayout:slidingpanelayout:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.customview:customview:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.swiperefreshlayout:swiperefreshlayout:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.asynclayoutinflater:asynclayoutinflater:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.core:core:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.versionedparcelable:versionedparcelable:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.cursoradapter:cursoradapter:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.cardview:cardview:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-runtime:2.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.documentfile:documentfile:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.localbroadcastmanager:localbroadcastmanager:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.print:print:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-viewmodel:2.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.interpolator:interpolator:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-livedata:2.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-livedata-core:2.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.arch.core:core-runtime:2.0.0@aar" level="project" />
+    <orderEntry type="module" module-name="proj.android-studio.libcocos2dx" />
+  </component>
+</module>

+ 0 - 12
build/jsb-link/frameworks/runtime-src/proj.android-studio/.idea/runConfigurations.xml

@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="RunConfigurationProducerService">
-    <option name="ignoredProducers">
-      <set>
-        <option value="org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer" />
-        <option value="org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer" />
-        <option value="org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer" />
-      </set>
-    </option>
-  </component>
-</project>

+ 2 - 0
build/jsb-link/frameworks/runtime-src/proj.android-studio/app/src/org/cocos2dx/javascript/thirdSdk/groMore/GroMoreMgr.java

@@ -0,0 +1,2 @@
+package org.cocos2dx.javascript.thirdSdk.groMore;public class GroMoreMgr {
+}

+ 199 - 0
build/jsb-link/frameworks/runtime-src/proj.android-studio/app/src/org/cocos2dx/javascript/thirdSdk/groMore/ad/activity/BannerAdActivity.java

@@ -0,0 +1,199 @@
+package org.cocos2dx.javascript.thirdSdk.groMore.ad;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.util.Log;
+import android.view.View;
+import android.view.WindowManager;
+import android.widget.Button;
+import android.widget.FrameLayout;
+
+import com.bytedance.ad.sdk.mediation.config.TTAdManagerHolder;
+import com.bytedance.ad.sdk.mediation.util.TToast;
+import com.bytedance.msdk.adapter.util.Logger;
+import com.bytedance.msdk.api.AdError;
+import com.bytedance.msdk.api.AdSlot;
+import com.bytedance.msdk.api.TTAdSize;
+import com.bytedance.msdk.api.TTMediationAdSdk;
+import com.bytedance.msdk.api.TTSettingConfigCallback;
+import com.bytedance.msdk.api.banner.TTAdBannerListener;
+import com.bytedance.msdk.api.banner.TTAdBannerLoadCallBack;
+import com.bytedance.msdk.api.banner.TTBannerViewAd;
+import com.header.app.untext.R;
+
+public class BannerActivity extends Activity {
+    private static final String TAG = AppConst.TAG_PRE + BannerActivity.class.getSimpleName();
+    private FrameLayout mBannerContainer;
+    private TTBannerViewAd mTTBannerViewAd;
+    private final static String mAdUnitId = "945493677";
+
+    @SuppressWarnings("RedundantCast")
+    @Override
+    protected void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
+                | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
+
+        setContentView(R.layout.activity_banner);
+        mBannerContainer = (FrameLayout) findViewById(R.id.banner_container);
+        Button mButtonDownload = (Button) findViewById(R.id.btn_banner_download);
+        mButtonDownload.setOnClickListener(mClickListener);
+        //(可选,建议在合适的时机调用):申请部分权限,如read_phone_state,防止获取不了imei时候,部分下载类广告没有填充的问题。
+//        TTPangleSDKInitManager.get().requestPermissionIfNecessary(this);
+
+        //如果接入了Unity sdk 建议提前初始化
+        TTAdManagerHolder.initUnitySdkBanner(this);
+    }
+
+
+    @SuppressWarnings("EmptyMethod")
+    @Override
+    protected void onResume() {
+        super.onResume();
+    }
+
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        //注销config回调
+        TTMediationAdSdk.unregisterConfigCallback(mSettingConfigCallback);
+        if (mTTBannerViewAd != null) {
+            mTTBannerViewAd.destroy();
+        }
+    }
+
+    private final View.OnClickListener mClickListener = new View.OnClickListener() {
+        @Override
+        public void onClick(View v) {
+            if (v.getId() == R.id.btn_banner_download) {
+                loadAdWithCallback();
+            }
+        }
+    };
+
+    /**
+     * config回调
+     */
+    private TTSettingConfigCallback mSettingConfigCallback = new TTSettingConfigCallback() {
+        @Override
+        public void configLoad() {
+            Log.e(TAG, "load ad 在config 回调中加载广告");
+            loadBannerAd();
+        }
+    };
+
+    private void loadAdWithCallback() {
+        /**
+         * 判断当前是否存在config 配置 ,如果存在直接加载广告 ,如果不存在则注册config加载回调
+         */
+        if (TTMediationAdSdk.configLoadSuccess()) {
+            Log.e(AppConst.TAG, "load ad 当前config配置存在,直接加载广告");
+            loadBannerAd();
+        } else {
+            Log.e(AppConst.TAG, "load ad 当前config配置不存在,正在请求config配置....");
+            TTMediationAdSdk.registerConfigCallback(mSettingConfigCallback); //不能使用内部类,否则在ondestory中无法移除该回调
+        }
+    }
+
+    private void loadBannerAd() {
+        /**
+         * 注:每次加载banner的时候需要新建一个TTBannerViewAd,否则可能会出现广告填充问题
+         * ( 例如:mTTBannerViewAd = new TTBannerViewAd(this, adUnitId);)
+         */
+        mTTBannerViewAd = new TTBannerViewAd(this, mAdUnitId);
+        mTTBannerViewAd.setRefreshTime(30);
+        mTTBannerViewAd.setAllowShowCloseBtn(true);//如果广告本身允许展示关闭按钮,这里设置为true就是展示。注:目前只有mintegral支持。
+        mTTBannerViewAd.setTTAdBannerListener(ttAdBannerListener);
+        //step4:创建广告请求参数AdSlot,具体参数含义参考文档
+        AdSlot adSlot = new AdSlot.Builder()
+                .setAdStyleType(AdSlot.TYPE_EXPRESS_AD) // banner暂时只支持模版类型,必须手动设置为AdSlot.TYPE_EXPRESS_AD
+//                .setBannerSize(TTAdSize.BANNER_300_250)
+                .setBannerSize(TTAdSize.BANNER_CUSTOME) // 使用TTAdSize.BANNER_CUSTOME可以调用setImageAdSize设置大小
+                .setImageAdSize(320, 150)
+                .build();
+        //step5:请求广告,对请求回调的广告作渲染处理
+        mTTBannerViewAd.loadAd(adSlot, new TTAdBannerLoadCallBack() {
+            @Override
+            public void onAdFailedToLoad(AdError adError) {
+                Log.e(TAG, "load banner ad error : " + adError.code + ", " + adError.message);
+                mBannerContainer.removeAllViews();
+                // 获取本次waterfall加载中,加载失败的adn错误信息。
+                if (mTTBannerViewAd != null)
+                    Log.d(TAG, "banner adLoadInfo:" + mTTBannerViewAd.getAdLoadInfoList().toString());
+            }
+
+            @Override
+            public void onAdLoaded() {
+                mBannerContainer.removeAllViews();
+
+                if (mTTBannerViewAd != null) {
+                    //横幅广告容器的尺寸必须至少与横幅广告一样大。如果您的容器留有内边距,实际上将会减小容器大小。如果容器无法容纳横幅广告,则横幅广告不会展示
+                    View view = mTTBannerViewAd.getBannerView();
+                    if (view != null)
+                        mBannerContainer.addView(view);
+                    Logger.e(AppConst.TAG, "adNetworkPlatformId: " + mTTBannerViewAd.getAdNetworkPlatformId() + "   adNetworkRitId:" + mTTBannerViewAd.getAdNetworkRitId() + "   preEcpm: " + mTTBannerViewAd.getPreEcpm());
+
+                }
+                Log.i(TAG, "banner load success ");
+                // 获取本次waterfall加载中,加载失败的adn错误信息。
+                if (mTTBannerViewAd != null)
+                    Log.d(TAG, "banner adLoadInfo:" + mTTBannerViewAd.getAdLoadInfoList().toString());
+            }
+        });
+
+    }
+
+    TTAdBannerListener ttAdBannerListener = new TTAdBannerListener() {
+
+        @Override
+        public void onAdOpened() {
+            TToast.show(BannerActivity.this, "banner onAdOpened ");
+            Log.d(TAG, "onAdOpened");
+
+        }
+
+        @Override
+        public void onAdLeftApplication() {
+            TToast.show(BannerActivity.this, "banner onAdLeftApplication ");
+            Log.d(TAG, "onAdLeftApplication");
+
+        }
+
+        @Override
+        public void onAdClosed() {
+            TToast.show(BannerActivity.this, "banner onAdClosed ");
+            Log.d(TAG, "onAdClosed");
+
+        }
+
+        @Override
+        public void onAdClicked() {
+            TToast.show(BannerActivity.this, "banner onAdClicked ");
+            Log.d(TAG, "onAdClicked");
+
+        }
+
+        @Override
+        public void onAdShow() {
+            TToast.show(BannerActivity.this, "banner onAdShow ");
+            Log.d(TAG, "onAdShow");
+
+        }
+
+        /**
+         * show失败回调。如果show时发现无可用广告(比如广告过期),会触发该回调。
+         * 开发者应该结合自己的广告加载、展示流程,在该回调里进行重新加载。
+         * @param adError showFail的具体原因
+         */
+        @Override
+        public void onAdShowFail(AdError adError) {
+            TToast.show(BannerActivity.this, "banner onAdShowFail ");
+            Log.d(TAG, "onAdShowFail");
+
+            // 开发者应该结合自己的广告加载、展示流程,在该回调里进行重新加载
+            loadBannerAd();
+        }
+    };
+
+}

+ 245 - 0
build/jsb-link/frameworks/runtime-src/proj.android-studio/app/src/org/cocos2dx/javascript/thirdSdk/groMore/ad/activity/FullVideoAdActivity.java

@@ -0,0 +1,245 @@
+package org.cocos2dx.javascript.thirdSdk.groMore.ad;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.util.Log;
+import android.view.View;
+import android.widget.Button;
+
+import com.bytedance.ad.sdk.mediation.util.TToast;
+import com.bytedance.msdk.adapter.util.Logger;
+import com.bytedance.msdk.api.AdError;
+import com.bytedance.msdk.api.AdSlot;
+import com.bytedance.msdk.api.TTAdConstant;
+import com.bytedance.msdk.api.TTMediationAdSdk;
+import com.bytedance.msdk.api.TTSettingConfigCallback;
+import com.bytedance.msdk.api.TTVideoOption;
+import com.bytedance.msdk.api.fullVideo.TTFullVideoAd;
+import com.bytedance.msdk.api.fullVideo.TTFullVideoAdListener;
+import com.bytedance.msdk.api.fullVideo.TTFullVideoAdLoadCallback;
+import com.header.app.untext.R;
+
+/**
+ * Created by wuzejian on 2020/3/11.
+ */
+public class FullVideoActivity extends Activity {
+    private static final String TAG = AppConst.TAG_PRE + "FullVideoActivity";
+    private Button mLoadAd;
+    private Button mLoadAdVertical;
+    private Button mShowAd;
+    private TTFullVideoAd mTTFullVideoAd;
+    private String mHorizontalAdUnitId;
+    private String mVerticalAdUnitId;
+    private boolean loadSuccess;
+    private boolean mIsExpress;
+    private boolean isVertical; //是否加载竖屏
+
+    @SuppressWarnings("RedundantCast")
+    @Override
+    protected void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_full_video);
+        mLoadAd = (Button) findViewById(R.id.btn_reward_load);
+        mLoadAdVertical = (Button) findViewById(R.id.btn_reward_load_vertical);
+        mShowAd = (Button) findViewById(R.id.btn_reward_show);
+        initAdUnitId();
+        initClickEvent();
+    }
+
+    private void initAdUnitId() {
+        Intent intent = getIntent();
+        if (intent == null) {
+            return;
+        }
+        mHorizontalAdUnitId = intent.getStringExtra("horizontal_adUnitId");
+        mVerticalAdUnitId = intent.getStringExtra("vertical_adUnitId");
+        mIsExpress = intent.getBooleanExtra("is_express", true);
+    }
+
+    private void initClickEvent() {
+        mLoadAd.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                isVertical = false;
+                loadAdWithCallback();
+            }
+        });
+        mLoadAdVertical.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                isVertical = true;
+                loadAdWithCallback();
+            }
+        });
+        mShowAd.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                if (loadSuccess && mTTFullVideoAd != null && mTTFullVideoAd.isReady()) {
+                    //step6:在获取到广告后展示,强烈建议在onRewardVideoCached回调后,展示广告,提升播放体验
+                    //该方法直接展示广告,如果展示失败了(如过期),会回调onVideoError()
+                    //展示广告,并传入广告展示的场景
+                    mTTFullVideoAd.showFullAd(FullVideoActivity.this, mTTFullVideoAdListener);
+                    Logger.e(AppConst.TAG, "adNetworkPlatformId: " + mTTFullVideoAd.getAdNetworkPlatformId() + "   adNetworkRitId:" + mTTFullVideoAd.getAdNetworkRitId() + "   preEcpm: " + mTTFullVideoAd.getPreEcpm());
+
+                } else {
+                    TToast.show(FullVideoActivity.this, "请先加载广告");
+                }
+            }
+        });
+    }
+
+    /**
+     * config回调
+     */
+    private TTSettingConfigCallback mSettingConfigCallback = new TTSettingConfigCallback() {
+        @Override
+        public void configLoad() {
+            Log.e(TAG, "load ad 在config 回调中加载广告");
+            loadAd();
+        }
+    };
+
+    private void loadAdWithCallback() {
+        /**
+         * 判断当前是否存在config 配置 ,如果存在直接加载广告 ,如果不存在则注册config加载回调
+         */
+        if (TTMediationAdSdk.configLoadSuccess()) {
+            Log.e(AppConst.TAG, "load ad 当前config配置存在,直接加载广告");
+            loadAd();
+        } else {
+            Log.e(AppConst.TAG, "load ad 当前config配置不存在,正在请求config配置....");
+            TTMediationAdSdk.registerConfigCallback(mSettingConfigCallback); //不能使用内部类,否则在ondestory中无法移除该回调
+        }
+    }
+
+    private void loadAd() {
+        String adUnitId;
+        int orientation;
+        if (isVertical) { //竖屏
+            adUnitId = mVerticalAdUnitId;
+            orientation = TTAdConstant.VERTICAL;
+        } else { //横屏
+            adUnitId = mHorizontalAdUnitId;
+            orientation = TTAdConstant.HORIZONTAL;
+        }
+
+        /**
+         * 注:每次加载全屏视频广告的时候需要新建一个TTFullVideoAd,否则可能会出现广告填充问题
+         * ( 例如:mTTFullVideoAd = new TTFullVideoAd(this, adUnitId);)
+         */
+        mTTFullVideoAd = new TTFullVideoAd(this, adUnitId);
+
+        //声音控制
+        TTVideoOption videoOption = VideoOptionUtil.getTTVideoOption();
+
+        //创建广告请求参数AdSlot,具体参数含义参考文档
+        AdSlot.Builder adSlotBuilder = new AdSlot.Builder()
+                .setTTVideoOption(videoOption)//设置声音控制
+                .setUserID("user123")//用户id,必传参数
+                .setMediaExtra("media_extra") //附加参数,可选
+                .setOrientation(orientation);//必填参数,期望视频的播放方向:TTAdConstant.HORIZONTAL 或 TTAdConstant.VERTICAL;
+
+        //请求广告
+        mTTFullVideoAd.loadFullAd(adSlotBuilder.build(), new TTFullVideoAdLoadCallback() {
+
+            @Override
+            public void onFullVideoLoadFail(AdError adError) {
+                loadSuccess = false;
+                Log.e(TAG, "onFullVideoLoadFail....全屏加载失败!");
+                TToast.show(FullVideoActivity.this, "请先加载广告失败:code=" + adError.code + ",msg=" + adError.message);
+                // 获取本次waterfall加载中,加载失败的adn错误信息。
+                if (mTTFullVideoAd != null)
+                    Log.e(TAG, "ad load infos: " + mTTFullVideoAd.getAdLoadInfoList());
+            }
+
+            @Override
+            public void onFullVideoAdLoad() {
+                loadSuccess = true;
+                Log.d(TAG, "onFullVideoAdLoad....加载成功!");
+                TToast.show(FullVideoActivity.this, "全屏加载成功!");
+                // 获取本次waterfall加载中,加载失败的adn错误信息。
+                if (mTTFullVideoAd != null)
+                    Log.d(TAG, "ad load infos: " + mTTFullVideoAd.getAdLoadInfoList());
+            }
+
+            @Override
+            public void onFullVideoCached() {
+                loadSuccess = true;
+                Log.d(TAG, "onFullVideoCached....缓存成功!");
+
+                TToast.show(FullVideoActivity.this, "全屏视频素材缓存成功!");
+            }
+        });
+    }
+
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        //注销config回调
+        TTMediationAdSdk.unregisterConfigCallback(mSettingConfigCallback);
+        if (mTTFullVideoAd != null) {
+            mTTFullVideoAd.destroy();
+        }
+    }
+
+    /**
+     * 激励视频交互回调
+     */
+    private TTFullVideoAdListener mTTFullVideoAdListener = new TTFullVideoAdListener() {
+
+        @Override
+        public void onFullVideoAdShow() {
+            TToast.show(FullVideoActivity.this, "全屏show");
+            Log.d(TAG, "onFullVideoAdShow");
+        }
+
+        /**
+         * show失败回调。如果show时发现无可用广告(比如广告过期或者isReady=false),会触发该回调。
+         * 开发者应该结合自己的广告加载、展示流程,在该回调里进行重新加载。
+         * @param adError showFail的具体原因
+         */
+        @Override
+        public void onFullVideoAdShowFail(AdError adError) {
+            TToast.show(FullVideoActivity.this, "全屏showFail");
+            Log.d(TAG, "onFullVideoAdShowFail");
+
+            // 开发者应该结合自己的广告加载、展示流程,在该回调里进行重新加载
+            loadAd();
+        }
+
+        @Override
+        public void onFullVideoAdClick() {
+            TToast.show(FullVideoActivity.this, "全屏click");
+            Log.d(TAG, "onFullVideoAdClick");
+        }
+
+        @Override
+        public void onFullVideoAdClosed() {
+            TToast.show(FullVideoActivity.this, "全屏close");
+            Log.d(TAG, "onFullVideoAdClosed");
+        }
+
+        @Override
+        public void onVideoComplete() {
+            TToast.show(FullVideoActivity.this, "全屏播放完成");
+            Log.d(TAG, "onVideoComplete");
+        }
+
+        /**
+         * 1、视频播放失败的回调 - Mintegral GDT Admob广告不存在该回调;
+         */
+        @Override
+        public void onVideoError() {
+            TToast.show(FullVideoActivity.this, "全屏播放出错");
+            Log.d(TAG, "onVideoError");
+        }
+
+        @Override
+        public void onSkippedVideo() {
+            TToast.show(FullVideoActivity.this, "全屏跳过");
+            Log.d(TAG, "onSkippedVideo");
+        }
+    };
+}

+ 203 - 0
build/jsb-link/frameworks/runtime-src/proj.android-studio/app/src/org/cocos2dx/javascript/thirdSdk/groMore/ad/activity/InterstitialAdActivity.java

@@ -0,0 +1,203 @@
+package org.cocos2dx.javascript.thirdSdk.groMore.ad;
+
+import android.app.Activity;
+import android.content.Context;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.View;
+import android.widget.Button;
+import android.widget.Toast;
+
+import com.bytedance.msdk.adapter.util.Logger;
+import com.bytedance.msdk.api.AdError;
+import com.bytedance.msdk.api.AdSlot;
+import com.bytedance.msdk.api.TTMediationAdSdk;
+import com.bytedance.msdk.api.TTSettingConfigCallback;
+import com.bytedance.msdk.api.TTVideoOption;
+import com.bytedance.msdk.api.interstitial.TTInterstitialAd;
+import com.bytedance.msdk.api.interstitial.TTInterstitialAdListener;
+import com.bytedance.msdk.api.interstitial.TTInterstitialAdLoadCallback;
+import com.header.app.untext.R;
+
+/**
+ * created by wuzejian on 2020-03-06
+ */
+public class InterstitialActivity extends Activity implements View.OnClickListener {
+    private static final String TAG = AppConst.TAG_PRE + "InteractionActivity";
+
+    private Button mLoadAdBtn;
+    private Button showAdBtn;
+    private boolean isLoadSuccess;
+    private Context mContext;
+    private TTInterstitialAd mInterstitialAd;
+    private static final String mAdUnitId = "945493679";
+
+    @SuppressWarnings("RedundantCast")
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_intersitial_ad);
+        mContext = this.getBaseContext();
+        mLoadAdBtn = (Button) findViewById(R.id.load_ad);
+        showAdBtn = (Button) findViewById(R.id.show_ad);
+        showAdBtn.setEnabled(false);
+        mLoadAdBtn.setOnClickListener(this);
+        showAdBtn.setOnClickListener(this);
+    }
+
+
+    @Override
+    public void onClick(View v) {
+        if (v.getId() == R.id.load_ad) {
+            /**
+             * 判断当前是否存在config 配置 ,如果存在直接加载广告 ,如果不存在则注册config加载回调
+             */
+            if (TTMediationAdSdk.configLoadSuccess()) {
+                Log.e(AppConst.TAG, "load ad 当前config配置存在,直接加载广告");
+                loadInteractionAd();
+            } else {
+                Log.e(AppConst.TAG, "load ad 当前config配置不存在,正在请求config配置....");
+                TTMediationAdSdk.registerConfigCallback(mSettingConfigCallback);
+            }
+        } else if (v.getId() == R.id.show_ad) {
+            if (mInterstitialAd != null)
+                Log.e("TTMediationSDK", "isLoadSuccess=" + isLoadSuccess + ",mInterstitialAd.isload=" + mInterstitialAd.isReady());
+            if (isLoadSuccess && mInterstitialAd != null && mInterstitialAd.isReady()) {
+                //设置监听器
+                mInterstitialAd.setTTAdInterstitialListener(interstitialListener);
+                mInterstitialAd.showAd(this);
+                Logger.e(AppConst.TAG, "adNetworkPlatformId: " + mInterstitialAd.getAdNetworkPlatformId() + "   adNetworkRitId:" + mInterstitialAd.getAdNetworkRitId() + "   preEcpm: " + mInterstitialAd.getPreEcpm());
+                showAdBtn.setEnabled(false);
+            }
+        }
+    }
+
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        //注销config回调
+        TTMediationAdSdk.unregisterConfigCallback(mSettingConfigCallback);
+        if (mInterstitialAd != null) {
+            mInterstitialAd.destroy();
+        }
+    }
+
+    private TTSettingConfigCallback mSettingConfigCallback = new TTSettingConfigCallback() {
+        @Override
+        public void configLoad() {
+            Log.e(TAG, "load ad 在config 回调中加载广告");
+            loadInteractionAd();
+        }
+    };
+
+    /**
+     * 加载插屏广告
+     */
+    private void loadInteractionAd() {
+        //Context 必须传activity
+        /**
+         * 注:每次加载插屏广告的时候需要新建一个TTInterstitialAd,否则可能会出现广告填充问题
+         * ( 例如:mInterstitialAd = new TTInterstitialAd(this, adUnitId);)
+         */
+        mInterstitialAd = new TTInterstitialAd(this, mAdUnitId);
+
+        TTVideoOption videoOption = VideoOptionUtil.getTTVideoOption();
+
+        //创建插屏广告请求参数AdSlot,具体参数含义参考文档
+        AdSlot adSlot = new AdSlot.Builder()
+                .setAdStyleType(AdSlot.TYPE_EXPRESS_AD) // 注意:插屏暂时支持模版类型,必须手动设置为AdSlot.TYPE_EXPRESS_AD
+                .setTTVideoOption(videoOption)
+                .setImageAdSize(600, 600) //根据广告平台选择的尺寸(目前该比例规格仅对穿山甲SDK生效,插屏广告支持的广告尺寸:  1:1, 3:2, 2:3)
+                .build();
+        //请求广告,调用插屏广告异步请求接口
+        mInterstitialAd.loadAd(adSlot, new TTInterstitialAdLoadCallback() {
+            @Override
+            public void onInterstitialLoadFail(AdError adError) {
+                isLoadSuccess = false;
+                Log.e(TAG, "load interaction ad error : " + adError.code + ", " + adError.message);
+                // 获取本次waterfall加载中,加载失败的adn错误信息。
+                if (mInterstitialAd != null)
+                    Log.d(TAG, "ad load infos: " + mInterstitialAd.getAdLoadInfoList());
+            }
+
+            @Override
+            public void onInterstitialLoad() {
+                showAdBtn.setEnabled(true);
+                isLoadSuccess = true;
+                Log.e(TAG, "load interaction ad success ! ");
+                // 获取本次waterfall加载中,加载失败的adn错误信息。
+                if (mInterstitialAd != null)
+                    Log.d(TAG, "ad load infos: " + mInterstitialAd.getAdLoadInfoList());
+            }
+        });
+    }
+
+    TTInterstitialAdListener interstitialListener = new TTInterstitialAdListener() {
+
+        /**
+         * 广告展示
+         */
+        @Override
+        public void onInterstitialShow() {
+            Toast.makeText(mContext, "插屏广告show", Toast.LENGTH_LONG).show();
+            Log.d(TAG, "onInterstitialShow");
+        }
+
+        /**
+         * show失败回调。如果show时发现无可用广告(比如广告过期或者isReady=false),会触发该回调。
+         * 开发者应该结合自己的广告加载、展示流程,在该回调里进行重新加载。
+         * @param adError showFail的具体原因
+         */
+        @Override
+        public void onInterstitialShowFail(AdError adError) {
+            Toast.makeText(mContext, "插屏广告展示失败", Toast.LENGTH_LONG).show();
+            Log.d(TAG, "onInterstitialShowFail");
+
+            // 开发者应该结合自己的广告加载、展示流程,在该回调里进行重新加载
+            loadInteractionAd();
+        }
+
+
+        /**
+         * 广告被点击
+         */
+        @Override
+        public void onInterstitialAdClick() {
+            Toast.makeText(mContext, "插屏广告click", Toast.LENGTH_LONG).show();
+            Log.d(TAG, "onInterstitialAdClick");
+        }
+
+        /**
+         * 关闭广告
+         */
+        @Override
+        public void onInterstitialClosed() {
+            Toast.makeText(mContext, "插屏广告close", Toast.LENGTH_LONG).show();
+            Log.d(TAG, "onInterstitialClosed");
+        }
+
+
+        /**
+         * 当广告打开浮层时调用,如打开内置浏览器、内容展示浮层,一般发生在点击之后
+         * 常常在onAdLeftApplication之前调用
+         */
+        @Override
+        public void onAdOpened() {
+            Toast.makeText(mContext, "插屏广告onAdOpened", Toast.LENGTH_LONG).show();
+            Log.d(TAG, "onAdOpened");
+        }
+
+
+        /**
+         * 此方法会在用户点击打开其他应用(例如 Google Play)时
+         * 于 onAdOpened() 之后调用,从而在后台运行当前应用。
+         */
+        @Override
+        public void onAdLeftApplication() {
+            Toast.makeText(mContext, "插屏广告onAdLeftApplication", Toast.LENGTH_LONG).show();
+            Log.d(TAG, "onAdLeftApplication");
+        }
+    };
+
+
+}

+ 2 - 0
build/jsb-link/frameworks/runtime-src/proj.android-studio/app/src/org/cocos2dx/javascript/thirdSdk/groMore/ad/activity/NativeAdActivity.java

@@ -0,0 +1,2 @@
+package org.cocos2dx.javascript.thirdSdk.groMore.ad.activity;public class NativeAdActivity {
+}

+ 297 - 0
build/jsb-link/frameworks/runtime-src/proj.android-studio/app/src/org/cocos2dx/javascript/thirdSdk/groMore/ad/activity/RewardVideoAdActivity.java

@@ -0,0 +1,297 @@
+package org.cocos2dx.javascript.thirdSdk.groMore.ad;
+
+import android.annotation.SuppressLint;
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.util.Log;
+import android.view.View;
+import android.widget.Button;
+
+import com.bytedance.ad.sdk.mediation.util.TToast;
+import com.bytedance.msdk.adapter.util.Logger;
+import com.bytedance.msdk.api.AdError;
+import com.bytedance.msdk.api.AdSlot;
+import com.bytedance.msdk.api.TTAdConstant;
+import com.bytedance.msdk.api.TTMediationAdSdk;
+import com.bytedance.msdk.api.TTSettingConfigCallback;
+import com.bytedance.msdk.api.TTVideoOption;
+import com.bytedance.msdk.api.reward.RewardItem;
+import com.bytedance.msdk.api.reward.TTRewardAd;
+import com.bytedance.msdk.api.reward.TTRewardedAdListener;
+import com.bytedance.msdk.api.reward.TTRewardedAdLoadCallback;
+import com.header.app.untext.R;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Created by wuzejian on 2020/3/11.
+ */
+public class RewardVideoActivity extends Activity {
+    private static final String TAG = AppConst.TAG_PRE + "RewardVideoActivity";
+    private Button mLoadAd;
+    private Button mLoadAdVertical;
+    private Button mShowAd;
+    private TTRewardAd mttRewardAd;
+    private String mHorizontalCodeId;
+    private String mVerticalCodeId;
+    private boolean loadSuccess;
+    private boolean isVertical; //是否加载竖屏
+
+    @SuppressLint("CutPasteId")
+    @SuppressWarnings("RedundantCast")
+    @Override
+    protected void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_reward_video);
+        mLoadAd = (Button) findViewById(R.id.btn_reward_load);
+        mLoadAdVertical = (Button) findViewById(R.id.btn_reward_load_vertical);
+        mShowAd = (Button) findViewById(R.id.btn_reward_show);
+        TTMediationAdSdk.requestPermissionIfNecessary(this);
+        initAdUnitId();
+        initClickEvent();
+    }
+
+    private void initAdUnitId() {
+        Intent intent = getIntent();
+        if (intent == null) {
+            return;
+        }
+        mHorizontalCodeId = intent.getStringExtra("horizontal_adUnitId");
+        mVerticalCodeId = intent.getStringExtra("vertical_adUnitId");
+    }
+
+    private void initClickEvent() {
+        mLoadAd.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                isVertical = false;
+                laodAdWithCallback(mHorizontalCodeId, TTAdConstant.HORIZONTAL);
+            }
+        });
+        mLoadAdVertical.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                isVertical = true;
+                laodAdWithCallback(mVerticalCodeId, TTAdConstant.VERTICAL);
+            }
+        });
+        mShowAd.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                if (loadSuccess && mttRewardAd != null && mttRewardAd.isReady()) {
+                    //在获取到广告后展示,强烈建议在onRewardVideoCached回调后,展示广告,提升播放体验
+                    //该方法直接展示广告,如果展示失败了(如过期),会回调onVideoError()
+                    //展示广告,并传入广告展示的场景
+
+                    mttRewardAd.showRewardAd(RewardVideoActivity.this, mTTRewardedAdListener);
+                    Logger.e(AppConst.TAG, "adNetworkPlatformId: " + mttRewardAd.getAdNetworkPlatformId() + "   adNetworkRitId:" + mttRewardAd.getAdNetworkRitId() + "   preEcpm: " + mttRewardAd.getPreEcpm());
+                } else {
+                    Log.d(TAG, "loadSuccess=" + loadSuccess + ",mttRewardAd=" + mttRewardAd + ", mttRewardAd.isReady():" + (mttRewardAd != null && mttRewardAd.isReady()));
+                    TToast.show(RewardVideoActivity.this, "请先加载广告");
+                }
+            }
+        });
+    }
+
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        TTMediationAdSdk.unregisterConfigCallback(mSettingConfigCallback);
+        if (mttRewardAd != null) {
+            mttRewardAd.destroy();
+        }
+    }
+
+    /**
+     * config回调
+     */
+    private TTSettingConfigCallback mSettingConfigCallback = new TTSettingConfigCallback() {
+        @Override
+        public void configLoad() {
+            Log.e(TAG, "load ad 在config 回调中加载广告");
+            if (isVertical) {
+                loadAd(mVerticalCodeId, TTAdConstant.VERTICAL);
+            } else {
+                loadAd(mHorizontalCodeId, TTAdConstant.HORIZONTAL);
+            }
+        }
+    };
+
+    private void laodAdWithCallback(final String adUnitId, final int orientation) {
+        /**
+         * 判断当前是否存在config 配置 ,如果存在直接加载广告 ,如果不存在则注册config加载回调
+         */
+        if (TTMediationAdSdk.configLoadSuccess()) {
+            Log.e(AppConst.TAG, "load ad 当前config配置存在,直接加载广告");
+            loadAd(adUnitId, orientation);
+        } else {
+            Log.e(AppConst.TAG, "load ad 当前config配置不存在,正在请求config配置....");
+            TTMediationAdSdk.registerConfigCallback(mSettingConfigCallback); //不用使用内部类,否则在ondestory中无法移除该回调
+        }
+    }
+
+
+    private void loadAd(final String adUnitId, int orientation) {
+        /**
+         * 注:每次加载激励视频广告的时候需要新建一个TTRewardAd,否则可能会出现广告填充问题
+         * ( 例如:mttRewardAd = new TTRewardAd(this, adUnitId);)
+         */
+        mttRewardAd = new TTRewardAd(this, adUnitId);
+
+        TTVideoOption videoOption = new TTVideoOption.Builder()
+                .setMuted(true)//对所有SDK的激励广告生效,除需要在平台配置的SDK,如穿山甲SDK
+                .setAdmobAppVolume(0f)//配合Admob的声音大小设置[0-1]
+                .build();
+
+        Map<String, String> customData = new HashMap<>();
+        customData.put(AdSlot.CUSTOM_DATA_KEY_PANGLE, "pangle media_extra");
+        customData.put(AdSlot.CUSTOM_DATA_KEY_GDT, "gdt custom data");
+        customData.put(AdSlot.CUSTOM_DATA_KEY_KS, "ks custom data");
+        // 其他需要透传给adn的数据。
+
+        //创建广告请求参数AdSlot,具体参数含义参考文档
+        AdSlot.Builder adSlotBuilder = new AdSlot.Builder()
+                .setTTVideoOption(videoOption)
+                .setRewardName("金币") //奖励的名称
+                .setRewardAmount(3)  //奖励的数量
+                .setUserID("user123")//用户id,必传参数
+                .setAdStyleType(AdSlot.TYPE_EXPRESS_AD) // 确保该聚合广告位下所有gdt代码位都是同一种类型(模版或非模版)。
+                .setCustomData(customData) // 激励视频开启服务端验证时,透传给adn的自定义数据。
+                .setOrientation(orientation);//必填参数,期望视频的播放方向:TTAdConstant.HORIZONTAL 或 TTAdConstant.VERTICAL
+
+        //请求广告
+        mttRewardAd.loadRewardAd(adSlotBuilder.build(), new TTRewardedAdLoadCallback() {
+
+            @Override
+            public void onRewardVideoLoadFail(AdError adError) {
+                loadSuccess = false;
+                Log.e(TAG, "load RewardVideo ad error : " + adError.code + ", " + adError.message);
+                // 获取本次waterfall加载中,加载失败的adn错误信息。
+                if (mttRewardAd != null)
+                    Log.d(TAG, "reward ad loadinfos: " + mttRewardAd.getAdLoadInfoList());
+            }
+
+            @Override
+            public void onRewardVideoAdLoad() {
+                loadSuccess = true;
+                Log.e(TAG, "load RewardVideo ad success !" + mttRewardAd.isReady());
+                // 获取本次waterfall加载中,加载失败的adn错误信息。
+                if (mttRewardAd != null)
+                    Log.d(TAG, "reward ad loadinfos: " + mttRewardAd.getAdLoadInfoList());
+            }
+
+            @Override
+            public void onRewardVideoCached() {
+                Log.d(TAG, "onRewardVideoCached....缓存成功" + mttRewardAd.isReady());
+                loadSuccess = true;
+                TToast.show(RewardVideoActivity.this, "激励视频素材缓存成功!");
+            }
+        });
+    }
+
+
+    /**
+     * 激励视频交互回调
+     */
+    private TTRewardedAdListener mTTRewardedAdListener = new TTRewardedAdListener() {
+
+        /**
+         * 广告的展示回调 每个广告仅回调一次
+         */
+        public void onRewardedAdShow() {
+            TToast.show(RewardVideoActivity.this, "激励onRewardedAdShow!");
+            Log.d(TAG, "onRewardedAdShow");
+
+        }
+
+        /**
+         * show失败回调。如果show时发现无可用广告(比如广告过期或者isReady=false),会触发该回调。
+         * 开发者应该结合自己的广告加载、展示流程,在该回调里进行重新加载。
+         * @param adError showFail的具体原因
+         */
+        @Override
+        public void onRewardedAdShowFail(AdError adError) {
+            int errCode = 0;
+            String errMsg = "";
+            if (adError != null) {
+                errCode = adError.thirdSdkErrorCode;
+                errMsg = adError.thirdSdkErrorMessage;
+            }
+            TToast.show(RewardVideoActivity.this, "激励onRewardedAdShowFail! errCode: " + errCode + ", errMsg: " + errMsg);
+            Log.d(TAG, "onRewardedAdShowFail, errCode: " + errCode + ", errMsg: " + errMsg);
+
+            // 开发者应该结合自己的广告加载、展示流程,在该回调里进行重新加载
+            if (isVertical) {
+                loadAd(mVerticalCodeId, TTAdConstant.VERTICAL);
+            } else {
+                loadAd(mHorizontalCodeId, TTAdConstant.HORIZONTAL);
+            }
+        }
+
+        /**
+         * 注意Admob的激励视频不会回调该方法
+         */
+        @Override
+        public void onRewardClick() {
+            Log.d(TAG, "onRewardClick");
+            TToast.show(RewardVideoActivity.this, "激励onRewardClick!");
+
+        }
+
+        /**
+         * 广告关闭的回调
+         */
+        public void onRewardedAdClosed() {
+            Log.d(TAG, "onRewardedAdClosed");
+            TToast.show(RewardVideoActivity.this, "激励onRewardedAdClosed!");
+
+        }
+
+        /**
+         * 视频播放完毕的回调 Admob广告不存在该回调
+         */
+        public void onVideoComplete() {
+            Log.d(TAG, "onVideoComplete");
+            TToast.show(RewardVideoActivity.this, "激励onVideoComplete!");
+
+        }
+
+        /**
+         * 1、视频播放失败的回调
+         */
+        public void onVideoError() {
+            Log.d(TAG, "onVideoError");
+            TToast.show(RewardVideoActivity.this, "激励onVideoError!");
+
+        }
+
+        /**
+         * 激励视频播放完毕,验证是否有效发放奖励的回调
+         */
+        public void onRewardVerify(RewardItem rewardItem) {
+            Map<String, Object> customData = rewardItem.getCustomData();
+            if (customData != null) {
+                String adnName = (String) customData.get(RewardItem.KEY_ADN_NAME);
+                switch (adnName) {
+                    case RewardItem.KEY_GDT:
+                        Logger.d(TAG, "rewardItem gdt: " + customData.get(RewardItem.KEY_GDT_TRANS_ID));
+                        break;
+                }
+            }
+            Log.d(TAG, "onRewardVerify");
+            TToast.show(RewardVideoActivity.this, "onRewardVerify!");
+        }
+
+        /**
+         * - Mintegral GDT Admob广告不存在该回调
+         */
+        @Override
+        public void onSkippedVideo() {
+
+        }
+
+    };
+}

+ 228 - 0
build/jsb-link/frameworks/runtime-src/proj.android-studio/app/src/org/cocos2dx/javascript/thirdSdk/groMore/ad/activity/SplashAdActivity.java

@@ -0,0 +1,228 @@
+package org.cocos2dx.javascript.thirdSdk.groMore.ad;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.util.Log;
+import android.widget.FrameLayout;
+
+import com.bytedance.ad.sdk.mediation.util.TToast;
+import com.bytedance.msdk.adapter.pangle.PangleNetworkRequestInfo;
+import com.bytedance.msdk.adapter.util.Logger;
+import com.bytedance.msdk.api.AdError;
+import com.bytedance.msdk.api.AdSlot;
+import com.bytedance.msdk.api.NetworkPlatformConst;
+import com.bytedance.msdk.api.TTAdConstant;
+import com.bytedance.msdk.api.TTNetworkRequestInfo;
+import com.bytedance.msdk.api.splash.TTSplashAd;
+import com.bytedance.msdk.api.splash.TTSplashAdListener;
+import com.bytedance.msdk.api.splash.TTSplashAdLoadCallback;
+import com.header.app.untext.R;
+
+import static com.bytedance.ad.sdk.mediation.SplashMainActivity.SPLASH_KEY;
+
+/**
+ * 开屏广告Activity示例
+ */
+public class SplashActivity extends Activity {
+    private static final String TAG = AppConst.TAG_PRE + "SplashActivity";
+    private TTSplashAd mTTSplashAd;
+    private FrameLayout mSplashContainer;
+    //是否强制跳转到主页面
+    private boolean mForceGoMain;
+    private String mAdUnitId = null;
+
+    //开屏广告加载超时时间,建议大于1000,这里为了冷启动第一次加载到广告并且展示,示例设置了2000ms
+    private static final int AD_TIME_OUT = 4000;
+    private static final int MSG_GO_MAIN = 1;
+    //开屏广告是否已经加载
+    private boolean mHasLoaded;
+
+    // 百度开屏广告点击跳转落地页后倒计时不暂停,即使在看落地页,倒计时结束后仍然会强制跳转,需要特殊处理:
+    // 检测到广告被点击,且走了activity的onPaused证明跳转到了落地页,这时候onAdDismiss回调中不进行跳转,而是在activity的onResume中跳转。
+    private boolean isBaiduSplashAd = false;
+    private boolean baiduSplashAdClicked = false;
+    private boolean onPaused = false;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_splash);
+        mSplashContainer = findViewById(R.id.splash_container);
+        Intent intent = getIntent();
+        if (intent == null) {
+            return;
+        }
+        mAdUnitId = getIntent().getStringExtra(SPLASH_KEY);
+        //加载开屏广告
+        loadSplashAd();
+    }
+
+    /**
+     * 加载开屏广告
+     */
+    private void loadSplashAd() {
+        if (mAdUnitId == null) return;
+        /**
+         * 注:每次加载开屏广告的时候需要新建一个TTSplashAd,否则可能会出现广告填充问题
+         * ( 例如:mTTSplashAd = new TTSplashAd(this, mAdUnitId);)
+         */
+        mTTSplashAd = new TTSplashAd(this, mAdUnitId);
+        mTTSplashAd.setTTAdSplashListener(mSplashAdListener);
+
+        //step3:创建开屏广告请求参数AdSlot,具体参数含义参考文档
+        AdSlot adSlot = new AdSlot.Builder()
+                .setImageAdSize(1080, 1920) // 既适用于原生类型,也适用于模版类型。
+                .setSplashButtonType(TTAdConstant.SPLASH_BUTTON_TYPE_FULL_SCREEN)
+                .setDownloadType(TTAdConstant.DOWNLOAD_TYPE_POPUP)
+                .build();
+
+        //自定义兜底方案 选择使用
+        TTNetworkRequestInfo ttNetworkRequestInfo;
+        //穿山甲兜底,参数分别是appId和adn代码位。注意第二个参数是代码位,而不是广告位。
+        ttNetworkRequestInfo = new PangleNetworkRequestInfo("5001121", "887382976");
+        //gdt兜底
+//        ttNetworkRequestInfo = new GdtNetworkRequestInfo("1101152570", "8863364436303842593");
+        //ks兜底
+//        ttNetworkRequestInfo = new KsNetworkRequestInfo("90009", "4000000042");
+        //百度兜底
+//        ttNetworkRequestInfo = new BaiduNetworkRequestInfo("e866cfb0", "2058622");
+
+
+        //step4:请求广告,调用开屏广告异步请求接口,对请求回调的广告作渲染处理
+        mTTSplashAd.loadAd(adSlot, ttNetworkRequestInfo, new TTSplashAdLoadCallback() {
+            @Override
+            public void onSplashAdLoadFail(AdError adError) {
+                Log.d(TAG, adError.message);
+                mHasLoaded = true;
+                Log.e(TAG, "load splash ad error : " + adError.code + ", " + adError.message);
+                // 获取本次waterfall加载中,加载失败的adn错误信息。
+                if (mTTSplashAd != null)
+                    Log.d(TAG, "ad load infos: " + mTTSplashAd.getAdLoadInfoList());
+                goToMainActivity();
+            }
+
+            @Override
+            public void onSplashAdLoadSuccess() {
+                if (mTTSplashAd != null) {
+                    mTTSplashAd.showAd(mSplashContainer);
+                    isBaiduSplashAd = mTTSplashAd.getAdNetworkPlatformId() == NetworkPlatformConst.SDK_NAME_BAIDU;
+                    Logger.e(AppConst.TAG, "adNetworkPlatformId: " + mTTSplashAd.getAdNetworkPlatformId() + "   adNetworkRitId:" + mTTSplashAd.getAdNetworkRitId() + "   preEcpm: " + mTTSplashAd.getPreEcpm());
+                    // 获取本次waterfall加载中,加载失败的adn错误信息。
+                    if (mTTSplashAd != null)
+                        Log.d(TAG, "ad load infos: " + mTTSplashAd.getAdLoadInfoList());
+                }
+                Log.e(TAG, "load splash ad success ");
+            }
+
+            @Override
+            public void onAdLoadTimeout() {
+                mHasLoaded = true;
+                showToast("开屏广告加载超时");
+                Log.i(TAG, "开屏广告加载超时.......");
+                // 获取本次waterfall加载中,加载失败的adn错误信息。
+                if (mTTSplashAd != null)
+                    Log.d(TAG, "ad load infos: " + mTTSplashAd.getAdLoadInfoList());
+                goToMainActivity();
+            }
+        }, AD_TIME_OUT);
+
+    }
+
+    TTSplashAdListener mSplashAdListener = new TTSplashAdListener() {
+        @Override
+        public void onAdClicked() {
+            baiduSplashAdClicked = true;
+            showToast("开屏广告被点击");
+            Log.d(TAG, "onAdClicked");
+        }
+
+        @Override
+        public void onAdShow() {
+            showToast("开屏广告展示");
+            Log.d(TAG, "onAdShow");
+        }
+
+        /**
+         * show失败回调。如果show时发现无可用广告(比如广告过期),会触发该回调。
+         * 开发者应该结合自己的广告加载、展示流程,在该回调里进行重新加载。
+         * @param adError showFail的具体原因
+         */
+        @Override
+        public void onAdShowFail(AdError adError) {
+            showToast("开屏广告展示失败");
+            Log.d(TAG, "onAdShowFail");
+
+            // 开发者应该结合自己的广告加载、展示流程,在该回调里进行重新加载
+            loadSplashAd();
+        }
+
+        @Override
+        public void onAdSkip() {
+            showToast("开屏广告点击跳过按钮");
+            Log.d(TAG, "onAdSkip");
+
+            goToMainActivity();
+        }
+
+        @Override
+        public void onAdDismiss() {
+            showToast("开屏广告倒计时结束关闭");
+            Log.d(TAG, "onAdDismiss");
+            if (isBaiduSplashAd && onPaused && baiduSplashAdClicked) {
+                // 这种情况下,百度开屏广告不能在onAdDismiss中跳转,需要在onResume中跳转主页。
+                return;
+            }
+            goToMainActivity();
+        }
+    };
+
+    @Override
+    protected void onResume() {
+        //判断是否该跳转到主页面
+        if (mForceGoMain) {
+            goToMainActivity();
+        }
+        if (isBaiduSplashAd && onPaused && baiduSplashAdClicked) {
+            // 这种情况下,百度开屏广告不能在onAdDismiss中跳转,需要自己在onResume中跳转主页。
+            goToMainActivity();
+        }
+        super.onResume();
+    }
+
+    @Override
+    protected void onPause() {
+        super.onPause();
+        onPaused = true;
+    }
+
+    @Override
+    protected void onStop() {
+        super.onStop();
+        mForceGoMain = true;
+    }
+
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        if (mTTSplashAd != null) {
+            mTTSplashAd.destroy();
+        }
+    }
+
+    /**
+     * 跳转到主页面
+     */
+    private void goToMainActivity() {
+        Intent intent = new Intent(SplashActivity.this, SplashMainActivity.class);
+        startActivity(intent);
+        mSplashContainer.removeAllViews();
+        this.finish();
+    }
+
+    private void showToast(String msg) {
+        TToast.show(this, msg);
+    }
+
+
+}