Commit fe91e30cd4f12ba0f3d99a6906a89ce2c4f12302

Authored by 费小川
0 parents
Exists in master

初始化项目

.gitignore 0 → 100644
  1 +++ a/.gitignore
... ... @@ -0,0 +1,14 @@
  1 +*.iml
  2 +.gradle
  3 +/local.properties
  4 +/.idea/*
  5 +/.idea/libraries
  6 +/.idea/modules.xml
  7 +/.idea/workspace.xml
  8 +/.idea/navEditor.xml
  9 +/.idea/assetWizardSettings.xml
  10 +.DS_Store
  11 +/build
  12 +/captures
  13 +.externalNativeBuild
  14 +.cxx
... ...
README.md 0 → 100644
  1 +++ a/README.md
... ... @@ -0,0 +1,5 @@
  1 +1.工程中build.gradle 中 http://47.94.86.25:8081/repository/maven-group/和http://47.94.86.25:8081/repository/maven-beta/ 的用户名和密码
  2 +2.修改applicationId,以及添加对用包名的google-services.json文件
  3 +3. 修改清单文件(AndroidManifest.xml) 中的AppsFlyerLib_key,flurry_key,com.facebook.sdk.ApplicationId,com.google.android.gms.ads.APPLICATION_ID 的值
  4 +4.thinkingDataKey,
  5 +
... ...
app/.gitignore 0 → 100644
  1 +++ a/app/.gitignore
... ... @@ -0,0 +1 @@
  1 +/build
... ...
app/build.gradle 0 → 100644
  1 +++ a/app/build.gradle
... ... @@ -0,0 +1,41 @@
  1 +apply plugin: 'com.android.application'
  2 +
  3 +android {
  4 + compileSdkVersion 29
  5 + buildToolsVersion "29.0.2"
  6 +
  7 + defaultConfig {
  8 + applicationId "test.test.test"
  9 + minSdkVersion 21
  10 + targetSdkVersion 29
  11 + versionCode 100
  12 + versionName "1.0"
  13 +
  14 + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
  15 + ndk {
  16 + abiFilters 'armeabi-v7a', 'arm64-v8a'
  17 + }
  18 + }
  19 + compileOptions {
  20 + sourceCompatibility JavaVersion.VERSION_1_8
  21 + targetCompatibility JavaVersion.VERSION_1_8
  22 + }
  23 +
  24 + buildTypes {
  25 + release {
  26 + minifyEnabled true
  27 + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
  28 + }
  29 + }
  30 +
  31 +}
  32 +
  33 +apply plugin: 'com.google.gms.google-services'
  34 +
  35 +dependencies {
  36 + implementation fileTree(dir: 'libs', include: ['*.jar'])
  37 + api 'com.plugins.sdk:Analytics:5.4.8'
  38 + api 'com.plugins.sdk:aD_v4:5.4.8'
  39 + api 'com.plugins.sdk:payment:5.4.8'
  40 + implementation 'androidx.appcompat:appcompat:1.2.0'
  41 +}
... ...
app/google-services.json 0 → 100644
  1 +++ a/app/google-services.json
... ... @@ -0,0 +1,39 @@
  1 +{
  2 + "project_info": {
  3 + "project_number": "84374916356",
  4 + "project_id": "bubblington-shooting-design",
  5 + "storage_bucket": "bubblington-shooting-design.appspot.com"
  6 + },
  7 + "client": [
  8 + {
  9 + "client_info": {
  10 + "mobilesdk_app_id": "1:84374916356:android:0b3827b19705eb39435451",
  11 + "android_client_info": {
  12 + "package_name": "com.quzizi.fbbubble"
  13 + }
  14 + },
  15 + "oauth_client": [
  16 + {
  17 + "client_id": "84374916356-vs6omjuhrppk0lr1ldmhemc1vppjijtg.apps.googleusercontent.com",
  18 + "client_type": 3
  19 + }
  20 + ],
  21 + "api_key": [
  22 + {
  23 + "current_key": "AIzaSyAgWCd2xo0Tfb3_JbGFjOjGyloZWN0t2Vg"
  24 + }
  25 + ],
  26 + "services": {
  27 + "appinvite_service": {
  28 + "other_platform_oauth_client": [
  29 + {
  30 + "client_id": "84374916356-vs6omjuhrppk0lr1ldmhemc1vppjijtg.apps.googleusercontent.com",
  31 + "client_type": 3
  32 + }
  33 + ]
  34 + }
  35 + }
  36 + }
  37 + ],
  38 + "configuration_version": "1"
  39 +}
0 40 \ No newline at end of file
... ...
app/proguard-rules.pro 0 → 100644
  1 +++ a/app/proguard-rules.pro
... ... @@ -0,0 +1,405 @@
  1 +# Add project specific ProGuard rules here.
  2 +# You can control the set of applied configuration files using the
  3 +# proguardFiles setting in build.gradle.
  4 +#
  5 +# For more details, see
  6 +# http://developer.android.com/guide/developing/tools/proguard.html
  7 +
  8 +# If your project uses WebView with JS, uncomment the following
  9 +# and specify the fully qualified class name to the JavaScript interface
  10 +# class:
  11 +#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
  12 +# public *;
  13 +#}
  14 +
  15 +# Uncomment this to preserve the line number information for
  16 +# debugging stack traces.
  17 +#-keepattributes SourceFile,LineNumberTable
  18 +
  19 +# If you keep the line number information, uncomment this to
  20 +# hide the original source file name.
  21 +#-renamesourcefileattribute SourceFile
  22 +-verbose
  23 +#指定压缩级别
  24 +-optimizationpasses 5
  25 +#混淆时应用侵入式重载
  26 +-overloadaggressively
  27 +#使用字符串"SourceFile"来替代真正的类
  28 +-renamesourcefileattribute SourceFile
  29 +#抛出异常时保留代码行号
  30 +-keepattributes SourceFile,LineNumberTable
  31 +# 混淆时所采用的算法
  32 +-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
  33 +#包名不混合大小写
  34 +-dontusemixedcaseclassnames
  35 +#把混淆类中的方法名也混淆了
  36 +-useuniqueclassmembernames
  37 +#优化时允许访问并修改有修饰符的类和类的成员
  38 +-allowaccessmodification
  39 +#将混淆过得类移到根目录下
  40 +-repackageclasses
  41 +
  42 +-keepclasseswithmembernames class * {
  43 + native <methods>;
  44 +}
  45 +
  46 +#保留资源文件
  47 +-keepclassmembers class **.R$* {
  48 + public static <fields>;
  49 +}
  50 +
  51 +# The support library contains references to newer platform versions.
  52 +# Don't warn about those in case this app is linking against an older
  53 +# platform version. We know about them, and they are safe.
  54 +-dontwarn android.support.**
  55 +
  56 +-keep public class com.google.android.gms.* { public *; }
  57 +-dontwarn com.google.android.gms.**
  58 +-keep class * extends java.util.ListResourceBundle {
  59 + protected Object[][] getContents();
  60 +}
  61 +
  62 +-keep public class com.google.android.gms.common.internal.safeparcel.SafeParcelable {
  63 + public static final *** NULL;
  64 +}
  65 +
  66 +-keepnames @com.google.android.gms.common.annotation.KeepName class *
  67 +-keepclassmembernames class * {
  68 + @com.google.android.gms.common.annotation.KeepName *;
  69 +}
  70 +
  71 +-keepnames class * implements android.os.Parcelable {
  72 + public static final ** CREATOR;
  73 +}
  74 +
  75 +# 保留bolts下的所有类及其内部类
  76 +-keep class bolts.** {*;}
  77 +-dontwarn bolts.**
  78 +
  79 +# 保留fastjson下的所有类及其内部类
  80 +-keep class com.alibaba.fastjson.** {*;}
  81 +-dontwarn com.alibaba.fastjson.**
  82 +
  83 +# 保留com.android.vending.billing下的所有类及其内部类
  84 +-keep class com.android.vending.billing.** {*;}
  85 +-dontwarn com.android.vending.billing.**
  86 +
  87 +# 保留applovin下的所有类及其内部类
  88 +-keep class com.applovin.** {*;}
  89 +-dontwarn com.applovin.**
  90 +
  91 +# 保留appsflyer下的所有类及其内部类
  92 +-keep class com.appsflyer.** {*;}
  93 +-dontwarn com.appsflyer.**
  94 +
  95 +# 保留avos下的所有类及其内部类
  96 +-keep class com.avos.** {*;}
  97 +-dontwarn com.avos.**
  98 +
  99 +# 保留avoscloud下的所有类及其内部类
  100 +-keep class com.avoscloud.** {*;}
  101 +-dontwarn com.avoscloud.**
  102 +
  103 +# 保留avoscloud_gcm下的所有类及其内部类
  104 +-keep class com.avoscloud_gcm.** {*;}
  105 +-dontwarn com.avoscloud_gcm.**
  106 +
  107 +-keep class com.mopub.** {*;}
  108 +-dontwarn com.mopub.**
  109 +
  110 +
  111 +-keep class org.xmlpull.** {*;}
  112 +-dontwarn org.xmlpull.**
  113 +
  114 +
  115 +# 保留facebook下的所有类及其内部类
  116 +-keep class com.facebook.** {*;}
  117 +-dontwarn com.facebook.**
  118 +
  119 +# 保留flurry下的所有类及其内部类
  120 +-keep class com.flurry.** {*;}
  121 +-dontwarn com.flurry.**
  122 +
  123 +# 保留google下的所有类及其内部类
  124 +-keep class com.google.** {*;}
  125 +-dontwarn com.google.**
  126 +
  127 +# 保留picasso下的所有类及其内部类
  128 +-keep class com.squareup.picasso.** {*;}
  129 +-dontwarn com.squareup.picasso.**
  130 +
  131 +# 保留bugly下的所有类及其内部类
  132 +-keep class com.tencent.bugly.** {*;}
  133 +-dontwarn com.tencent.bugly.**
  134 +
  135 +# 保留unity3d下的所有类及其内部类
  136 +-keep class com.unity3d.ads.** {*;}
  137 +-dontwarn com.unity3d.ads.**
  138 +
  139 +# 保留httpclient下的所有类及其内部类
  140 +-keep class cz.msebera.** {*;}
  141 +-dontwarn cz.msebera.**
  142 +
  143 +# 保留async http下的所有类及其内部类
  144 +-keep class com.loopj.android.http.** {*;}
  145 +-dontwarn com.loopj.android.http.**
  146 +
  147 +-keep class android.net.**{*;}
  148 +-dontwarn android.net.**
  149 +
  150 +-keep class android.util.**{*;}
  151 +-dontwarn android.util.**
  152 +
  153 +-keep class org.apache.http.** {*;}
  154 +-dontwarn org.apache.http.**
  155 +
  156 +-keep class okhttp3.** {*;}
  157 +-dontwarn okhttp3.**
  158 +
  159 +-keep class okio.** {*;}
  160 +-dontwarn okio.**
  161 +
  162 +-keep class org.cocos2dx.** {*;}
  163 +-dontwarn org.cocos2dx.**
  164 +
  165 +-keep class com.millennialmedia.** {*;}
  166 +-dontwarn com.millennialmedia.**
  167 +
  168 +-keep class com.liulishuo.filedownloader.** {*;}
  169 +-dontwarn com.liulishuo.filedownloader.**
  170 +
  171 +-keep class com.github.siyamed.** {*;}
  172 +-dontwarn com.github.siyamed.**
  173 +
  174 +-keep class com.custom.** {*;}
  175 +-dontwarn com.custom.**
  176 +
  177 +-keep class com.vungle.publisher.** {*;}
  178 +-dontwarn com.vungle.publisher.**
  179 +
  180 +-keep class dagger.** {*;}
  181 +-dontwarn dagger.**
  182 +
  183 +-keep class de.greenrobot.event.** {*;}
  184 +-dontwarn de.greenrobot.event.**
  185 +
  186 +-keep class javax.inject.** {*;}
  187 +-dontwarn javax.inject.**
  188 +
  189 +-keep class rx.** {*;}
  190 +-dontwarn rx.**
  191 +
  192 +-keep class rx.adjust.** {*;}
  193 +-dontwarn rx.adjust.**
  194 +
  195 +-keep class dalvik.system.** {*;}
  196 +-dontwarn dalvik.system.**
  197 +
  198 +-keep class android.os.** {*;}
  199 +-dontwarn android.os.**
  200 +
  201 +-keep class android.content.** {*;}
  202 +-dontwarn android.content.**
  203 +
  204 +-keep class com.google.android.** {*;}
  205 +-dontwarn com.google.android.**
  206 +
  207 +-keep class com.inmobi.** { *; }
  208 +-dontwarn com.inmobi.**
  209 +
  210 +# Vungle
  211 +-keep class com.vungle.** { *; }
  212 +-dontwarn com.vungle.**
  213 +
  214 +# Moat SDK
  215 +-keep class com.moat.** { *; }
  216 +-dontwarn com.moat.**
  217 +
  218 +-keep class android.** { *; }
  219 +-dontwarn android.**
  220 +
  221 +-keep class com.android.** {*;}
  222 +-dontwarn com.android.**
  223 +
  224 +# Okio
  225 +-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
  226 +
  227 +# Retrofit
  228 +-dontwarn okio.**
  229 +-dontwarn retrofit2.Platform$Java8
  230 +
  231 +# Gson
  232 +-keepattributes Signature
  233 +-keepattributes *Annotation*
  234 +-dontwarn sun.misc.**
  235 +-keep class com.google.gson.examples.android.model.** { *; }
  236 +-keep class * implements com.google.gson.TypeAdapterFactory
  237 +-keep class * implements com.google.gson.JsonSerializer
  238 +-keep class * implements com.google.gson.JsonDeserializer
  239 +
  240 +#ironsource
  241 +-keep class com.ironsource.** { *;}
  242 +-dontwarn com.ironsource.**
  243 +
  244 +
  245 +#inmobi
  246 +-keep class com.inmobi.** { *; }
  247 +-dontwarn com.inmobi.**
  248 +-keep class com.integralads.** { *; }
  249 +-dontwarn com.integralads.**
  250 +-keep class com.moat.** { *; }
  251 +-dontwarn com.moat.**
  252 +
  253 +
  254 + #mobvista
  255 +-keepattributes Signature
  256 +-keepattributes *Annotation*
  257 +-keep class com.mintegral.** {*; }
  258 +-keep interface com.mintegral.** {*; }
  259 +-keep class android.support.v4.** { *; }
  260 +-dontwarn com.mintegral.**
  261 +-keep class **.R$* { public static final int mintegral*; }
  262 +-keep class com.alphab.** {*; }
  263 +-keep interface com.alphab.** {*; }
  264 +
  265 +
  266 +#Adcolony
  267 +-keep class com.adcolony.** {*; }
  268 +-dontwarn com.adcolony.**
  269 +-keepclassmembers class * {
  270 + @android.webkit.JavascriptInterface <methods>;
  271 +}
  272 +
  273 +#Tapjoy
  274 +-keep class com.tapjoy.** { *; }
  275 +-keepattributes JavascriptInterface
  276 +-keepattributes *Annotation*
  277 +-keep class * extends java.util.ListResourceBundle {
  278 +protected Object[][] getContents();
  279 +}
  280 +-keep public class com.google.android.gms.common.internal.safeparcel.SafeParcelable {
  281 +public static final *** NULL;
  282 +}
  283 +-keepnames @com.google.android.gms.common.annotation.KeepName class *
  284 +-keepclassmembernames class * {
  285 +@com.google.android.gms.common.annotation.KeepName *;
  286 +}
  287 +-keepnames class * implements android.os.Parcelable {
  288 +public static final ** CREATOR;
  289 +}
  290 +-keep class com.google.android.gms.ads.identifier.** { *; }
  291 +-dontwarn com.tapjoy.**
  292 +
  293 +# 更新 unity3d下的所有类及其内部类
  294 +-keep class com.unity3d.** {*;}
  295 +-dontwarn com.unity3d.**
  296 +
  297 +#Fyber
  298 +-keep class com.heyzap.** {*;}
  299 +-keep class com.fyber.** {*;}
  300 +-dontwarn com.heyzap.**
  301 +-dontwarn com.fyber.**
  302 +-keep class androidx.** {*;}
  303 +-dontwarn androidx.**
  304 +-keep class com.plugins.lib.base.SharedPreferencesUtils {*;}
  305 +-keep class com.plugin.analytics.AnalyticsControl {*;}
  306 +
  307 +# 保留chartboost 新添加
  308 +-keep class com.chartboost.** {*;}
  309 +-dontwarn com.chartboost.**
  310 +-keep class com.chartboost_helium.** {*;}
  311 +-dontwarn com.chartboost_helium.**
  312 +-keep class com.moat.** {*;}
  313 +-dontwarn com.moat.**
  314 +-keepattributes *Annotation*
  315 +-keepclassmembers class ** {
  316 + @org.greenrobot.eventbus.Subscribe <methods>;
  317 +}
  318 +-keep class org.greenrobot.** {*;}
  319 +-dontwarn org.greenrobot.**
  320 +-keep enum org.greenrobot.eventbus.ThreadMode { *; }
  321 +
  322 +#vungle更新===========
  323 +# Vungle
  324 +-keep class com.vungle.** { *; }
  325 +-dontwarn com.vungle.**
  326 +-keep class com.vungle.warren.downloader.DownloadRequest
  327 +-dontwarn com.vungle.warren.error.VungleError$ErrorCode
  328 +-dontwarn com.vungle.warren.downloader.DownloadRequest$Status
  329 +-keepclassmembers enum com.vungle.warren.** { *; }
  330 +
  331 +
  332 +# Moat SDK
  333 +-keep class com.moat.** { *; }
  334 +-dontwarn com.moat.**
  335 +-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
  336 +-keepattributes *Annotation*
  337 +
  338 +# Retrofit
  339 +-keepattributes Signature, InnerClasses
  340 +-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
  341 +-dontwarn javax.annotation.**
  342 +-dontwarn kotlin.Unit
  343 +-dontwarn retrofit2.-KotlinExtensions
  344 +
  345 +# Okio+OkHttp
  346 +-dontwarn okhttp3.**
  347 +-dontwarn okio.**
  348 +-dontwarn javax.annotation.**
  349 +-dontwarn org.conscrypt.**
  350 +-keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase
  351 +#=======================================
  352 +
  353 +#穿山甲===============================
  354 +
  355 +-keep class com.bytedance.** {*;}
  356 +-keep class com.androidquery.** {*;}
  357 +-keep class com.ss.** {*;}
  358 +-keep class com.com.bytedance.** {*;}
  359 +-dontwarn com.androidquery.**
  360 +-dontwarn com.ss.**
  361 +-dontwarn com.com.bytedance.**
  362 +-dontwarn com.bytedance.**
  363 +-keep public interface com.bytedance.sdk.openadsdk.downloadnew.** {*;}
  364 +#=======================================
  365 +
  366 +#Display
  367 +#=======================================
  368 +-keep class com.brandio.** { *;}
  369 +-dontwarn com.brandio.**
  370 +-keep class iab.omid.**{ *;}
  371 +-dontwarn iab.omid.**
  372 +#=======================================
  373 +
  374 +#GDTAD
  375 +#=======================================
  376 +-keep class com.qq.e.** { *;}
  377 +-dontwarn com.qq.e.**
  378 +#=======================================
  379 +
  380 +##sigmob=========
  381 +-keep class com.google.android.material.** {*;}
  382 +-keep class androidx.** {*;}
  383 +-keep public class * extends androidx.**
  384 +-keep interface androidx.** {*;}
  385 +-dontwarn com.google.android.material.**
  386 +-dontnote com.google.android.material.**
  387 +-dontwarn androidx.**
  388 +-keep class sun.misc.Unsafe { *; }
  389 +-dontwarn com.sigmob.**
  390 +-keep class com.sigmob.**.**{*;}
  391 +-keep class com.bun.miitmdid.core.** {*;}
  392 +-dontwarn com.bun.miitmdid.core.**
  393 +##END sigmob=========
  394 +
  395 +##KuaiShou=========
  396 +-keep class org.chromium.** {*;}
  397 +-keep class org.chromium.** { *; }
  398 +-keep class aegon.chrome.** { *; }
  399 +-keep class com.kwai.**{ *; }
  400 +-keep class com.kwad.**{ *; }
  401 +-dontwarn com.kwai.**
  402 +-dontwarn com.kwad.**
  403 +-dontwarn com.ksad.**
  404 +-dontwarn aegon.chrome.**
  405 +##END KuaiShou====
0 406 \ No newline at end of file
... ...
app/src/androidTest/java/com/quzizi/fbbubble/ExampleInstrumentedTest.java 0 → 100644
  1 +++ a/app/src/androidTest/java/com/quzizi/fbbubble/ExampleInstrumentedTest.java
... ... @@ -0,0 +1,27 @@
  1 +package com.quzizi.fbbubble;
  2 +
  3 +import android.content.Context;
  4 +
  5 +import androidx.test.platform.app.InstrumentationRegistry;
  6 +import androidx.test.ext.junit.runners.AndroidJUnit4;
  7 +
  8 +import org.junit.Test;
  9 +import org.junit.runner.RunWith;
  10 +
  11 +import static org.junit.Assert.*;
  12 +
  13 +/**
  14 + * Instrumented test, which will execute on an Android device.
  15 + *
  16 + * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
  17 + */
  18 +@RunWith(AndroidJUnit4.class)
  19 +public class ExampleInstrumentedTest {
  20 + @Test
  21 + public void useAppContext() {
  22 + // Context of the app under test.
  23 + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
  24 +
  25 + assertEquals("com.quzizi.fbbubble", appContext.getPackageName());
  26 + }
  27 +}
