diff options
| author | Husam Salhab <47015061+hsalhab@users.noreply.github.com> | 2020-06-24 20:01:35 -0400 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-06-24 20:01:35 -0400 | 
| commit | c301252081ef31fe24160713d801722fc73e703b (patch) | |
| tree | 86f4d47d56a3945ab8f763e132b81aaaa5b2e2f8 /android | |
| parent | 4efe926122873adf8a598bb18b3eaf5d5a077cb4 (diff) | |
| parent | d9e0cde89b1e2c2483f91c656d6000f3b806181d (diff) | |
Merge pull request #3 from leonyjiang/master
[TMA-55] - Add react-native/typescript template
Diffstat (limited to 'android')
29 files changed, 885 insertions, 0 deletions
diff --git a/android/app/_BUCK b/android/app/_BUCK new file mode 100644 index 00000000..7047bb61 --- /dev/null +++ b/android/app/_BUCK @@ -0,0 +1,55 @@ +# To learn about Buck see [Docs](https://buckbuild.com/). +# To run your application with Buck: +# - install Buck +# - `npm start` - to start the packager +# - `cd android` +# - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname "CN=Android Debug,O=Android,C=US"` +# - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck +# - `buck install -r android/app` - compile, install and run application +# + +load(":build_defs.bzl", "create_aar_targets", "create_jar_targets") + +lib_deps = [] + +create_aar_targets(glob(["libs/*.aar"])) + +create_jar_targets(glob(["libs/*.jar"])) + +android_library( +    name = "all-libs", +    exported_deps = lib_deps, +) + +android_library( +    name = "app-code", +    srcs = glob([ +        "src/main/java/**/*.java", +    ]), +    deps = [ +        ":all-libs", +        ":build_config", +        ":res", +    ], +) + +android_build_config( +    name = "build_config", +    package = "com.frontend", +) + +android_resource( +    name = "res", +    package = "com.frontend", +    res = "src/main/res", +) + +android_binary( +    name = "app", +    keystore = "//android/keystores:debug", +    manifest = "src/main/AndroidManifest.xml", +    package_type = "debug", +    deps = [ +        ":app-code", +    ], +) diff --git a/android/app/build.gradle b/android/app/build.gradle new file mode 100644 index 00000000..73fc5431 --- /dev/null +++ b/android/app/build.gradle @@ -0,0 +1,225 @@ +apply plugin: "com.android.application" + +import com.android.build.OutputFile + +/** + * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets + * and bundleReleaseJsAndAssets). + * These basically call `react-native bundle` with the correct arguments during the Android build + * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the + * bundle directly from the development server. Below you can see all the possible configurations + * and their defaults. If you decide to add a configuration block, make sure to add it before the + * `apply from: "../../node_modules/react-native/react.gradle"` line. + * + * project.ext.react = [ + *   // the name of the generated asset file containing your JS bundle + *   bundleAssetName: "index.android.bundle", + * + *   // the entry file for bundle generation. If none specified and + *   // "index.android.js" exists, it will be used. Otherwise "index.js" is + *   // default. Can be overridden with ENTRY_FILE environment variable. + *   entryFile: "index.android.js", + * + *   // https://facebook.github.io/react-native/docs/performance#enable-the-ram-format + *   bundleCommand: "ram-bundle", + * + *   // whether to bundle JS and assets in debug mode + *   bundleInDebug: false, + * + *   // whether to bundle JS and assets in release mode + *   bundleInRelease: true, + * + *   // whether to bundle JS and assets in another build variant (if configured). + *   // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants + *   // The configuration property can be in the following formats + *   //         'bundleIn${productFlavor}${buildType}' + *   //         'bundleIn${buildType}' + *   // bundleInFreeDebug: true, + *   // bundleInPaidRelease: true, + *   // bundleInBeta: true, + * + *   // whether to disable dev mode in custom build variants (by default only disabled in release) + *   // for example: to disable dev mode in the staging build type (if configured) + *   devDisabledInStaging: true, + *   // The configuration property can be in the following formats + *   //         'devDisabledIn${productFlavor}${buildType}' + *   //         'devDisabledIn${buildType}' + * + *   // the root of your project, i.e. where "package.json" lives + *   root: "../../", + * + *   // where to put the JS bundle asset in debug mode + *   jsBundleDirDebug: "$buildDir/intermediates/assets/debug", + * + *   // where to put the JS bundle asset in release mode + *   jsBundleDirRelease: "$buildDir/intermediates/assets/release", + * + *   // where to put drawable resources / React Native assets, e.g. the ones you use via + *   // require('./image.png')), in debug mode + *   resourcesDirDebug: "$buildDir/intermediates/res/merged/debug", + * + *   // where to put drawable resources / React Native assets, e.g. the ones you use via + *   // require('./image.png')), in release mode + *   resourcesDirRelease: "$buildDir/intermediates/res/merged/release", + * + *   // by default the gradle tasks are skipped if none of the JS files or assets change; this means + *   // that we don't look at files in android/ or ios/ to determine whether the tasks are up to + *   // date; if you have any other folders that you want to ignore for performance reasons (gradle + *   // indexes the entire tree), add them here. Alternatively, if you have JS files in android/ + *   // for example, you might want to remove it from here. + *   inputExcludes: ["android/**", "ios/**"], + * + *   // override which node gets called and with what additional arguments + *   nodeExecutableAndArgs: ["node"], + * + *   // supply additional arguments to the packager + *   extraPackagerArgs: [] + * ] + */ + +project.ext.react = [ +    enableHermes: false,  // clean and rebuild if changing +] + +apply from: "../../node_modules/react-native/react.gradle" + +/** + * Set this to true to create two separate APKs instead of one: + *   - An APK that only works on ARM devices + *   - An APK that only works on x86 devices + * The advantage is the size of the APK is reduced by about 4MB. + * Upload all the APKs to the Play Store and people will download + * the correct one based on the CPU architecture of their device. + */ +def enableSeparateBuildPerCPUArchitecture = false + +/** + * Run Proguard to shrink the Java bytecode in release builds. + */ +def enableProguardInReleaseBuilds = false + +/** + * The preferred build flavor of JavaScriptCore. + * + * For example, to use the international variant, you can use: + * `def jscFlavor = 'org.webkit:android-jsc-intl:+'` + * + * The international variant includes ICU i18n library and necessary data + * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that + * give correct results when using with locales other than en-US.  Note that + * this variant is about 6MiB larger per architecture than default. + */ +def jscFlavor = 'org.webkit:android-jsc:+' + +/** + * Whether to enable the Hermes VM. + * + * This should be set on project.ext.react and mirrored here.  If it is not set + * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode + * and the benefits of using Hermes will therefore be sharply reduced. + */ +def enableHermes = project.ext.react.get("enableHermes", false); + +android { +    compileSdkVersion rootProject.ext.compileSdkVersion + +    compileOptions { +        sourceCompatibility JavaVersion.VERSION_1_8 +        targetCompatibility JavaVersion.VERSION_1_8 +    } + +    defaultConfig { +        applicationId "com.frontend" +        minSdkVersion rootProject.ext.minSdkVersion +        targetSdkVersion rootProject.ext.targetSdkVersion +        versionCode 1 +        versionName "1.0" +    } +    splits { +        abi { +            reset() +            enable enableSeparateBuildPerCPUArchitecture +            universalApk false  // If true, also generate a universal APK +            include "armeabi-v7a", "x86", "arm64-v8a", "x86_64" +        } +    } +    signingConfigs { +        debug { +            storeFile file('debug.keystore') +            storePassword 'android' +            keyAlias 'androiddebugkey' +            keyPassword 'android' +        } +    } +    buildTypes { +        debug { +            signingConfig signingConfigs.debug +        } +        release { +            // Caution! In production, you need to generate your own keystore file. +            // see https://facebook.github.io/react-native/docs/signed-apk-android. +            signingConfig signingConfigs.debug +            minifyEnabled enableProguardInReleaseBuilds +            proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" +        } +    } + +    packagingOptions { +        pickFirst "lib/armeabi-v7a/libc++_shared.so" +        pickFirst "lib/arm64-v8a/libc++_shared.so" +        pickFirst "lib/x86/libc++_shared.so" +        pickFirst "lib/x86_64/libc++_shared.so" +    } + +    // applicationVariants are e.g. debug, release +    applicationVariants.all { variant -> +        variant.outputs.each { output -> +            // For each separate APK per architecture, set a unique version code as described here: +            // https://developer.android.com/studio/build/configure-apk-splits.html +            def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4] +            def abi = output.getFilter(OutputFile.ABI) +            if (abi != null) {  // null for the universal-debug, universal-release variants +                output.versionCodeOverride = +                        versionCodes.get(abi) * 1048576 + defaultConfig.versionCode +            } + +        } +    } +} + +dependencies { +    implementation fileTree(dir: "libs", include: ["*.jar"]) +    //noinspection GradleDynamicVersion +    implementation "com.facebook.react:react-native:+"  // From node_modules + +    implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.0.0" + +    debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}") { +      exclude group:'com.facebook.fbjni' +    } + +    debugImplementation("com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}") { +        exclude group:'com.facebook.flipper' +    } + +    debugImplementation("com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}") { +        exclude group:'com.facebook.flipper' +    } + +    if (enableHermes) { +        def hermesPath = "../../node_modules/hermes-engine/android/"; +        debugImplementation files(hermesPath + "hermes-debug.aar") +        releaseImplementation files(hermesPath + "hermes-release.aar") +    } else { +        implementation jscFlavor +    } +} + +// Run this once to be able to run the application with BUCK +// puts all compile dependencies into folder libs for BUCK to use +task copyDownloadableDepsToLibs(type: Copy) { +    from configurations.compile +    into 'libs' +} + +apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project) diff --git a/android/app/build_defs.bzl b/android/app/build_defs.bzl new file mode 100644 index 00000000..fff270f8 --- /dev/null +++ b/android/app/build_defs.bzl @@ -0,0 +1,19 @@ +"""Helper definitions to glob .aar and .jar targets""" + +def create_aar_targets(aarfiles): +    for aarfile in aarfiles: +        name = "aars__" + aarfile[aarfile.rindex("/") + 1:aarfile.rindex(".aar")] +        lib_deps.append(":" + name) +        android_prebuilt_aar( +            name = name, +            aar = aarfile, +        ) + +def create_jar_targets(jarfiles): +    for jarfile in jarfiles: +        name = "jars__" + jarfile[jarfile.rindex("/") + 1:jarfile.rindex(".jar")] +        lib_deps.append(":" + name) +        prebuilt_jar( +            name = name, +            binary_jar = jarfile, +        ) diff --git a/android/app/debug.keystore b/android/app/debug.keystore Binary files differnew file mode 100644 index 00000000..364e105e --- /dev/null +++ b/android/app/debug.keystore diff --git a/android/app/proguard-rules.pro b/android/app/proguard-rules.pro new file mode 100644 index 00000000..11b02572 --- /dev/null +++ b/android/app/proguard-rules.pro @@ -0,0 +1,10 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +#   http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 00000000..fa26aa56 --- /dev/null +++ b/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8"?> +<manifest xmlns:android="http://schemas.android.com/apk/res/android" +    xmlns:tools="http://schemas.android.com/tools"> + +    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> + +    <application android:usesCleartextTraffic="true" tools:targetApi="28" tools:ignore="GoogleAppIndexingWarning" /> +</manifest> diff --git a/android/app/src/debug/java/com/frontend/ReactNativeFlipper.java b/android/app/src/debug/java/com/frontend/ReactNativeFlipper.java new file mode 100644 index 00000000..2f86dd03 --- /dev/null +++ b/android/app/src/debug/java/com/frontend/ReactNativeFlipper.java @@ -0,0 +1,72 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * <p>This source code is licensed under the MIT license found in the LICENSE file in the root + * directory of this source tree. + */ +package com.frontend; + +import android.content.Context; +import com.facebook.flipper.android.AndroidFlipperClient; +import com.facebook.flipper.android.utils.FlipperUtils; +import com.facebook.flipper.core.FlipperClient; +import com.facebook.flipper.plugins.crashreporter.CrashReporterPlugin; +import com.facebook.flipper.plugins.databases.DatabasesFlipperPlugin; +import com.facebook.flipper.plugins.fresco.FrescoFlipperPlugin; +import com.facebook.flipper.plugins.inspector.DescriptorMapping; +import com.facebook.flipper.plugins.inspector.InspectorFlipperPlugin; +import com.facebook.flipper.plugins.network.FlipperOkhttpInterceptor; +import com.facebook.flipper.plugins.network.NetworkFlipperPlugin; +import com.facebook.flipper.plugins.react.ReactFlipperPlugin; +import com.facebook.flipper.plugins.sharedpreferences.SharedPreferencesFlipperPlugin; +import com.facebook.react.ReactInstanceManager; +import com.facebook.react.bridge.ReactContext; +import com.facebook.react.modules.network.NetworkingModule; +import okhttp3.OkHttpClient; + +public class ReactNativeFlipper { +  public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) { +    if (FlipperUtils.shouldEnableFlipper(context)) { +      final FlipperClient client = AndroidFlipperClient.getInstance(context); + +      client.addPlugin(new InspectorFlipperPlugin(context, DescriptorMapping.withDefaults())); +      client.addPlugin(new ReactFlipperPlugin()); +      client.addPlugin(new DatabasesFlipperPlugin(context)); +      client.addPlugin(new SharedPreferencesFlipperPlugin(context)); +      client.addPlugin(CrashReporterPlugin.getInstance()); + +      NetworkFlipperPlugin networkFlipperPlugin = new NetworkFlipperPlugin(); +      NetworkingModule.setCustomClientBuilder( +          new NetworkingModule.CustomClientBuilder() { +            @Override +            public void apply(OkHttpClient.Builder builder) { +              builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin)); +            } +          }); +      client.addPlugin(networkFlipperPlugin); +      client.start(); + +      // Fresco Plugin needs to ensure that ImagePipelineFactory is initialized +      // Hence we run if after all native modules have been initialized +      ReactContext reactContext = reactInstanceManager.getCurrentReactContext(); +      if (reactContext == null) { +        reactInstanceManager.addReactInstanceEventListener( +            new ReactInstanceManager.ReactInstanceEventListener() { +              @Override +              public void onReactContextInitialized(ReactContext reactContext) { +                reactInstanceManager.removeReactInstanceEventListener(this); +                reactContext.runOnNativeModulesQueueThread( +                    new Runnable() { +                      @Override +                      public void run() { +                        client.addPlugin(new FrescoFlipperPlugin()); +                      } +                    }); +              } +            }); +      } else { +        client.addPlugin(new FrescoFlipperPlugin()); +      } +    } +  } +} diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml new file mode 100644 index 00000000..a1626a51 --- /dev/null +++ b/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,27 @@ +<manifest xmlns:android="http://schemas.android.com/apk/res/android" +  package="com.frontend"> + +    <uses-permission android:name="android.permission.INTERNET" /> + +    <application +      android:name=".MainApplication" +      android:label="@string/app_name" +      android:icon="@mipmap/ic_launcher" +      android:roundIcon="@mipmap/ic_launcher_round" +      android:allowBackup="false" +      android:theme="@style/AppTheme"> +      <activity +        android:name=".MainActivity" +        android:label="@string/app_name" +        android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode" +        android:launchMode="singleTask" +        android:windowSoftInputMode="adjustResize"> +        <intent-filter> +            <action android:name="android.intent.action.MAIN" /> +            <category android:name="android.intent.category.LAUNCHER" /> +        </intent-filter> +      </activity> +      <activity android:name="com.facebook.react.devsupport.DevSettingsActivity" /> +    </application> + +</manifest> diff --git a/android/app/src/main/java/com/frontend/MainActivity.java b/android/app/src/main/java/com/frontend/MainActivity.java new file mode 100644 index 00000000..2f830fd7 --- /dev/null +++ b/android/app/src/main/java/com/frontend/MainActivity.java @@ -0,0 +1,15 @@ +package com.frontend; + +import com.facebook.react.ReactActivity; + +public class MainActivity extends ReactActivity { + +  /** +   * Returns the name of the main component registered from JavaScript. This is used to schedule +   * rendering of the component. +   */ +  @Override +  protected String getMainComponentName() { +    return "Frontend"; +  } +} diff --git a/android/app/src/main/java/com/frontend/MainApplication.java b/android/app/src/main/java/com/frontend/MainApplication.java new file mode 100644 index 00000000..d18d08bd --- /dev/null +++ b/android/app/src/main/java/com/frontend/MainApplication.java @@ -0,0 +1,80 @@ +package com.frontend; + +import android.app.Application; +import android.content.Context; +import com.facebook.react.PackageList; +import com.facebook.react.ReactApplication; +import com.facebook.react.ReactInstanceManager; +import com.facebook.react.ReactNativeHost; +import com.facebook.react.ReactPackage; +import com.facebook.soloader.SoLoader; +import java.lang.reflect.InvocationTargetException; +import java.util.List; + +public class MainApplication extends Application implements ReactApplication { + +  private final ReactNativeHost mReactNativeHost = +      new ReactNativeHost(this) { +        @Override +        public boolean getUseDeveloperSupport() { +          return BuildConfig.DEBUG; +        } + +        @Override +        protected List<ReactPackage> getPackages() { +          @SuppressWarnings("UnnecessaryLocalVariable") +          List<ReactPackage> packages = new PackageList(this).getPackages(); +          // Packages that cannot be autolinked yet can be added manually here, for example: +          // packages.add(new MyReactNativePackage()); +          return packages; +        } + +        @Override +        protected String getJSMainModuleName() { +          return "index"; +        } +      }; + +  @Override +  public ReactNativeHost getReactNativeHost() { +    return mReactNativeHost; +  } + +  @Override +  public void onCreate() { +    super.onCreate(); +    SoLoader.init(this, /* native exopackage */ false); +    initializeFlipper(this, getReactNativeHost().getReactInstanceManager()); +  } + +  /** +   * Loads Flipper in React Native templates. Call this in the onCreate method with something like +   * initializeFlipper(this, getReactNativeHost().getReactInstanceManager()); +   * +   * @param context +   * @param reactInstanceManager +   */ +  private static void initializeFlipper( +      Context context, ReactInstanceManager reactInstanceManager) { +    if (BuildConfig.DEBUG) { +      try { +        /* +         We use reflection here to pick up the class that initializes Flipper, +        since Flipper library is not available in release mode +        */ +        Class<?> aClass = Class.forName("com.frontend.ReactNativeFlipper"); +        aClass +            .getMethod("initializeFlipper", Context.class, ReactInstanceManager.class) +            .invoke(null, context, reactInstanceManager); +      } catch (ClassNotFoundException e) { +        e.printStackTrace(); +      } catch (NoSuchMethodException e) { +        e.printStackTrace(); +      } catch (IllegalAccessException e) { +        e.printStackTrace(); +      } catch (InvocationTargetException e) { +        e.printStackTrace(); +      } +    } +  } +} diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png Binary files differnew file mode 100644 index 00000000..a2f59082 --- /dev/null +++ b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png Binary files differnew file mode 100644 index 00000000..1b523998 --- /dev/null +++ b/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png Binary files differnew file mode 100644 index 00000000..ff10afd6 --- /dev/null +++ b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png Binary files differnew file mode 100644 index 00000000..115a4c76 --- /dev/null +++ b/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png Binary files differnew file mode 100644 index 00000000..dcd3cd80 --- /dev/null +++ b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png Binary files differnew file mode 100644 index 00000000..459ca609 --- /dev/null +++ b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png Binary files differnew file mode 100644 index 00000000..8ca12fe0 --- /dev/null +++ b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png Binary files differnew file mode 100644 index 00000000..8e19b410 --- /dev/null +++ b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png Binary files differnew file mode 100644 index 00000000..b824ebdd --- /dev/null +++ b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png Binary files differnew file mode 100644 index 00000000..4c19a13c --- /dev/null +++ b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml new file mode 100644 index 00000000..73cdf62c --- /dev/null +++ b/android/app/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ +<resources> +    <string name="app_name">Frontend</string> +</resources> diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml new file mode 100644 index 00000000..62fe59fa --- /dev/null +++ b/android/app/src/main/res/values/styles.xml @@ -0,0 +1,9 @@ +<resources> + +    <!-- Base application theme. --> +    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> +        <!-- Customize your theme here. --> +        <item name="android:textColor">#000000</item> +    </style> + +</resources> diff --git a/android/build.gradle b/android/build.gradle new file mode 100644 index 00000000..5d5d188b --- /dev/null +++ b/android/build.gradle @@ -0,0 +1,38 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. + +buildscript { +    ext { +        buildToolsVersion = "28.0.3" +        minSdkVersion = 16 +        compileSdkVersion = 28 +        targetSdkVersion = 28 +    } +    repositories { +        google() +        jcenter() +    } +    dependencies { +        classpath("com.android.tools.build:gradle:3.5.2") + +        // NOTE: Do not place your application dependencies here; they belong +        // in the individual module build.gradle files +    } +} + +allprojects { +    repositories { +        mavenLocal() +        maven { +            // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm +            url("$rootDir/../node_modules/react-native/android") +        } +        maven { +            // Android JSC is installed from npm +            url("$rootDir/../node_modules/jsc-android/dist") +        } + +        google() +        jcenter() +        maven { url 'https://www.jitpack.io' } +    } +} diff --git a/android/gradle.properties b/android/gradle.properties new file mode 100644 index 00000000..1bbc8cc2 --- /dev/null +++ b/android/gradle.properties @@ -0,0 +1,28 @@ +# Project-wide Gradle settings. + +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. + +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html + +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +# Default value: -Xmx10248m -XX:MaxPermSize=256m +# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 + +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true + +# AndroidX package structure to make it clearer which packages are bundled with the +# Android operating system, and which are packaged with your app's APK +# https://developer.android.com/topic/libraries/support-library/androidx-rn +android.useAndroidX=true +# Automatically convert third-party libraries to use AndroidX +android.enableJetifier=true + +# Version of flipper SDK to use with React Native +FLIPPER_VERSION=0.33.1 diff --git a/android/gradle/wrapper/gradle-wrapper.jar b/android/gradle/wrapper/gradle-wrapper.jar Binary files differnew file mode 100644 index 00000000..5c2d1cf0 --- /dev/null +++ b/android/gradle/wrapper/gradle-wrapper.jar diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000..1ba7206f --- /dev/null +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-6.0.1-all.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/android/gradlew b/android/gradlew new file mode 100755 index 00000000..83f2acfd --- /dev/null +++ b/android/gradlew @@ -0,0 +1,188 @@ +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +#      https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +## +##  Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do +    ls=`ls -ld "$PRG"` +    link=`expr "$ls" : '.*-> \(.*\)$'` +    if expr "$link" : '/.*' > /dev/null; then +        PRG="$link" +    else +        PRG=`dirname "$PRG"`"/$link" +    fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { +    echo "$*" +} + +die () { +    echo +    echo "$*" +    echo +    exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in +  CYGWIN* ) +    cygwin=true +    ;; +  Darwin* ) +    darwin=true +    ;; +  MINGW* ) +    msys=true +    ;; +  NONSTOP* ) +    nonstop=true +    ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then +    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then +        # IBM's JDK on AIX uses strange locations for the executables +        JAVACMD="$JAVA_HOME/jre/sh/java" +    else +        JAVACMD="$JAVA_HOME/bin/java" +    fi +    if [ ! -x "$JAVACMD" ] ; then +        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +    fi +else +    JAVACMD="java" +    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then +    MAX_FD_LIMIT=`ulimit -H -n` +    if [ $? -eq 0 ] ; then +        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then +            MAX_FD="$MAX_FD_LIMIT" +        fi +        ulimit -n $MAX_FD +        if [ $? -ne 0 ] ; then +            warn "Could not set maximum file descriptor limit: $MAX_FD" +        fi +    else +        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" +    fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then +    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then +    APP_HOME=`cygpath --path --mixed "$APP_HOME"` +    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` +    JAVACMD=`cygpath --unix "$JAVACMD"` + +    # We build the pattern for arguments to be converted via cygpath +    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` +    SEP="" +    for dir in $ROOTDIRSRAW ; do +        ROOTDIRS="$ROOTDIRS$SEP$dir" +        SEP="|" +    done +    OURCYGPATTERN="(^($ROOTDIRS))" +    # Add a user-defined pattern to the cygpath arguments +    if [ "$GRADLE_CYGPATTERN" != "" ] ; then +        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" +    fi +    # Now convert the arguments - kludge to limit ourselves to /bin/sh +    i=0 +    for arg in "$@" ; do +        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` +        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option + +        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition +            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` +        else +            eval `echo args$i`="\"$arg\"" +        fi +        i=$((i+1)) +    done +    case $i in +        (0) set -- ;; +        (1) set -- "$args0" ;; +        (2) set -- "$args0" "$args1" ;; +        (3) set -- "$args0" "$args1" "$args2" ;; +        (4) set -- "$args0" "$args1" "$args2" "$args3" ;; +        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; +        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; +        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; +        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; +        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; +    esac +fi + +# Escape application args +save () { +    for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done +    echo " " +} +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then +  cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/android/gradlew.bat b/android/gradlew.bat new file mode 100644 index 00000000..24467a14 --- /dev/null +++ b/android/gradlew.bat @@ -0,0 +1,100 @@ +@rem
 +@rem Copyright 2015 the original author or authors.
 +@rem
 +@rem Licensed under the Apache License, Version 2.0 (the "License");
 +@rem you may not use this file except in compliance with the License.
 +@rem You may obtain a copy of the License at
 +@rem
 +@rem      https://www.apache.org/licenses/LICENSE-2.0
 +@rem
 +@rem Unless required by applicable law or agreed to in writing, software
 +@rem distributed under the License is distributed on an "AS IS" BASIS,
 +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +@rem See the License for the specific language governing permissions and
 +@rem limitations under the License.
 +@rem
 +
 +@if "%DEBUG%" == "" @echo off
 +@rem ##########################################################################
 +@rem
 +@rem  Gradle startup script for Windows
 +@rem
 +@rem ##########################################################################
 +
 +@rem Set local scope for the variables with windows NT shell
 +if "%OS%"=="Windows_NT" setlocal
 +
 +set DIRNAME=%~dp0
 +if "%DIRNAME%" == "" set DIRNAME=.
 +set APP_BASE_NAME=%~n0
 +set APP_HOME=%DIRNAME%
 +
 +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
 +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
 +
 +@rem Find java.exe
 +if defined JAVA_HOME goto findJavaFromJavaHome
 +
 +set JAVA_EXE=java.exe
 +%JAVA_EXE% -version >NUL 2>&1
 +if "%ERRORLEVEL%" == "0" goto init
 +
 +echo.
 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
 +echo.
 +echo Please set the JAVA_HOME variable in your environment to match the
 +echo location of your Java installation.
 +
 +goto fail
 +
 +:findJavaFromJavaHome
 +set JAVA_HOME=%JAVA_HOME:"=%
 +set JAVA_EXE=%JAVA_HOME%/bin/java.exe
 +
 +if exist "%JAVA_EXE%" goto init
 +
 +echo.
 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
 +echo.
 +echo Please set the JAVA_HOME variable in your environment to match the
 +echo location of your Java installation.
 +
 +goto fail
 +
 +:init
 +@rem Get command-line arguments, handling Windows variants
 +
 +if not "%OS%" == "Windows_NT" goto win9xME_args
 +
 +:win9xME_args
 +@rem Slurp the command line arguments.
 +set CMD_LINE_ARGS=
 +set _SKIP=2
 +
 +:win9xME_args_slurp
 +if "x%~1" == "x" goto execute
 +
 +set CMD_LINE_ARGS=%*
 +
 +:execute
 +@rem Setup the command line
 +
 +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
 +
 +@rem Execute Gradle
 +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
 +
 +:end
 +@rem End local scope for the variables with windows NT shell
 +if "%ERRORLEVEL%"=="0" goto mainEnd
 +
 +:fail
 +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
 +rem the _cmd.exe /c_ return code!
 +if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
 +exit /b 1
 +
 +:mainEnd
 +if "%OS%"=="Windows_NT" endlocal
 +
 +:omega
 diff --git a/android/settings.gradle b/android/settings.gradle new file mode 100644 index 00000000..5f3dacb8 --- /dev/null +++ b/android/settings.gradle @@ -0,0 +1,3 @@ +rootProject.name = 'Frontend' +apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings) +include ':app'  | 