... ...
app/src/main/AndroidManifest.xml 0 → 100644
  1 +++ a/app/src/main/AndroidManifest.xml
... ... @@ -0,0 +1,39 @@
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3 + xmlns:tools="http://schemas.android.com/tools"
  4 + package="com.quzizi.fbbubble">
  5 + <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
  6 + <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  7 + <uses-permission android:name="android.permission.INTERNET"/>
  8 + <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
  9 +
  10 + <application
  11 + android:icon="@mipmap/ic_launcher"
  12 + android:label="@string/app_name"
  13 + android:roundIcon="@mipmap/ic_launcher_round"
  14 + android:name=".MyApplication"
  15 + android:supportsRtl="true"
  16 + android:theme="@style/AppTheme">
  17 + <activity android:name=".MainActivity">
  18 + <intent-filter>
  19 + <action android:name="android.intent.action.MAIN" />
  20 +
  21 + <category android:name="android.intent.category.LAUNCHER" />
  22 + </intent-filter>
  23 + </activity>
  24 +
  25 + <meta-data
  26 + android:name="AppsFlyerLib_key"
  27 + android:value="LpxY6A97fuDqtGDprHUUbn"
  28 + tools:replace="android:value" />
  29 + <meta-data
  30 + android:name="flurry_key"
  31 + android:value="PB2BZY7BYB8D94H6FYQD" />
  32 + <meta-data
  33 + android:name="com.facebook.sdk.ApplicationId"
  34 + android:value="@string/facebook_app_id" />
  35 + <meta-data android:name="com.google.android.gms.ads.APPLICATION_ID"
  36 + android:value="ca-app-pub-7964211093862896~4343267903"/>
  37 + </application>
  38 +
  39 +</manifest>
0 40 \ No newline at end of file
... ...
app/src/main/java/com/quzizi/fbbubble/MainActivity.java 0 → 100644
  1 +++ a/app/src/main/java/com/quzizi/fbbubble/MainActivity.java
... ... @@ -0,0 +1,479 @@
  1 +package com.quzizi.fbbubble;
  2 +
  3 +import android.app.Activity;
  4 +import android.content.Intent;
  5 +import android.os.Bundle;
  6 +import android.util.Log;
  7 +import android.view.View;
  8 +import android.view.ViewGroup;
  9 +import android.widget.RelativeLayout;
  10 +import android.widget.TextView;
  11 +import android.widget.Toast;
  12 +
  13 +
  14 +import androidx.appcompat.app.AppCompatActivity;
  15 +
  16 +import com.adControler.AdControler;
  17 +import com.adListener.RewardedVideoListener;
  18 +import com.framework.pay.GooglePay;
  19 +import com.framework.pay.OnPayListener;
  20 +import com.plugin.analytics.AnalyticsControl;
  21 +
  22 +import org.json.JSONArray;
  23 +import org.json.JSONException;
  24 +import org.json.JSONObject;
  25 +
  26 +import java.text.SimpleDateFormat;
  27 +import java.util.ArrayList;
  28 +import java.util.Date;
  29 +import java.util.Map;
  30 +import java.util.TreeMap;
  31 +
  32 +public class MainActivity extends AppCompatActivity implements View.OnClickListener, OnPayListener {
  33 + private String TAG = MainActivity.class.getSimpleName();
  34 + private TextView mSetUserId, mGetUserId;
  35 + private TextView mUserProperty, mMultipleProperty;
  36 + private TextView mUserAddProperty, mUserAddMultipleProperty;
  37 + private TextView mUserOnceProperty, mUserMultipleOnceProperty;
  38 + private TextView mEvent, mMarketEvent;
  39 + private TextView mShowBanner, mHideBanner, mShowInterstitial, mShowRewardVideo, mShowOpen, mShowInGame, mHideInGame;
  40 + private Activity mActivity;
  41 + private TextView mPayConfig, mGoogleProduct, mOwnedProducts, mPay, mConsumePurchase;
  42 + private JSONArray mInAppProductPayArray;
  43 + private ArrayList<String> mInAppProductIdList;
  44 + private JSONObject mPayConfigObject;
  45 + private String mPaySuccess;
  46 +
  47 +
  48 + @Override
  49 + protected void onCreate(Bundle savedInstanceState) {
  50 + super.onCreate(savedInstanceState);
  51 + setContentView(R.layout.activity_main);
  52 + initView();
  53 + setListener();
  54 + mActivity = this;
  55 + //url="https://collect.playdayy.com/"
  56 + AnalyticsControl.activeThinkingData(mActivity, getString(R.string.thinkingDataKey),getString(R.string.url),true);
  57 +// AdControler.useTestServer();
  58 +// AdControler.setTestDevice(getString(R.string.facebookDeviceId), getString(R.string.admobDeviceId));//上线前注释
  59 + final RelativeLayout layout = new RelativeLayout(this);
  60 + //layout全屏的方式添加到当前界面中
  61 + addContentView(layout, new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
  62 + AdControler.init(mActivity, layout, false);//初始化 在确保在主进程中
  63 + AdControler.start();//开始拉取广告配置,自动加载广告id
  64 + //是否需要下发订单信息
  65 + GooglePay.initPaySDKWithNewApi(mActivity,true);
  66 + GooglePay.useCnServer(); //测试服务器
  67 + try{
  68 + GooglePay.setPayListener(this);
  69 + }catch (Exception e){
  70 + e.printStackTrace();
  71 + }
  72 + }
  73 +
  74 + private void initView() {
  75 + mSetUserId = findViewById(R.id.setId);//设置用户属性
  76 + mGetUserId = findViewById(R.id.getId);//获取用户属性
  77 +
  78 + mUserProperty = findViewById(R.id.property);//设置用户属性
  79 + mMultipleProperty = findViewById(R.id.multipleProperty);//设置多参用户属性
  80 +
  81 + mUserAddProperty = findViewById(R.id.addProperty);//用户累计属性
  82 + mUserAddMultipleProperty = findViewById(R.id.addMultipleProperty);//多元用户累加属性
  83 +
  84 + mUserOnceProperty = findViewById(R.id.onceProperty);//设置一次性用户属性
  85 + mUserMultipleOnceProperty = findViewById(R.id.multipleOnceProperty);//多元用户属性
  86 +
  87 + mEvent = findViewById(R.id.event);//事件打点
  88 + mMarketEvent = findViewById(R.id.marketEvent);//投放打点
  89 +
  90 + mShowBanner = findViewById(R.id.showBanner);//展示Banner
  91 + mHideBanner = findViewById(R.id.hideBanner);//隐藏插屏
  92 + mShowInterstitial = findViewById(R.id.showInterstitial);//展示插屏
  93 + mShowRewardVideo = findViewById(R.id.showRewardVideo);//展示激励视频
  94 + mShowOpen = findViewById(R.id.showOpenAd);//展示开屏广告
  95 + mShowInGame = findViewById(R.id.showIngame);//展示Ingame
  96 + mHideInGame = findViewById(R.id.hideIngame);//隐藏Ingame
  97 +
  98 + //
  99 + mPayConfig = findViewById(R.id.payConfig);
  100 + mGoogleProduct = findViewById(R.id.googleProduct);//隐藏Ingame
  101 + mOwnedProducts = findViewById(R.id.ownedProducts);//隐藏Ingame
  102 + mPay = findViewById(R.id.pay);//隐藏Ingame
  103 + mConsumePurchase = findViewById(R.id.consumePurchase);//消耗商品
  104 + }
  105 +
  106 + /**
  107 + *
  108 + */
  109 + private void setListener() {
  110 + mSetUserId.setOnClickListener(this);
  111 + mGetUserId.setOnClickListener(this);
  112 + mUserProperty.setOnClickListener(this);
  113 + mMultipleProperty.setOnClickListener(this);
  114 + mUserAddProperty.setOnClickListener(this);
  115 + mUserAddMultipleProperty.setOnClickListener(this);
  116 + mUserOnceProperty.setOnClickListener(this);
  117 + mUserMultipleOnceProperty.setOnClickListener(this);
  118 + mEvent.setOnClickListener(this);
  119 + mMarketEvent.setOnClickListener(this);
  120 + //广告
  121 + mShowBanner.setOnClickListener(this);
  122 + mHideBanner.setOnClickListener(this);
  123 + mShowInterstitial.setOnClickListener(this);
  124 + mShowRewardVideo.setOnClickListener(this);
  125 + mShowOpen.setOnClickListener(this);
  126 + mShowInGame.setOnClickListener(this);
  127 + mHideInGame.setOnClickListener(this);
  128 + //支付
  129 + mPayConfig.setOnClickListener(this);
  130 + mGoogleProduct.setOnClickListener(this);
  131 + mOwnedProducts.setOnClickListener(this);
  132 + mPay.setOnClickListener(this);
  133 + mConsumePurchase.setOnClickListener(this);
  134 + //设置激励视频监听
  135 + AdControler.setRewardedAdListener(new RewardedVideoListener() {
  136 + @Override
  137 + public void rewaredVideoReady() {
  138 + //激励视频加载好了
  139 + Toast.makeText(mActivity, R.string.rewardVideoReady, Toast.LENGTH_SHORT).show();
  140 + }
  141 +
  142 + @Override
  143 + public void rewaredVideoCompleted() {
  144 + //激励视频领取奖励
  145 + Log.i(TAG, "MainActivity>>>rewaredVideoCompleted: ==");
  146 + Toast.makeText(mActivity, R.string.obtainReward, Toast.LENGTH_SHORT).show();
  147 + }
  148 +
  149 + @Override
  150 + public void rewardVideoFailed() {
  151 + //激励视频播放失败
  152 + Log.i(TAG, "MainActivity>>>rewardVideoFailed: ==");
  153 + }
  154 + });
  155 +
  156 + }
  157 +
  158 + @Override
  159 + protected void onResume() {
  160 + super.onResume();
  161 + AnalyticsControl.onResume();
  162 + }
  163 +
  164 + @Override
  165 + protected void onPause() {
  166 + super.onPause();
  167 + AnalyticsControl.onPause();
  168 + }
  169 +
  170 + @Override
  171 + protected void onDestroy() {
  172 + super.onDestroy();
  173 + AnalyticsControl.onDestroy();
  174 + GooglePay.destroy();
  175 + }
  176 +
  177 + @Override
  178 + protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  179 + super.onActivityResult(requestCode, resultCode, data);
  180 + GooglePay.onActivityResult(requestCode, resultCode, data);
  181 + }
  182 +
  183 + @Override
  184 + public void onClick(View view) {
  185 + switch (view.getId()) {
  186 + case R.id.setId:
  187 + AnalyticsControl.setUserId(mActivity, "2020mmddhhss");
  188 + break;
  189 + case R.id.getId:
  190 + String usrId = AnalyticsControl.getUserId(mActivity);//该id 通过setUserId设置的数据
  191 + Log.i(TAG, "MainActivity>>>onClick: 获取到的用户id==" + usrId);
  192 + String distinctId = AnalyticsControl.getUserDistinctId(mActivity); //改id 是thinkingdata 自动生成的
  193 + Log.i(TAG, "MainActivity>>>onClick: 获取到的访客id==" + distinctId);
  194 + break;
  195 + case R.id.property:
  196 + AnalyticsControl.setUserProperty(mActivity, "demoKey", "demoValue"); //设置用户属性
  197 + break;
  198 + case R.id.multipleProperty:
  199 + JSONObject object = new JSONObject();
  200 + try {
  201 + object.put("demoKeyString", "demoValue");
  202 + object.put("demoKeyInt", 2020);
  203 + object.put("demoKeyDouble", 2020.8);
  204 + object.put("demoKeyBoolean", true);
  205 +
  206 + } catch (JSONException e) {
  207 + e.printStackTrace();
  208 + }
  209 + AnalyticsControl.setUserProperties(mActivity, object);
  210 + break;
  211 + case R.id.addProperty:
  212 + //每触发一次属性demoKeyAddInt的值就增加1
  213 + AnalyticsControl.setAddedProperty(mActivity, "demoKeyAddInt", 1);
  214 + break;
  215 + case R.id.addMultipleProperty:
  216 + JSONObject addObject = new JSONObject();
  217 + try {
  218 + addObject.put("demoKeyAddInt", 2);
  219 + addObject.put("demoKeyDouble", 2020.8);
  220 + } catch (JSONException e) {
  221 + e.printStackTrace();
  222 + }
  223 + //每触发一次demoKeyAddInt属性值增加2,demoKeyDouble属性值增加2020.8
  224 + AnalyticsControl.setAddedProperties(mActivity, addObject);
  225 + break;
  226 + case R.id.onceProperty:
  227 + Date currentTime = new Date();
  228 + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  229 + //无论触发多少次,demoRegisterTime的属性值永远是安装后第一次设置的时间
  230 + AnalyticsControl.setOnceProperty(mActivity, "demoRegisterTime", formatter.format(currentTime));//
  231 +
  232 + break;
  233 + case R.id.multipleOnceProperty:
  234 + try {
  235 + JSONObject objectOnnce = new JSONObject();
  236 + objectOnnce.put("demoRegisterVersion", "1.0.0");
  237 + objectOnnce.put("demoRegisterData", new Date());
  238 + AnalyticsControl.setOnceProperties(mActivity, objectOnnce);
  239 + } catch (Exception e) {
  240 + e.printStackTrace();
  241 + }
  242 + break;
  243 + case R.id.event:
  244 + try {
  245 + JSONObject eventObject = new JSONObject();
  246 + eventObject.put("demoTime", new Date());
  247 + eventObject.put("demoNum", 1);
  248 + AnalyticsControl.sendEvent("demoEventName", eventObject.toString());
  249 + } catch (Exception e) {
  250 + e.printStackTrace();
  251 + }
  252 +
  253 + break;
  254 + case R.id.marketEvent:
  255 + try {
  256 +
  257 + Bundle bundle = new Bundle();
  258 + bundle.putString("demoKey", "demoValue");
  259 + AnalyticsControl.sendFacebookEvent("demoEventName", bundle);
  260 + AnalyticsControl.sendFirebaseEvent("tf_demoEventName", bundle);
  261 + Map<String, String> map = new TreeMap<>();
  262 + map.put("demoKey", "demoValue");
  263 + AnalyticsControl.sendAppsFlyerEvent(mActivity, "demoEventName", map);
  264 + } catch (Exception e) {
  265 + e.printStackTrace();
  266 + }
  267 +
  268 + break;
  269 + case R.id.showBanner:
  270 + if (!AdControler.isBannerReady()) {
  271 + Toast.makeText(mActivity, R.string.bannerNoFill, Toast.LENGTH_SHORT).show();
  272 + }
  273 + AdControler.showBottomADBannar(AdControler.ADPOS_BOTTOM);
  274 +
  275 +
  276 + break;
  277 + case R.id.hideBanner:
  278 + AdControler.hiddenBannarWithStack();
  279 +
  280 + break;
  281 + case R.id.showInterstitial:
  282 + if (AdControler.isInterstitialReady()) {
  283 + AdControler.showInterstitialAD();
  284 + } else {
  285 + Toast.makeText(mActivity, R.string.interstitialNoFill, Toast.LENGTH_SHORT).show();
  286 + }
  287 +
  288 + break;
  289 + case R.id.showRewardVideo:
  290 + if (AdControler.isRewardVideoReady()) {
  291 + AdControler.showRewardVideo();
  292 + } else {
  293 + Toast.makeText(mActivity, R.string.rewardVideoNoFill, Toast.LENGTH_SHORT).show();
  294 + }
  295 + break;
  296 + case R.id.showOpenAd:
  297 + if (AdControler.isOpenAdReady()) {
  298 + AdControler.showOpenAd();
  299 + } else {
  300 + Toast.makeText(mActivity, R.string.openAdNoFill, Toast.LENGTH_SHORT).show();
  301 + }
  302 +
  303 + break;
  304 + case R.id.showIngame:
  305 + JSONObject params = new JSONObject();
  306 + try {
  307 + JSONObject objectParams = new JSONObject();
  308 + objectParams.put("w", 800);
  309 + objectParams.put("h", 800);
  310 + objectParams.put("top", 50);
  311 + objectParams.put("centerH", 10);
  312 + params.put("view", objectParams);
  313 + objectParams = new JSONObject();
  314 + objectParams.put("w", 150);
  315 + objectParams.put("h", 150);
  316 + objectParams.put("top", 10);
  317 + objectParams.put("left", 10);
  318 + params.put("icon", objectParams);
  319 + objectParams = new JSONObject();
  320 + objectParams.put("w", 500);
  321 + objectParams.put("h", 150);
  322 + objectParams.put("top", 20);
  323 + objectParams.put("left", 170);
  324 + objectParams.put("color", "#000000");
  325 + objectParams.put("size", "24");
  326 + params.put("title", objectParams);
  327 + objectParams = new JSONObject();
  328 + objectParams.put("w", 700);
  329 + objectParams.put("h", 100);
  330 + objectParams.put("top", 170);
  331 + objectParams.put("left", 50);
  332 + objectParams.put("color", "#000000");
  333 + objectParams.put("size", "16");
  334 + params.put("body", objectParams);
  335 + objectParams = new JSONObject();
  336 + objectParams.put("w", 800);
  337 + objectParams.put("h", 400);
  338 + objectParams.put("top", 300);
  339 + objectParams.put("left", 0);
  340 + params.put("media", objectParams);
  341 + objectParams = new JSONObject();
  342 + objectParams.put("w", 500);
  343 + objectParams.put("h", 80);
  344 + objectParams.put("color", "#0000ff");
  345 + objectParams.put("bottom", 10);
  346 + objectParams.put("centerH", 20);
  347 + params.put("button", objectParams);
  348 + objectParams = new JSONObject();
  349 + objectParams.put("color", "#ff0000");
  350 + objectParams.put("size", "20");
  351 + params.put("action", objectParams);
  352 + } catch (Exception e) {
  353 + Log.i(TAG, "MainActivity>>>onClick: ==" + e.toString());
  354 + }
  355 + if (!AdControler.isInGameReady()) {
  356 + Toast.makeText(mActivity, R.string.inGameNoFill, Toast.LENGTH_SHORT).show();
  357 + }
  358 +
  359 + new Thread(new Runnable() {
  360 + @Override
  361 + public void run() {
  362 + Log.i(TAG, "MainActivity>>>run: ==" + params.toString());
  363 + AdControler.showInGameAD(params.toString());
  364 + }
  365 + }).start();
  366 + break;
  367 + case R.id.hideIngame:
  368 + AdControler.hiddenInGameAD();
  369 + break;
  370 + //支付系统
  371 + case R.id.payConfig:
  372 + String payMessage = GooglePay.getPayConfig();
  373 + Log.i(TAG, "MainActivity>>>onClick: =支付数据=" + payMessage);
  374 + try {
  375 + mPayConfigObject = new JSONObject(payMessage);
  376 + //内购订单
  377 + mInAppProductPayArray = mPayConfigObject.getJSONArray("inAppProductInfo");
  378 + } catch (Exception e) {
  379 + e.printStackTrace();
  380 + }
  381 + break;
  382 + case R.id.googleProduct:
  383 + mInAppProductIdList = new ArrayList<>();
  384 + try {
  385 + if (mInAppProductPayArray == null) {
  386 + Toast.makeText(mActivity, R.string.inspectionProcess, Toast.LENGTH_SHORT).show();
  387 + return;
  388 + }
  389 + for (int i = 0; i < mInAppProductPayArray.length(); i++) {
  390 + JSONObject inAppProductMessage = mInAppProductPayArray.getJSONObject(i);
  391 + String id = inAppProductMessage.getString("payId");
  392 + Log.i(TAG, "MainActivity>>>onClick: ==" + id);
  393 + mInAppProductIdList.add(id);
  394 + }
  395 + } catch (Exception e) {
  396 + e.printStackTrace();
  397 + }
  398 + GooglePay.requestProducts(mInAppProductIdList, null);
  399 + break;
  400 + case R.id.ownedProducts:
  401 + ArrayList<String> ownedProductList = GooglePay.getOwnedProducts();
  402 + Log.i(TAG, "MainActivity>>>onClick: ==" + ownedProductList);
  403 + break;
  404 + case R.id.pay:
  405 + if (mInAppProductIdList == null || mInAppProductPayArray == null || mPayConfigObject == null || mInAppProductIdList.size() == 0 ) {
  406 + Toast.makeText(mActivity, R.string.inspectionProcess, Toast.LENGTH_SHORT).show();
  407 + return;
  408 + }
  409 + try {
  410 + JSONObject payObject = new JSONObject();
  411 + payObject.put("productId", mInAppProductIdList.get(0));//这里随机支付第一个商品的id
  412 + payObject.put("time", System.currentTimeMillis() / 1000);
  413 + payObject.put("name", mInAppProductPayArray.getJSONObject(0).get("name"));
  414 + payObject.put("group", mPayConfigObject.get("groupIndex"));
  415 + payObject.put("consumable", mPayConfigObject.get("consumable"));
  416 + payObject.put("shopItemId", mPayConfigObject.get("shopItemId"));
  417 + GooglePay.payForProduct(payObject.toString(), false,"scene","USD",0,0);//这个是内购商品,不是订阅商品
  418 + } catch (Exception e) {
  419 + e.printStackTrace();
  420 + }
  421 +
  422 + break;
  423 + case R.id.consumePurchase:
  424 + if (mPaySuccess != null) {
  425 + GooglePay.consumePurchase(mPaySuccess, false);//此处支付的不是订阅商品,
  426 + } else {
  427 + Toast.makeText(mActivity, "没有拿到支付成功数据", Toast.LENGTH_SHORT).show();
  428 + }
  429 + break;
  430 + }
  431 + }
  432 +
  433 + @Override
  434 + public void onPaySuccess(String s) {
  435 + //支付成功 的数据s 消耗时使用
  436 + Log.i(TAG, "MainActivity>>>onPaySuccess: ==" + s);
  437 + mPaySuccess = s;
  438 + }
  439 +
  440 + @Override
  441 + public void onPayFailed(String s) {
  442 + Log.i(TAG, "MainActivity>>>onPayFailed: 支付失败==" + s);
  443 + }
  444 +
  445 + @Override
  446 + public void onPayCancel() {
  447 + Log.i(TAG, "MainActivity>>>onPayCancel: ==");
  448 + }
  449 +
  450 + @Override
  451 + public void onRequestProducts(ArrayList arrayList) {
  452 + Log.i(TAG, "MainActivity>>>onRequestProducts: ==" + arrayList.toString());
  453 + }
  454 +
  455 + @Override
  456 + public void onQuerySubsProducts(ArrayList arrayList) {
  457 + Log.i(TAG, "MainActivity>>>onQuerySubsProducts: ==");
  458 + }
  459 +
  460 + @Override
  461 + public void onConfigData(String s) {
  462 + Log.i(TAG, "MainActivity>>>onConfigData: ==" + s);
  463 + }
  464 +
  465 + @Override
  466 + public void onConfigDataFailed(String s) {
  467 + Log.i(TAG, "MainActivity>>>onConfigDataFailed: ==" + s);
  468 + }
  469 +
  470 + @Override
  471 + public void onOrderUploaded() {
  472 + Log.i(TAG, "MainActivity>>>onOrderUploaded: ==");
  473 + }
  474 +
  475 + @Override
  476 + public void onOrderUploadedFailed() {
  477 + Log.i(TAG, "MainActivity>>>onOrderUploadedFailed: ==");
  478 + }
  479 +}
... ...
app/src/main/java/com/quzizi/fbbubble/MyApplication.java 0 → 100644
  1 +++ a/app/src/main/java/com/quzizi/fbbubble/MyApplication.java
... ... @@ -0,0 +1,19 @@
  1 +package com.quzizi.fbbubble;
  2 +
  3 +import android.app.Application;
  4 +
  5 +import com.plugin.analytics.AnalyticsControl;
  6 +import com.plugins.lib.firebase.FirebaseHelper;
  7 +
  8 +
  9 +/**
  10 + * Created on 2020/8/12.
  11 + **/
  12 +public class MyApplication extends Application {
  13 + @Override
  14 + public void onCreate() {
  15 + super.onCreate();
  16 + AnalyticsControl.initAnalytics(this);
  17 + FirebaseHelper.init(this);
  18 + }
  19 +}
... ...
app/src/main/res/drawable/ripple_bg.xml 0 → 100644
  1 +++ a/app/src/main/res/drawable/ripple_bg.xml
... ... @@ -0,0 +1,18 @@
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<selector xmlns:android="http://schemas.android.com/apk/res/android">
  3 + <!--按下点击-->
  4 + <item android:state_enabled="true" android:state_pressed="true">
  5 + <shape>
  6 + <solid android:color="@android:color/holo_orange_dark" />
  7 + </shape>
  8 + </item>
  9 +
  10 +
  11 + <item android:state_enabled="false" android:state_pressed="false">
  12 + <shape>
  13 + <solid android:color="@android:color/darker_gray" />
  14 + </shape>
  15 + </item>
  16 +
  17 +
  18 +</selector>
... ...
app/src/main/res/layout/activity_main.xml 0 → 100644
  1 +++ a/app/src/main/res/layout/activity_main.xml
... ... @@ -0,0 +1,241 @@
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3 + xmlns:tools="http://schemas.android.com/tools"
  4 + android:layout_width="match_parent"
  5 + android:layout_height="match_parent"
  6 + android:orientation="vertical"
  7 + android:padding="10dp"
  8 + tools:context=".MainActivity">
  9 +
  10 + <ScrollView
  11 + android:layout_width="match_parent"
  12 + android:layout_height="match_parent">
  13 +
  14 + <LinearLayout
  15 + android:layout_width="match_parent"
  16 + android:layout_height="match_parent"
  17 + android:orientation="horizontal">
  18 +
  19 + <LinearLayout
  20 + android:layout_width="wrap_content"
  21 + android:layout_height="match_parent"
  22 + android:layout_weight="1"
  23 + android:gravity="center_horizontal"
  24 + android:orientation="vertical">
  25 +
  26 + <TextView
  27 + android:id="@+id/setId"
  28 + android:layout_width="100dp"
  29 + android:layout_height="40dp"
  30 + android:background="@drawable/ripple_bg"
  31 + android:gravity="center"
  32 + android:text="@string/setUserId" />
  33 +
  34 + <TextView
  35 + android:id="@+id/getId"
  36 + android:layout_width="100dp"
  37 + android:layout_height="40dp"
  38 + android:layout_marginTop="10dp"
  39 + android:background="@drawable/ripple_bg"
  40 + android:gravity="center"
  41 + android:text="@string/getUserId" />
  42 +
  43 + <TextView
  44 + android:id="@+id/property"
  45 + android:layout_width="100dp"
  46 + android:layout_height="40dp"
  47 + android:layout_marginTop="10dp"
  48 + android:background="@drawable/ripple_bg"
  49 + android:gravity="center"
  50 + android:text="@string/property" />
  51 +
  52 + <TextView
  53 + android:id="@+id/multipleProperty"
  54 + android:layout_width="100dp"
  55 + android:layout_height="40dp"
  56 + android:layout_marginTop="10dp"
  57 + android:background="@drawable/ripple_bg"
  58 + android:gravity="center"
  59 + android:text="@string/multipleProperty" />
  60 +
  61 + <TextView
  62 + android:id="@+id/addProperty"
  63 + android:layout_width="100dp"
  64 + android:layout_height="40dp"
  65 + android:layout_marginTop="10dp"
  66 + android:background="@drawable/ripple_bg"
  67 + android:gravity="center"
  68 + android:text="@string/addProperty" />
  69 +
  70 + <TextView
  71 + android:id="@+id/addMultipleProperty"
  72 + android:layout_width="100dp"
  73 + android:layout_height="40dp"
  74 + android:layout_marginTop="10dp"
  75 + android:background="@drawable/ripple_bg"
  76 + android:gravity="center"
  77 + android:text="@string/addMultipleProperty" />
  78 +
  79 + <TextView
  80 + android:id="@+id/onceProperty"
  81 + android:layout_width="100dp"
  82 + android:layout_height="40dp"
  83 + android:layout_marginTop="10dp"
  84 + android:background="@drawable/ripple_bg"
  85 + android:gravity="center"
  86 + android:text="@string/onceProperty" />
  87 +
  88 + <TextView
  89 + android:id="@+id/multipleOnceProperty"
  90 + android:layout_width="100dp"
  91 + android:layout_height="40dp"
  92 + android:layout_marginTop="10dp"
  93 + android:background="@drawable/ripple_bg"
  94 + android:gravity="center"
  95 + android:text="@string/multipleOnceProperty" />
  96 +
  97 + <TextView
  98 + android:id="@+id/event"
  99 + android:layout_width="100dp"
  100 + android:layout_height="40dp"
  101 + android:layout_marginTop="10dp"
  102 + android:background="@drawable/ripple_bg"
  103 + android:gravity="center"
  104 + android:text="@string/event" />
  105 +
  106 + <TextView
  107 + android:id="@+id/marketEvent"
  108 + android:layout_width="100dp"
  109 + android:layout_height="40dp"
  110 + android:layout_marginTop="10dp"
  111 + android:background="@drawable/ripple_bg"
  112 + android:gravity="center"
  113 + android:text="@string/marketEvent" />
  114 + </LinearLayout>
  115 +
  116 + <LinearLayout
  117 + android:layout_width="wrap_content"
  118 + android:layout_height="match_parent"
  119 + android:layout_weight="1"
  120 + android:gravity="center_horizontal"
  121 + android:orientation="vertical">
  122 +
  123 + <TextView
  124 + android:id="@+id/showBanner"
  125 + android:layout_width="100dp"
  126 + android:layout_height="40dp"
  127 + android:background="@drawable/ripple_bg"
  128 + android:gravity="center"
  129 + android:text="@string/showBanner" />
  130 +
  131 + <TextView
  132 + android:id="@+id/hideBanner"
  133 + android:layout_width="100dp"
  134 + android:layout_height="40dp"
  135 + android:layout_marginTop="10dp"
  136 + android:background="@drawable/ripple_bg"
  137 + android:gravity="center"
  138 + android:text="@string/hideBanner" />
  139 +
  140 + <TextView
  141 + android:id="@+id/showInterstitial"
  142 + android:layout_width="100dp"
  143 + android:layout_height="40dp"
  144 + android:layout_marginTop="10dp"
  145 + android:background="@drawable/ripple_bg"
  146 + android:gravity="center"
  147 + android:text="@string/showInterstitial" />
  148 +
  149 + <TextView
  150 + android:id="@+id/showRewardVideo"
  151 + android:layout_width="100dp"
  152 + android:layout_height="40dp"
  153 + android:layout_marginTop="10dp"
  154 + android:background="@drawable/ripple_bg"
  155 + android:gravity="center"
  156 + android:text="@string/showRewardVideo" />
  157 +
  158 + <TextView
  159 + android:id="@+id/showOpenAd"
  160 + android:layout_width="100dp"
  161 + android:layout_height="40dp"
  162 + android:layout_marginTop="10dp"
  163 + android:background="@drawable/ripple_bg"
  164 + android:gravity="center"
  165 + android:text="@string/showOpenAd" />
  166 +
  167 + <TextView
  168 + android:id="@+id/showIngame"
  169 + android:layout_width="100dp"
  170 + android:layout_height="40dp"
  171 + android:layout_marginTop="10dp"
  172 + android:background="@drawable/ripple_bg"
  173 + android:gravity="center"
  174 + android:text="@string/showIngame" />
  175 +
  176 + <TextView
  177 + android:id="@+id/hideIngame"
  178 + android:layout_width="100dp"
  179 + android:layout_height="40dp"
  180 + android:layout_marginTop="10dp"
  181 + android:background="@drawable/ripple_bg"
  182 + android:gravity="center"
  183 + android:text="@string/hideIngame" />
  184 +
  185 + </LinearLayout>
  186 +
  187 + <LinearLayout
  188 + android:layout_width="wrap_content"
  189 + android:layout_height="match_parent"
  190 + android:layout_weight="1"
  191 + android:gravity="center_horizontal"
  192 + android:orientation="vertical">
  193 +
  194 + <TextView
  195 + android:id="@+id/payConfig"
  196 + android:layout_width="100dp"
  197 + android:layout_height="40dp"
  198 + android:background="@drawable/ripple_bg"
  199 + android:gravity="center"
  200 + android:text="@string/payConfig" />
  201 +
  202 + <TextView
  203 + android:id="@+id/googleProduct"
  204 + android:layout_width="100dp"
  205 + android:layout_height="40dp"
  206 + android:layout_marginTop="10dp"
  207 + android:background="@drawable/ripple_bg"
  208 + android:gravity="center"
  209 + android:text="@string/googleProduct" />
  210 +
  211 +
  212 + <TextView
  213 + android:id="@+id/ownedProducts"
  214 + android:layout_width="100dp"
  215 + android:layout_height="40dp"
  216 + android:layout_marginTop="10dp"
  217 + android:background="@drawable/ripple_bg"
  218 + android:gravity="center"
  219 + android:text="@string/ownedProducts" />
  220 +
  221 + <TextView
  222 + android:id="@+id/pay"
  223 + android:layout_width="100dp"
  224 + android:layout_height="40dp"
  225 + android:layout_marginTop="10dp"
  226 + android:background="@drawable/ripple_bg"
  227 + android:gravity="center"
  228 + android:text="@string/pay" />
  229 +
  230 + <TextView
  231 + android:id="@+id/consumePurchase"
  232 + android:layout_width="100dp"
  233 + android:layout_height="40dp"
  234 + android:layout_marginTop="10dp"
  235 + android:background="@drawable/ripple_bg"
  236 + android:gravity="center"
  237 + android:text="@string/consumePurchase" />
  238 + </LinearLayout>
  239 + </LinearLayout>
  240 + </ScrollView>
  241 +</LinearLayout>
0 242 \ No newline at end of file
... ...
app/src/main/res/mipmap-hdpi/ic_launcher.png 0 → 100644

3.51 KB

app/src/main/res/mipmap-hdpi/ic_launcher_round.png 0 → 100644

5.21 KB

app/src/main/res/mipmap-mdpi/ic_launcher.png 0 → 100644

2.57 KB

app/src/main/res/mipmap-mdpi/ic_launcher_round.png 0 → 100644

3.31 KB

app/src/main/res/mipmap-xhdpi/ic_launcher.png 0 → 100644

4.81 KB

app/src/main/res/mipmap-xhdpi/ic_launcher_round.png 0 → 100644

7.3 KB

app/src/main/res/mipmap-xxhdpi/ic_launcher.png 0 → 100644

7.72 KB

app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png 0 → 100644

11.6 KB

app/src/main/res/mipmap-xxxhdpi/ic_launcher.png 0 → 100644

10.4 KB

app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png 0 → 100644

16.2 KB

app/src/main/res/values/colors.xml 0 → 100644
  1 +++ a/app/src/main/res/values/colors.xml
... ... @@ -0,0 +1,6 @@
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<resources>
  3 + <color name="colorPrimary">#6200EE</color>
  4 + <color name="colorPrimaryDark">#3700B3</color>
  5 + <color name="colorAccent">#03DAC5</color>
  6 +</resources>
... ...
app/src/main/res/values/strings.xml 0 → 100644
  1 +++ a/app/src/main/res/values/strings.xml
... ... @@ -0,0 +1,38 @@
  1 +<resources>
  2 + <string name="app_name">PluginsDemo</string>
  3 + <string name="facebook_app_id" translatable="false">257285502517991</string>
  4 + <string name="setUserId">设置用户ID</string>
  5 + <string name="getUserId">获取用户ID</string>
  6 + <string name="property">设置用户属性</string>
  7 + <string name="multipleProperty">多参属性</string>
  8 + <string name="addProperty">单一累加属性</string>
  9 + <string name="addMultipleProperty">多参累加属性</string>
  10 + <string name="onceProperty">单一永久属性</string>
  11 + <string name="multipleOnceProperty">多参永久属性</string>
  12 + <string name="event">事件打点</string>
  13 + <string name="marketEvent">投放事件打点</string>
  14 + <string name="showBanner">展示banner</string>
  15 + <string name="hideBanner">隐藏banner</string>
  16 + <string name="showInterstitial">展示插屏广告</string>
  17 + <string name="showRewardVideo">展示激励视频</string>
  18 + <string name="showOpenAd">展示开屏广告</string>
  19 + <string name="showIngame">展示InGame</string>
  20 + <string name="hideIngame">隐藏InGame</string>
  21 + <string name="payConfig">拉取服务器数据</string>
  22 + <string name="googleProduct">拉取商店详情</string>
  23 + <string name="ownedProducts">持有订单查询</string>
  24 + <string name="pay">发起支付</string>
  25 + <string name="consumePurchase">消耗商品</string>
  26 + <string name="facebookDeviceId">D7BDE0F6F4C421B66FAA239F0A63075B</string>
  27 + <string name="admobDeviceId">de263ff7-94d3-4458-8506-95bf20109e24</string>
  28 + <string name="thinkingDataKey">ec7466297eb640fd817eb5c830c2b144</string>
  29 + <string name="rewardVideoReady">激励视频填充</string>
  30 + <string name="obtainReward">领取奖励</string>
  31 + <string name="bannerNoFill">Banner 未填充</string>
  32 + <string name="interstitialNoFill">插屏广告未填充</string>
  33 + <string name="rewardVideoNoFill">激励视频未填充</string>
  34 + <string name="openAdNoFill">开屏广告未填充</string>
  35 + <string name="inGameNoFill">InGame未填充</string>
  36 + <string name="inspectionProcess">检查流程以及包名是否正确</string>
  37 + <string name="url">"https://collect.playdayy.com/"</string>
  38 +</resources>
... ...
app/src/main/res/values/styles.xml 0 → 100644
  1 +++ a/app/src/main/res/values/styles.xml
... ... @@ -0,0 +1,11 @@
  1 +<resources>
  2 +
  3 + <!-- Base application theme. -->
  4 + <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
  5 + <!-- Customize your theme here. -->
  6 + <item name="colorPrimary">@color/colorPrimary</item>
  7 + <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
  8 + <item name="colorAccent">@color/colorAccent</item>
  9 + </style>
  10 +
  11 +</resources>
... ...
app/src/test/java/com/quzizi/fbbubble/ExampleUnitTest.java 0 → 100644
  1 +++ a/app/src/test/java/com/quzizi/fbbubble/ExampleUnitTest.java
... ... @@ -0,0 +1,17 @@
  1 +package com.quzizi.fbbubble;
  2 +
  3 +import org.junit.Test;
  4 +
  5 +import static org.junit.Assert.*;
  6 +
  7 +/**
  8 + * Example local unit test, which will execute on the development machine (host).
  9 + *
  10 + * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
  11 + */
  12 +public class ExampleUnitTest {
  13 + @Test
  14 + public void addition_isCorrect() {
  15 + assertEquals(4, 2 + 2);
  16 + }
  17 +}
0 18 \ No newline at end of file
... ...
build.gradle 0 → 100644
  1 +++ a/build.gradle
... ... @@ -0,0 +1,57 @@
  1 +// Top-level build file where you can add configuration options common to all sub-projects/modules.
  2 +
  3 +buildscript {
  4 +
  5 + repositories {
  6 + google()
  7 + jcenter()
  8 + mavenCentral()
  9 +
  10 + }
  11 + dependencies {
  12 + classpath 'com.android.tools.build:gradle:3.4.3'
  13 + classpath 'com.google.gms:google-services:4.3.4'
  14 +
  15 +
  16 + // NOTE: Do not place your application dependencies here; they belong
  17 + // in the individual module build.gradle files
  18 + }
  19 +}
  20 +
  21 +allprojects {
  22 + repositories {
  23 + google()
  24 + jcenter()
  25 + mavenCentral()
  26 +
  27 + maven { url 'https://jitpack.io' }
  28 + maven{
  29 + url "http://47.94.86.25:8081/repository/maven-group/"
  30 + credentials {
  31 + username "pub45153"
  32 + password "mhjfk5asj2"
  33 + }
  34 + }
  35 + maven{
  36 + url "http://47.94.86.25:8081/repository/maven-beta/"
  37 + credentials {
  38 + username "pub45153"
  39 + password "mhjfk5asj2"
  40 + }
  41 + }
  42 + maven {
  43 + name "Tapjoy's maven repo"
  44 + url "https://tapjoy.bintray.com/maven"
  45 + }
  46 + maven { url "https://repo1.maven.org/maven2/com/chartboost/chartboost-sdk/" }
  47 + maven { url "https://cdn2.inner-active.mobi/legacy-maven/marketplace" }
  48 + maven { url 'https://dl.bintray.com/ironsource-mobile/android-sdk'}
  49 + maven { url "https://adcolony.bintray.com/AdColony" }
  50 + maven { url "http://maven.display.io/" }
  51 +
  52 + }
  53 +}
  54 +
  55 +task clean(type: Delete) {
  56 + delete rootProject.buildDir
  57 +}
... ...
gradle.properties 0 → 100644
  1 +++ a/gradle.properties
... ... @@ -0,0 +1,20 @@
  1 +# Project-wide Gradle settings.
  2 +# IDE (e.g. Android Studio) users:
  3 +# Gradle settings configured through the IDE *will override*
  4 +# any settings specified in this file.
  5 +# For more details on how to configure your build environment visit
  6 +# http://www.gradle.org/docs/current/userguide/build_environment.html
  7 +# Specifies the JVM arguments used for the daemon process.
  8 +# The setting is particularly useful for tweaking memory settings.
  9 +org.gradle.jvmargs=-Xmx1536m
  10 +# When configured, Gradle will run in incubating parallel mode.
  11 +# This option should only be used with decoupled projects. More details, visit
  12 +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
  13 +# org.gradle.parallel=true
  14 +# AndroidX package structure to make it clearer which packages are bundled with the
  15 +# Android operating system, and which are packaged with your app's APK
  16 +# https://developer.android.com/topic/libraries/support-library/androidx-rn
  17 +android.useAndroidX=true
  18 +# Automatically convert third-party libraries to use AndroidX
  19 +android.enableJetifier=true
  20 +
... ...
gradle/wrapper/gradle-wrapper.jar 0 → 100644
No preview for this file type
gradle/wrapper/gradle-wrapper.properties 0 → 100644
  1 +++ a/gradle/wrapper/gradle-wrapper.properties
... ... @@ -0,0 +1,6 @@
  1 +#Tue Aug 11 19:55:13 CST 2020
  2 +distributionBase=GRADLE_USER_HOME
  3 +distributionPath=wrapper/dists
  4 +zipStoreBase=GRADLE_USER_HOME
  5 +zipStorePath=wrapper/dists
  6 +distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip
... ...
gradlew 0 → 100755
  1 +++ a/gradlew
... ... @@ -0,0 +1,172 @@
  1 +#!/usr/bin/env sh
  2 +
  3 +##############################################################################
  4 +##
  5 +## Gradle start up script for UN*X
  6 +##
  7 +##############################################################################
  8 +
  9 +# Attempt to set APP_HOME
  10 +# Resolve links: $0 may be a link
  11 +PRG="$0"
  12 +# Need this for relative symlinks.
  13 +while [ -h "$PRG" ] ; do
  14 + ls=`ls -ld "$PRG"`
  15 + link=`expr "$ls" : '.*-> \(.*\)$'`
  16 + if expr "$link" : '/.*' > /dev/null; then
  17 + PRG="$link"
  18 + else
  19 + PRG=`dirname "$PRG"`"/$link"
  20 + fi
  21 +done
  22 +SAVED="`pwd`"
  23 +cd "`dirname \"$PRG\"`/" >/dev/null
  24 +APP_HOME="`pwd -P`"
  25 +cd "$SAVED" >/dev/null
  26 +
  27 +APP_NAME="Gradle"
  28 +APP_BASE_NAME=`basename "$0"`
  29 +
  30 +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
  31 +DEFAULT_JVM_OPTS=""
  32 +
  33 +# Use the maximum available, or set MAX_FD != -1 to use that value.
  34 +MAX_FD="maximum"
  35 +
  36 +warn () {
  37 + echo "$*"
  38 +}
  39 +
  40 +die () {
  41 + echo
  42 + echo "$*"
  43 + echo
  44 + exit 1
  45 +}
  46 +
  47 +# OS specific support (must be 'true' or 'false').
  48 +cygwin=false
  49 +msys=false
  50 +darwin=false
  51 +nonstop=false
  52 +case "`uname`" in
  53 + CYGWIN* )
  54 + cygwin=true
  55 + ;;
  56 + Darwin* )
  57 + darwin=true
  58 + ;;
  59 + MINGW* )
  60 + msys=true
  61 + ;;
  62 + NONSTOP* )
  63 + nonstop=true
  64 + ;;
  65 +esac
  66 +
  67 +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
  68 +
  69 +# Determine the Java command to use to start the JVM.
  70 +if [ -n "$JAVA_HOME" ] ; then
  71 + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
  72 + # IBM's JDK on AIX uses strange locations for the executables
  73 + JAVACMD="$JAVA_HOME/jre/sh/java"
  74 + else
  75 + JAVACMD="$JAVA_HOME/bin/java"
  76 + fi
  77 + if [ ! -x "$JAVACMD" ] ; then
  78 + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
  79 +
  80 +Please set the JAVA_HOME variable in your environment to match the
  81 +location of your Java installation."
  82 + fi
  83 +else
  84 + JAVACMD="java"
  85 + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
  86 +
  87 +Please set the JAVA_HOME variable in your environment to match the
  88 +location of your Java installation."
  89 +fi
  90 +
  91 +# Increase the maximum file descriptors if we can.
  92 +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
  93 + MAX_FD_LIMIT=`ulimit -H -n`
  94 + if [ $? -eq 0 ] ; then
  95 + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
  96 + MAX_FD="$MAX_FD_LIMIT"
  97 + fi
  98 + ulimit -n $MAX_FD
  99 + if [ $? -ne 0 ] ; then
  100 + warn "Could not set maximum file descriptor limit: $MAX_FD"
  101 + fi
  102 + else
  103 + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
  104 + fi
  105 +fi
  106 +
  107 +# For Darwin, add options to specify how the application appears in the dock
  108 +if $darwin; then
  109 + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
  110 +fi
  111 +
  112 +# For Cygwin, switch paths to Windows format before running java
  113 +if $cygwin ; then
  114 + APP_HOME=`cygpath --path --mixed "$APP_HOME"`
  115 + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
  116 + JAVACMD=`cygpath --unix "$JAVACMD"`
  117 +
  118 + # We build the pattern for arguments to be converted via cygpath
  119 + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
  120 + SEP=""
  121 + for dir in $ROOTDIRSRAW ; do
  122 + ROOTDIRS="$ROOTDIRS$SEP$dir"
  123 + SEP="|"
  124 + done
  125 + OURCYGPATTERN="(^($ROOTDIRS))"
  126 + # Add a user-defined pattern to the cygpath arguments
  127 + if [ "$GRADLE_CYGPATTERN" != "" ] ; then
  128 + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
  129 + fi
  130 + # Now convert the arguments - kludge to limit ourselves to /bin/sh
  131 + i=0
  132 + for arg in "$@" ; do
  133 + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
  134 + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
  135 +
  136 + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
  137 + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
  138 + else
  139 + eval `echo args$i`="\"$arg\""
  140 + fi
  141 + i=$((i+1))
  142 + done
  143 + case $i in
  144 + (0) set -- ;;
  145 + (1) set -- "$args0" ;;
  146 + (2) set -- "$args0" "$args1" ;;
  147 + (3) set -- "$args0" "$args1" "$args2" ;;
  148 + (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
  149 + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
  150 + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
  151 + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
  152 + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
  153 + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
  154 + esac
  155 +fi
  156 +
  157 +# Escape application args
  158 +save () {
  159 + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
  160 + echo " "
  161 +}
  162 +APP_ARGS=$(save "$@")
  163 +
  164 +# Collect all arguments for the java command, following the shell quoting and substitution rules
  165 +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
  166 +
  167 +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
  168 +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
  169 + cd "$(dirname "$0")"
  170 +fi
  171 +
  172 +exec "$JAVACMD" "$@"
... ...
gradlew.bat 0 → 100644
  1 +++ a/gradlew.bat
... ... @@ -0,0 +1,84 @@
  1 +@if "%DEBUG%" == "" @echo off
  2 +@rem ##########################################################################
  3 +@rem
  4 +@rem Gradle startup script for Windows
  5 +@rem
  6 +@rem ##########################################################################
  7 +
  8 +@rem Set local scope for the variables with windows NT shell
  9 +if "%OS%"=="Windows_NT" setlocal
  10 +
  11 +set DIRNAME=%~dp0
  12 +if "%DIRNAME%" == "" set DIRNAME=.
  13 +set APP_BASE_NAME=%~n0
  14 +set APP_HOME=%DIRNAME%
  15 +
  16 +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
  17 +set DEFAULT_JVM_OPTS=
  18 +
  19 +@rem Find java.exe
  20 +if defined JAVA_HOME goto findJavaFromJavaHome
  21 +
  22 +set JAVA_EXE=java.exe
  23 +%JAVA_EXE% -version >NUL 2>&1
  24 +if "%ERRORLEVEL%" == "0" goto init
  25 +
  26 +echo.
  27 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
  28 +echo.
  29 +echo Please set the JAVA_HOME variable in your environment to match the
  30 +echo location of your Java installation.
  31 +
  32 +goto fail
  33 +
  34 +:findJavaFromJavaHome
  35 +set JAVA_HOME=%JAVA_HOME:"=%
  36 +set JAVA_EXE=%JAVA_HOME%/bin/java.exe
  37 +
  38 +if exist "%JAVA_EXE%" goto init
  39 +
  40 +echo.
  41 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
  42 +echo.
  43 +echo Please set the JAVA_HOME variable in your environment to match the
  44 +echo location of your Java installation.
  45 +
  46 +goto fail
  47 +
  48 +:init
  49 +@rem Get command-line arguments, handling Windows variants
  50 +
  51 +if not "%OS%" == "Windows_NT" goto win9xME_args
  52 +
  53 +:win9xME_args
  54 +@rem Slurp the command line arguments.
  55 +set CMD_LINE_ARGS=
  56 +set _SKIP=2
  57 +
  58 +:win9xME_args_slurp
  59 +if "x%~1" == "x" goto execute
  60 +
  61 +set CMD_LINE_ARGS=%*
  62 +
  63 +:execute
  64 +@rem Setup the command line
  65 +
  66 +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
  67 +
  68 +@rem Execute Gradle
  69 +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
  70 +
  71 +:end
  72 +@rem End local scope for the variables with windows NT shell
  73 +if "%ERRORLEVEL%"=="0" goto mainEnd
  74 +
  75 +:fail
  76 +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
  77 +rem the _cmd.exe /c_ return code!
  78 +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
  79 +exit /b 1
  80 +
  81 +:mainEnd
  82 +if "%OS%"=="Windows_NT" endlocal
  83 +
  84 +:omega
... ...
settings.gradle 0 → 100644
  1 +++ a/settings.gradle
... ... @@ -0,0 +1,2 @@
  1 +rootProject.name='androidDemo'
  2 +include ':app'
... ...