React-native-onesignal: ๋ชจ๋“  Android์—์„œ RN0.60๊ณผ ์ถฉ๋Œ

์— ๋งŒ๋“  2019๋…„ 09์›” 23์ผ  ยท  43์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: OneSignal/react-native-onesignal

1. ๋‹ค์Œ ์ •๋ณด๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š์œผ๋ฉด ์กฐ์‚ฌ ์—†์ด ๋ฌธ์ œ๊ฐ€ ์ข…๋ฃŒ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 2. ๋‹ต๋ณ€์„ ์œ„ํ•ด ๊ธฐ์กด ๋ฌธ์ œ ๊ฒ€์ƒ‰: https://goo.gl/pspQNY 3. ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ ๋ฌธ์„œ ์ฐธ์กฐ: https://goo .gl/BDcfZZ 4. ๊ธฐ์—ฌ ๊ฐ€์ด๋“œ๋ผ์ธ ๋ณด๊ธฐ: https://goo.gl/h19DnX

์„ค๋ช…:

(์—ฌ๊ธฐ์— ์„ค๋ช…)

ํ™˜๊ฒฝ

System:
    OS: macOS 10.14.6
    CPU: (6) x64 Intel(R) Core(TM) i5-8500B CPU @ 3.00GHz
    Memory: 6.63 GB / 32.00 GB
    Shell: 5.3 - /bin/zsh
  Binaries:
    Node: 10.16.1 - ~/.nvm/versions/node/v10.16.1/bin/node
    Yarn: 1.17.3 - /usr/local/bin/yarn
    npm: 6.9.0 - ~/.nvm/versions/node/v10.16.1/bin/npm
  SDKs:
    iOS SDK:
      Platforms: iOS 13.0, DriverKit 19.0, macOS 10.15, tvOS 13.0, watchOS 6.0
    Android SDK:
      API Levels: 23, 25, 27, 28, 29
      Build Tools: 25.0.2, 25.0.3, 28.0.3, 29.0.1, 29.0.2
      System Images: android-28 | Google APIs Intel x86 Atom, android-29 | Google APIs Intel x86 Atom
  IDEs:
    Android Studio: 3.5 AI-191.8026.42.35.5791312
    Xcode: 11.0/11A419c - /usr/bin/xcodebuild
  npmPackages:
    react: 16.8.6 => 16.8.6
    react-native: 0.60.5 => 0.60.5
[email protected]

Android ์•ฑ ์‹œ์ž‘์—์„œ ๋‚ด ์•ฑ์ด ๋ฉ”์‹œ์ง€๋‚˜ ์ฐฝ ์—†์ด ์ถฉ๋Œํ•ฉ๋‹ˆ๋‹ค.

adb logcat :

09-23 17:06:37.900 8388 8388 D AndroidRuntime: VM ์ข…๋ฃŒ
09-23 17:06:37.901 8388 8388 E Android๋Ÿฐํƒ€์ž„: ์น˜๋ช…์ ์ธ ์˜ˆ์™ธ: ๊ธฐ๋ณธ
09-23 17:06:37.901 8388 8388 E AndroidRuntime: ํ”„๋กœ์„ธ์Šค: com.macroactive, PID: 8388
09-23 17:06:37.901 8388 8388 E AndroidRuntime: java.lang.NoClassDefFoundError: ํ•ด๊ฒฐ ์‹คํŒจ: Lcom/google/android/gms/common/internal/zzbq;
09-23 17:06:37.901 8388 8388 E AndroidRuntime: com.google.firebase.provider.FirebaseInitProvider.attachInfo(์•Œ ์ˆ˜ ์—†๋Š” ์†Œ์Šค)
09-23 17:06:37.901 8388 8388 E AndroidRuntime: android.app.ActivityThread.installProvider(ActivityThread.java:5153)์—์„œ
09-23 17:06:37.901 8388 8388 E AndroidRuntime: android.app.ActivityThread.installContentProviders(ActivityThread.java:4748)์—์„œ
09-23 17:06:37.901 8388 8388 E AndroidRuntime: android.app.ActivityThread.handleBindApplication(ActivityThread.java:4688)์—์„œ
09-23 17:06:37.901 8388 8388 E AndroidRuntime: android.app.ActivityThread.-wrap1(ActivityThread.java)์—์„œ
09-23 17:06:37.901 8388 8388 E AndroidRuntime: android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405)์—์„œ
09-23 17:06:37.901 8388 8388 E AndroidRuntime: android.os.Handler.dispatchMessage(Handler.java:102)์—์„œ
09-23 17:06:37.901 8388 8388 E AndroidRuntime: android.os.Looper.loop(Looper.java:148)์—์„œ
09-23 17:06:37.901 8388 8388 E AndroidRuntime: android.app.ActivityThread.main(ActivityThread.java:5417)์—์„œ
09-23 17:06:37.901 8388 8388 E AndroidRuntime: java.lang.reflect.Method.invoke(๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์„œ๋“œ)์—์„œ
09-23 17:06:37.901 8388 8388 E AndroidRuntime: com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
09-23 17:06:37.901 8388 8388 E AndroidRuntime: com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)์—์„œ
09-23 17:06:37.901 8388 8388 E AndroidRuntime: ์›์ธ: java.lang.ClassNotFoundException: ๊ฒฝ๋กœ์—์„œ "com.google.android.gms.common.internal.zzbq" ํด๋ž˜์Šค๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Œ: DexPathList[[zip ํŒŒ์ผ "/data/app/com.macroactive-2/base.apk"],nativeLibraryDirectories=[/data/app/com.macroactive-2/lib/arm, /data/app/com.macroactive-2/base.apk !/lib/armeabi-v7a, /vendor/lib, /system/lib]]
09-23 17:06:37.901 8388 8388 E AndroidRuntime: dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)์—์„œ
09-23 17:06:37.901 8388 8388 E AndroidRuntime: java.lang.ClassLoader.loadClass(ClassLoader.java:511)์—์„œ
09-23 17:06:37.901 8388 8388 E AndroidRuntime: java.lang.ClassLoader.loadClass(ClassLoader.java:469)์—์„œ
09-23 17:06:37.901 8388 8388 E Android๋Ÿฐํƒ€์ž„: ... 12 more
09-23 17:06:37.901 8388 8388 E AndroidRuntime: ์–ต์ œ: java.lang.ClassNotFoundException: com.google.android.gms.common.internal.zzbq
09-23 17:06:37.901 8388 8388 E AndroidRuntime: java.lang.Class.classForName์—์„œ(๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์„œ๋“œ)
09-23 17:06:37.901 8388 8388 E AndroidRuntime: java.lang.BootClassLoader.findClass(ClassLoader.java:781)์—์„œ
09-23 17:06:37.901 8388 8388 E AndroidRuntime: java.lang.BootClassLoader.loadClass(ClassLoader.java:841)์—์„œ
09-23 17:06:37.901 8388 8388 E AndroidRuntime: java.lang.ClassLoader.loadClass(ClassLoader.java:504)์—์„œ
09-23 17:06:37.901 8388 8388 E Android๋Ÿฐํƒ€์ž„: ... 13 more
09-23 17:06:37.901 8388 8388 E AndroidRuntime: ์›์ธ: java.lang.NoClassDefFoundError: ๋ถ€ํŠธ ํด๋ž˜์Šค ๋กœ๋”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ž˜์Šค๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์Šคํƒ ์ถ”์  ์—†์Œ

์ƒˆ๋กœ์šด ์•ฑ์—์„œ ์žฌํ˜„ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์•„๋งˆ๋„ ๋ชจ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๊ด€๋ จ์ด ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. "com/google/android/gms/common/internal/zzbq"์—์„œ ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ๋ฅผ ์ฐพ์•˜์ง€๋งŒ ์œ ์šฉํ•œ ๊ฒƒ์„ ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.
์–ด๋””์„œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์•ผ ํ•˜๋Š”์ง€ ์•Œ๋ ค์ฃผ์„ธ์š”?

Help Wanted

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋™์ผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐ˜์‘ ๋„ค์ดํ‹ฐ๋ธŒ 0.60.5 ์‚ฌ์šฉ [email protected]์„

๋ชจ๋“  43 ๋Œ“๊ธ€

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋‚ด ์•ฑ๋„ Android์—์„œ ์•Œ๋ฆผ์„ ๋ฐ›์„ ๋•Œ ์ถฉ๋Œํ•ฉ๋‹ˆ๋‹ค. mi note 4(android 7.0, RN 0.60.3, react-native-onesignal 3.3.3)์—์„œ ํ…Œ์ŠคํŠธํ–ˆ์Šต๋‹ˆ๋‹ค.

@SAHITYASAI adb logcat ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

Screenshot_2019-09-22-17-55-21-844_com miui bugreport
์ด๊ฒƒ์€ ์•ฑ์ด ์ถฉ๋Œํ•  ๋•Œ๋งˆ๋‹ค ๋ฐœ์ƒํ•˜๋Š” ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค.

๋™์ผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐ˜์‘ ๋„ค์ดํ‹ฐ๋ธŒ 0.60.5 ์‚ฌ์šฉ [email protected]์„

1.1๋‹จ๊ณ„์—์„œ ๊ธฐ๋กํ•œ app/build.gradle ์ƒ๋‹จ์— onesignal-gradle-plugin ๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
https://documentation.onesignal.com/docs/android-sdk-setup#section -1-gradle-setup

์ด๊ฒƒ์„ ๋†“์น˜๊ฑฐ๋‚˜ ์ž˜๋ชป๋œ build.gradle ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ด ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜์˜ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

๋‚ด app/build.gradle

buildscript {
    repositories {
        maven { url 'https://plugins.gradle.org/m2/'}
    }
    dependencies {
        classpath 'gradle.plugin.com.onesignal:onesignal-gradle-plugin:[0.12.4, 0.99.99]'
    }
}
apply plugin: 'com.onesignal.androidsdk.onesignal-gradle-plugin'

repositories {
    maven { url 'https://maven.google.com' }
}

apply plugin: "com.android.application"

import com.android.build.OutputFile

btw, ๋‚˜๋Š” ๋‹จ์ง€ ์ „์— ์‚ฌ์šฉ

apply plugin: "com.onesignal.androidsdk.onesignal-gradle-plugin"

react-native 0.59 ๋ฐ react-native-onesignal์šฉ: 3.2.12

์„ค์น˜ ๊ฐ€์ด๋“œ์— ์„ค๋ช…๋œ ๋Œ€๋กœ ๋ชจ๋“  ๊ฒƒ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ผ์ธ ์ ์šฉ ํ”Œ๋Ÿฌ๊ทธ์ธ: 'com.onesignal.androidsdk.onesignal-gradle-plugin'์œผ๋กœ ์ธํ•ด ๋‚ด ์•ฑ ๋นŒ๋“œ๊ฐ€ ์ด ์˜ค๋ฅ˜์™€ ํ•จ๊ป˜ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

  • ๋ฌธ์ œ: ๋ฃจํŠธ ํ”„๋กœ์ ํŠธ ''์„(๋ฅผ) ๊ตฌ์„ฑํ•˜๋Š” ์ค‘์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. > org.gradle.api.Project ์œ ํ˜•์˜ ๋ฃจํŠธ ํ”„๋กœ์ ํŠธ ''์— ๋Œ€ํ•ด ์•Œ ์ˆ˜ ์—†๋Š” ์†์„ฑ 'android'๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."

๊ทธ๋ž˜์„œ Google์—์„œ ์†”๋ฃจ์…˜์„ ์ฐพ์„ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ์ค„์— ์ฃผ์„์„ ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค.
๋˜ํ•œ ๋ˆ„๊ตฐ๊ฐ€ onesignal REST API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์˜ˆ์•ฝ๋œ ์•Œ๋ฆผ์„ ๋ณด๋‚ด๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์˜ˆ์ œ ์ฝ”๋“œ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฏธ๋ฆฌ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

1.1๋‹จ๊ณ„์—์„œ ๊ธฐ๋กํ•œ app/build.gradle ์ƒ๋‹จ์— onesignal-gradle-plugin ๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
https://documentation.onesignal.com/docs/android-sdk-setup#section -1-gradle-setup

์ด๊ฒƒ์„ ๋†“์น˜๊ฑฐ๋‚˜ ์ž˜๋ชป๋œ build.gradle ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ด ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜์˜ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

์˜ˆ ์ถ”๊ฐ€ํ–ˆ๋Š”๋ฐ ๋™์ผํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋‚ด app/build.gradle

buildscript {
    repositories {
        maven { url 'https://plugins.gradle.org/m2/'}
    }
    dependencies {
        classpath 'gradle.plugin.com.onesignal:onesignal-gradle-plugin:[0.12.4, 0.99.99]'
    }
}
apply plugin: 'com.onesignal.androidsdk.onesignal-gradle-plugin'

repositories {
    maven { url 'https://maven.google.com' }
}

apply plugin: "com.android.application"

import com.android.build.OutputFile

๋‚ด๊ฐ€๋ณด๊ธฐ ์—”! ๋‹น์‹ ์€ ๊ทธ๊ฒƒ์„ ์ž˜๋ชปํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค! app/build.gradle ํŒŒ์ผ์— ๋Œ€ํ•œ ์ „๋ถ€๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ์ ์šฉ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ๊ฑฐ๊ธฐ์—๋งŒ ๊ฐ€๊ณ  ๋‚˜๋จธ์ง€ ํด๋ž˜์Šค ๊ฒฝ๋กœ, maven url ๋ฐ gradle ํ”Œ๋Ÿฌ๊ทธ์ธ repo url์€ ํ”„๋กœ์ ํŠธ build.gradle์— ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค.

@indapublic ๋ฐฉ๊ธˆ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค! ๋‚˜๋Š” ๊ฐ™์€ ๋ฒ„๊ทธ๊ฐ€ ์žˆ์—ˆ๋‹ค! ์ด๊ฒƒ์„ ๊ฒŒ์‹œ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.! ๋‹น์‹ ์ด ์—ฌ์ „ํžˆ ์ฐพ๊ณ  ์žˆ๋‹ค๋ฉด ๋‚ด๊ฐ€ ์—ฐ๋ฝํ•  ์ˆ˜ ์žˆ๋„๋ก ์—ด๋ ค ์žˆ์Šต๋‹ˆ๋‹ค!

์•ˆ๋…•ํ•˜์‹ญ๋‹ˆ๊นŒ,
ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ์ตœ์‹  ๋ฒ„์ „(3.4.1)์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๊ณ  ๋‹ค์‹œ ์‹œ๋„ํ•˜์‹ญ์‹œ์˜ค.

@SAHITYASAI ์—ฌ๊ธฐ๋ฅผ ๋ณด์„ธ์š”

@indapublic ๋ฐฉ๊ธˆ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค! ๋‚˜๋Š” ๊ฐ™์€ ๋ฒ„๊ทธ๊ฐ€ ์žˆ์—ˆ๋‹ค! ์ด๊ฒƒ์„ ๊ฒŒ์‹œ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.! ๋‹น์‹ ์ด ์—ฌ์ „ํžˆ ์ฐพ๊ณ  ์žˆ๋‹ค๋ฉด ๋‚ด๊ฐ€ ์—ฐ๋ฝํ•  ์ˆ˜ ์žˆ๋„๋ก ์—ด๋ ค ์žˆ์Šต๋‹ˆ๋‹ค!

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค, ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!!

ํ”„๋กœ์ ํŠธ ํด๋” "app/build.gradle" ๋‚ด๋ถ€์—์„œ ์ด๊ฒƒ์„ ํŒŒ์ผ ์ƒ๋‹จ์— ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ {
์ €์žฅ์†Œ {
maven { url ' https://plugins.gradle.org/m2/ ' } // Gradle ํ”Œ๋Ÿฌ๊ทธ์ธ ํฌํ„ธ
}
์ข…์†์„ฑ {
ํด๋ž˜์Šค ๊ฒฝ๋กœ 'gradle.plugin.com. onesignal:onesignal-gradle-plugin :[0.12.1, 0.99.99]'
}
}

ํ”Œ๋Ÿฌ๊ทธ์ธ ์ ์šฉ: 'com.onesignal.androidsdk.onesignal-gradle-plugin'

ํ”Œ๋Ÿฌ๊ทธ์ธ ์ ์šฉ: "com.android.application"

com.android.build.OutputFile ๊ฐ€์ ธ์˜ค๊ธฐ

ํšจ๊ณผ๊ฐ€์žˆ๋‹ค!

๋“ฃ๊ธฐ ์ข‹์€!

@indapublic ๋ฐฉ๊ธˆ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค! ๋‚˜๋Š” ๊ฐ™์€ ๋ฒ„๊ทธ๊ฐ€ ์žˆ์—ˆ๋‹ค! ์ด๊ฒƒ์„ ๊ฒŒ์‹œ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.! ๋‹น์‹ ์ด ์—ฌ์ „ํžˆ ์ฐพ๊ณ  ์žˆ๋‹ค๋ฉด ๋‚ด๊ฐ€ ์—ฐ๋ฝํ•  ์ˆ˜ ์žˆ๋„๋ก ์—ด๋ ค ์žˆ์Šต๋‹ˆ๋‹ค!

build.gradle ๋ณด์—ฌ์ฃผ์„ธ์š”

@indapublic ๋ฐฉ๊ธˆ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค! ๋‚˜๋Š” ๊ฐ™์€ ๋ฒ„๊ทธ๊ฐ€ ์žˆ์—ˆ๋‹ค! ์ด๊ฒƒ์„ ๊ฒŒ์‹œ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.! ๋‹น์‹ ์ด ์—ฌ์ „ํžˆ ์ฐพ๊ณ  ์žˆ๋‹ค๋ฉด ๋‚ด๊ฐ€ ์—ฐ๋ฝํ•  ์ˆ˜ ์žˆ๋„๋ก ์—ด๋ ค ์žˆ์Šต๋‹ˆ๋‹ค!

build.gradle ๋ณด์—ฌ์ฃผ์„ธ์š”

๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ {
์ €์žฅ์†Œ {
maven { url ' https://plugins.gradle.org/m2/ ' } // Gradle ํ”Œ๋Ÿฌ๊ทธ์ธ ํฌํ„ธ
}
์ข…์†์„ฑ {
ํด๋ž˜์Šค ๊ฒฝ๋กœ 'gradle.plugin.com. onesignal:onesignal-gradle-plugin :[0.12.1, 0.99.99]'
}
}

ํ”Œ๋Ÿฌ๊ทธ์ธ ์ ์šฉ: 'com.onesignal.androidsdk.onesignal-gradle-plugin'

ํ”Œ๋Ÿฌ๊ทธ์ธ ์ ์šฉ: "com.android.application"

com.android.build.OutputFile ๊ฐ€์ ธ์˜ค๊ธฐ

/**

  • react.gradle ํŒŒ์ผ์€ ๊ฐ ๋นŒ๋“œ ๋ณ€ํ˜•์— ๋Œ€ํ•œ ์ž‘์—…์„ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: bundleDebugJsAndAssets
  • ๋ฐ bundleReleaseJsAndAssets).
  • ์ด๋“ค์€ ๊ธฐ๋ณธ์ ์œผ๋กœ Android ๋นŒ๋“œ ์ค‘์— ์˜ฌ๋ฐ”๋ฅธ ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ react-native bundle ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
  • ์ฃผ๊ธฐ. ๊ธฐ๋ณธ์ ์œผ๋กœ bundleDebugJsAndAssets๋Š” ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค. ๋””๋ฒ„๊ทธ/๊ฐœ๋ฐœ ๋ชจ๋“œ์—์„œ ๋กœ๋“œํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
  • ๊ฐœ๋ฐœ ์„œ๋ฒ„์—์„œ ์ง์ ‘ ๋ฒˆ๋“ค. ์•„๋ž˜์—์„œ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ตฌ์„ฑ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ๊ทธ๋“ค์˜ ๊ธฐ๋ณธ๊ฐ’. ๊ตฌ์„ฑ ๋ธ”๋ก์„ ์ถ”๊ฐ€ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค๋ฉด ๊ตฌ์„ฑ ๋ธ”๋ก ์•ž์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • apply from: "../../node_modules/react-native/react.gradle" ๋ผ์ธ.
    *
  • project.ext.react = [
  • // JS ๋ฒˆ๋“ค์„ ํฌํ•จํ•˜๋Š” ์ƒ์„ฑ๋œ ์ž์‚ฐ ํŒŒ์ผ์˜ ์ด๋ฆ„
  • ๋ฒˆ๋“ค ์ž์‚ฐ ์ด๋ฆ„: "index.android.bundle",
    *
  • // ๋ฒˆ๋“ค ์ƒ์„ฑ์„ ์œ„ํ•œ ์—”ํŠธ๋ฆฌ ํŒŒ์ผ
  • ํ•ญ๋ชฉ ํŒŒ์ผ: "index.android.js",
    *
  • // https://facebook.github.io/react-native/docs/performance#enable -the-ram-format
  • ๋ฒˆ๋“ค ๋ช…๋ น: "๋žจ ๋ฒˆ๋“ค",
    *
  • // ๋””๋ฒ„๊ทธ ๋ชจ๋“œ์—์„œ JS์™€ ์ž์‚ฐ์„ ๋ฒˆ๋“คํ• ์ง€ ์—ฌ๋ถ€
  • ๋ฒˆ๋“ค์ธ๋””๋ฒ„๊ทธ: ๊ฑฐ์ง“,
    *
  • // ๋ฆด๋ฆฌ์Šค ๋ชจ๋“œ์—์„œ JS์™€ ์ž์‚ฐ์„ ๋ฒˆ๋“คํ• ์ง€ ์—ฌ๋ถ€
  • BundleInRelease: ์ฐธ,
    *
  • // ๋‹ค๋ฅธ ๋นŒ๋“œ ๋ณ€ํ˜•์—์„œ JS ๋ฐ ์ž์‚ฐ์„ ๋ฒˆ๋“คํ• ์ง€ ์—ฌ๋ถ€(๊ตฌ์„ฑ๋œ ๊ฒฝ์šฐ).
  • // http://tools.android.com/tech-docs/new-build-system/user-guide#TOC -Build-Variants ์ฐธ์กฐ
  • // ๊ตฌ์„ฑ ์†์„ฑ์€ ๋‹ค์Œ ํ˜•์‹์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • // 'bundleIn${productFlavor}${๋นŒ๋“œ ์œ ํ˜•}'
  • // '๋ฒˆ๋“ค์ธ${๋นŒ๋“œํƒ€์ž…}'
  • // bundleInFreeDebug: ์ฐธ,
  • // bundleInPaidRelease: ์ฐธ,
  • // ๋ฒˆ๋“ค์ธ๋ฒ ํƒ€: ์ฐธ,
    *
  • // ์‚ฌ์šฉ์ž ์ •์˜ ๋นŒ๋“œ ๋ณ€ํ˜•์—์„œ ๊ฐœ๋ฐœ ๋ชจ๋“œ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ• ์ง€ ์—ฌ๋ถ€(๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฆด๋ฆฌ์Šค์—์„œ๋งŒ ๋น„ํ™œ์„ฑํ™”๋จ)
  • // ์˜ˆ: ์Šคํ…Œ์ด์ง• ๋นŒ๋“œ ์œ ํ˜•์—์„œ ๊ฐœ๋ฐœ ๋ชจ๋“œ ๋น„ํ™œ์„ฑํ™”(๊ตฌ์„ฑ๋œ ๊ฒฝ์šฐ)
  • devDisabledInStaging: ์ฐธ,
  • // ๊ตฌ์„ฑ ์†์„ฑ์€ ๋‹ค์Œ ํ˜•์‹์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • // 'devDisabledIn${productFlavor}${๋นŒ๋“œ ์œ ํ˜•}'
  • // 'devDisabledIn${๋นŒ๋“œ ์œ ํ˜•}'
    *
  • // ํ”„๋กœ์ ํŠธ์˜ ๋ฃจํŠธ, ์ฆ‰ "package.json"์ด ์žˆ๋Š” ์œ„์น˜
  • ๋ฃจํŠธ: "../../",
    *
  • // ๋””๋ฒ„๊ทธ ๋ชจ๋“œ์—์„œ JS ๋ฒˆ๋“ค ์ž์‚ฐ์„ ๋„ฃ์„ ์œ„์น˜
  • jsBundleDirDebug: "$buildDir/intermediates/assets/debug",
    *
  • // ๋ฆด๋ฆฌ์Šค ๋ชจ๋“œ์—์„œ JS ๋ฒˆ๋“ค ์ž์‚ฐ์„ ๋„ฃ์„ ์œ„์น˜
  • jsBundleDirRelease: "$buildDir/intermediates/assets/release",
    *
  • // ๋“œ๋กœ์–ด๋ธ” ๋ฆฌ์†Œ์Šค๋ฅผ ๋„ฃ์„ ์œ„์น˜ / React Native ์ž์‚ฐ, ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ์„ ํ†ตํ•ด ์‚ฌ์šฉํ•˜๋Š” ์ž์‚ฐ
  • // require('./image.png')), ๋””๋ฒ„๊ทธ ๋ชจ๋“œ์—์„œ
  • resourcesDirDebug: "$buildDir/intermediates/res/merged/debug",
    *
  • // ๋“œ๋กœ์–ด๋ธ” ๋ฆฌ์†Œ์Šค๋ฅผ ๋„ฃ์„ ์œ„์น˜ / React Native ์ž์‚ฐ, ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ์„ ํ†ตํ•ด ์‚ฌ์šฉํ•˜๋Š” ์ž์‚ฐ
  • // require('./image.png')), ๋ฆด๋ฆฌ์Šค ๋ชจ๋“œ์—์„œ
  • resourcesDirRelease: "$buildDir/intermediates/res/merged/release",
    *
  • // JS ํŒŒ์ผ์ด๋‚˜ ์ž์‚ฐ์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ gradle ์ž‘์—…์„ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์˜๋ฏธ
  • // ์ž‘์—…์ด ์ตœ๋Œ€์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด android/ ๋˜๋Š” ios/์˜ ํŒŒ์ผ์„ ํ™•์ธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • // ๋ฐ์ดํŠธ; ์„ฑ๋Šฅ์ƒ์˜ ์ด์œ ๋กœ ๋ฌด์‹œํ•˜๊ณ  ์‹ถ์€ ๋‹ค๋ฅธ ํด๋”๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ(gradle
  • // ์ „์ฒด ํŠธ๋ฆฌ๋ฅผ ์ธ๋ฑ์‹ฑํ•จ), ์—ฌ๊ธฐ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๋˜๋Š” android/์— JS ํŒŒ์ผ์ด ์žˆ๋Š” ๊ฒฝ์šฐ
  • // ์˜ˆ๋ฅผ ๋“ค์–ด ์—ฌ๊ธฐ์—์„œ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ž…๋ ฅ ์ œ์™ธ: ["์•ˆ๋“œ๋กœ์ด๋“œ/ ", "ios/ "],
    *
  • // ํ˜ธ์ถœ๋˜๋Š” ๋…ธ๋“œ์™€ ์ถ”๊ฐ€ ์ธ์ˆ˜๋ฅผ ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  • nodeExecutableAndArgs: ["๋…ธ๋“œ"],
    *
  • // ํŒจํ‚ค์ €์— ์ถ”๊ฐ€ ์ธ์ˆ˜๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • extraPackagerArgs: []
  • ]
    */

project.ext.react = [
ํ•ญ๋ชฉ ํŒŒ์ผ: "index.js",
enableHermes: false, // ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒฝ์šฐ ์ •๋ฆฌ ๋ฐ ์žฌ๊ตฌ์ถ•
]

์ ์šฉ: "../../node_modules/react-native/react.gradle"

/**

  • ํ•˜๋‚˜๊ฐ€ ์•„๋‹Œ ๋‘ ๊ฐœ์˜ ๊ฐœ๋ณ„ APK๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด ์ด๊ฒƒ์„ true๋กœ ์„ค์ •ํ•˜์‹ญ์‹œ์˜ค.

    • ARM ๊ธฐ๊ธฐ์—์„œ๋งŒ ์ž‘๋™ํ•˜๋Š” APK


    • x86 ๊ธฐ๊ธฐ์—์„œ๋งŒ ์ž‘๋™ํ•˜๋Š” APK

  • ์žฅ์ ์€ APK์˜ ํฌ๊ธฐ๊ฐ€ ์•ฝ 4MB๋กœ ์ค„์–ด๋“ ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • ๋ชจ๋“  APK๋ฅผ Play ์Šคํ† ์–ด์— ์—…๋กœ๋“œํ•˜๋ฉด ์‚ฌ๋žŒ๋“ค์ด ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.
  • ์žฅ์น˜์˜ CPU ์•„ํ‚คํ…์ฒ˜์— ๋”ฐ๋ผ ์˜ฌ๋ฐ”๋ฅธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
    */
    def enableSeparateBuildPerCPUArchitecture = ๊ฑฐ์ง“

/**

  • Proguard๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๋ฆด๋ฆฌ์Šค ๋นŒ๋“œ์—์„œ Java ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ์ถ•์†Œํ•ฉ๋‹ˆ๋‹ค.
    */
    def enableProguardInReleaseBuilds = ๊ฑฐ์ง“

/**

  • JavaScriptCore์˜ ๊ธฐ๋ณธ ๋นŒ๋“œ ํ”Œ๋ ˆ์ด๋ฒ„์ž…๋‹ˆ๋‹ค.
    *
  • ์˜ˆ๋ฅผ ๋“ค์–ด ๊ตญ์ œ ๋ณ€ํ˜•์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • def jscFlavor = 'org.webkit:android-jsc-intl:+'
    *
  • ๊ตญ์ œ ๋ณ€ํ˜•์—๋Š” ICU i18n ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด Date.toLocaleString ๋ฐ String.localeCompare ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • en-US ์ด์™ธ์˜ ๋กœ์ผ€์ผ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๋•Œ ์˜ฌ๋ฐ”๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ฐธ๊ณ 
  • ์ด ๋ณ€ํ˜•์€ ๊ธฐ๋ณธ๋ณด๋‹ค ์•„ํ‚คํ…์ฒ˜๋‹น ์•ฝ 6MiB ๋” ํฝ๋‹ˆ๋‹ค.
    */
    def jscFlavor = 'org. ์›นํ‚ท:android-jsc :+'

/**

  • Hermes VM์„ ํ™œ์„ฑํ™”ํ• ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค.
    *
  • ์ด๊ฒƒ์€ project.ext.react์— ์„ค์ •๋˜๊ณ  ์—ฌ๊ธฐ์— ๋ฏธ๋Ÿฌ๋ง๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์„ค์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ
  • project.ext.react์—์„œ JavaScript๋Š” Hermes Bytecode๋กœ ์ปดํŒŒ์ผ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๋”ฐ๋ผ์„œ Hermes ์‚ฌ์šฉ์˜ ์ด์ ์ด ๊ธ‰๊ฒฉํžˆ ๊ฐ์†Œํ•ฉ๋‹ˆ๋‹ค.
    */
    def enableHermes = project.ext.react.get("enableHermes", ๊ฑฐ์ง“);

์•ˆ๋“œ๋กœ์ด๋“œ {
compileSdkVersion rootProject.ext.compileSdkVersion

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}

defaultConfig {
    applicationId "com.yourappid"
    minSdkVersion rootProject.ext.minSdkVersion
    targetSdkVersion rootProject.ext.targetSdkVersion
    versionCode 1
    versionName "1.0"
    missingDimensionStrategy 'react-native-camera', 'general'
}
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"
    }
}
// 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
        }

    }
}

packagingOptions {
    pickFirst '**/armeabi-v7a/libc++_shared.so'
    pickFirst '**/x86/libc++_shared.so'
    pickFirst '**/arm64-v8a/libc++_shared.so'
    pickFirst '**/x86_64/libc++_shared.so'
    pickFirst '**/x86/libjsc.so'
    pickFirst '**/armeabi-v7a/libjsc.so'
}

}

์ข…์†์„ฑ {
๊ตฌํ˜„ ํŒŒ์ผ ํŠธ๋ฆฌ(๋””๋ ‰ํ„ฐ๋ฆฌ: "libs", ํฌํ•จ: ["*.jar"])
๊ตฌํ˜„ "com.facebook. react:react-native :+" // node_modules์—์„œ

if (enableHermes) {
  def hermesPath = "../../node_modules/hermesvm/android/";
  debugImplementation files(hermesPath + "hermes-debug.aar")
  releaseImplementation files(hermesPath + "hermes-release.aar")
} else {
  implementation jscFlavor
}

}

// BUCK์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ ๋ฒˆ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
// ๋ชจ๋“  ์ปดํŒŒ์ผ ์ข…์†์„ฑ์„ BUCK๊ฐ€ ์‚ฌ์šฉํ•  ํด๋” libs์— ๋„ฃ์Šต๋‹ˆ๋‹ค.
์ž‘์—… copyDownloadableDepsToLibs(์œ ํ˜•: ๋ณต์‚ฌ) {
๊ตฌ์„ฑ.์ปดํŒŒ์ผ์—์„œ
'libs'๋กœ
}

์ ์šฉ: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(ํ”„๋กœ์ ํŠธ)

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค, @lucasferreiraestevam. Btw, ๋” ๋‚˜์€ ์ฝ๊ธฐ๋ฅผ ์œ„ํ•ด ์ด ์ฝ”๋“œ๋ฅผ ์†Œ์Šค๋กœ ํฌ๋งทํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์–ด์จŒ๋“  ๋‚˜๋Š” ๋‹น์‹ ์˜ ์˜ˆ์™€ ํฐ ์ฐจ์ด๋ฅผ ๋ณด์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‹ค์‹œ ํ•œ๋ฒˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค

์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ๋ฅผ ์œ„ํ•ด ๋ชจ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋‹ค์‹œ ์ถ”๊ฐ€ํ•œ ํ›„ ์ €๋ฅผ ์œ„ํ•ด ์ผํ•˜์„ธ์š”. ๋ชจ๋‘์—๊ฒŒ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค

๋‚ด ๋ฌธ์ œ๋Š” ์•„์ง ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ ๋™์ผํ•œ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€ ์ €๋ฅผ ๋„์™€์ฃผ์„ธ์š”.

@SAHITYASAI build.gradle ๋ณด์—ฌ์ฃผ์„ธ์š”

android/build.gradle :-

buildscript { ext { buildToolsVersion = "28.0.3" minSdkVersion = 16 compileSdkVersion = 28 targetSdkVersion = 28 supportLibVersion = "28.0.0" googlePlayServicesVersion: "15.0.0" firebaseVersion: "15.0.0" } repositories { google() jcenter() mavenLocal() maven { url 'https://plugins.gradle.org/m2/' } // Gradle Plugin Portal } dependencies { classpath("com.android.tools.build:gradle:3.4.1") classpath 'com.google.gms:google-services:4.3.2' classpath 'gradle.plugin.com.onesignal:onesignal-gradle-plugin:[0.12.5, 0.99.99]' // 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() } } apply plugin: 'com.onesignal.androidsdk.onesignal-gradle-plugin'

android/app/build.gradle :-

apply plugin: "com.android.application" import com.android.build.OutputFile project.ext.react = [ entryFile: "index.js", enableHermes: false, // clean and rebuild if changing ] apply from: "../../node_modules/react-native/react.gradle" def enableSeparateBuildPerCPUArchitecture = false def enableProguardInReleaseBuilds = false def jscFlavor = 'org.webkit:android-jsc:+' 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.tutelage" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion versionCode 3 versionName "1.2" multiDexEnabled true } 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' } release { storeFile file(MYAPP_RELEASE_STORE_FILE) storePassword MYAPP_RELEASE_STORE_PASSWORD keyAlias MYAPP_RELEASE_KEY_ALIAS keyPassword MYAPP_RELEASE_KEY_PASSWORD } } } buildTypes { debug { signingConfig signingConfigs.debug } release { signingConfig signingConfigs.release minifyEnabled enableProguardInReleaseBuilds proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" } } applicationVariants.all { variant -> variant.outputs.each { output -> 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 } } } packagingOptions { pickFirst '**/armeabi-v7a/libc++_shared.so' pickFirst '**/x86/libc++_shared.so' pickFirst '**/arm64-v8a/libc++_shared.so' pickFirst '**/x86_64/libc++_shared.so' pickFirst '**/x86/libjsc.so' pickFirst '**/armeabi-v7a/libjsc.so' } } dependencies { implementation project(':react-native-onesignal') compile project(':react-native-admob') implementation "com.google.android.gms:play-services-base:17.0.0" implementation ('com.google.android.gms:play-services-ads:18.1.1') { force = true; } implementation 'com.google.firebase:firebase-analytics:17.2.0' implementation 'com.google.firebase:firebase-auth:18.1.0' implementation 'com.google.firebase:firebase-firestore:20.2.0' implementation 'com.google.firebase:firebase-ads:18.1.1' implementation project(':@react-native-community_netinfo') implementation fileTree(dir: "libs", include: ["*.jar"]) implementation "com.facebook.react:react-native:+" // From node_modules implementation "com.android.support:appcompat-v7:${rootProject.ext.supportLibVersion}" // implementation "com.google.android.gms:play-services-ads-lite:[18.1.1]" if (enableHermes) { def hermesPath = "../../node_modules/hermesvm/android/"; debugImplementation files(hermesPath + "hermes-debug.aar") releaseImplementation files(hermesPath + "hermes-release.aar") } else { implementation jscFlavor } } 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) apply plugin: 'com.google.gms.google-services'

@SAHITYASAI ๋ฌธ์„œ ์— ๋”ฐ๋ฅด๋ฉด ์ด ์ฝ”๋“œ๋ฅผ ์˜ฎ๊ฒจ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

buildscript {
    repositories {
        maven { url 'https://plugins.gradle.org/m2/'}
    }
    dependencies {
        classpath 'gradle.plugin.com.onesignal:onesignal-gradle-plugin:[0.12.4, 0.99.99]'
    }
}
apply plugin: 'com.onesignal.androidsdk.onesignal-gradle-plugin'

repositories {
    maven { url 'https://maven.google.com' }
}

app/build.gradle . ํŒŒ์ผ์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์œผ๋กœ ์ด๋™

๊ทธ๋ฆฌ๊ณ  ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ํฌ๋งทํ•˜์„ธ์š”.

์—ฌ๊ธฐ ๊ฐ™์€ ๋ฌธ์ œ
`3์ดˆ ๋งŒ์— ๋นŒ๋“œ ์‹คํŒจ

์˜ค๋ฅ˜ ์•ฑ์„ ์„ค์น˜ํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. Android ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์ด ์„ค์ •๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. https://facebook.github.io/react-native/docs/getting-started.html#android -development-environment.
์˜ค๋ฅ˜: ๋ช…๋ น ์‹คํŒจ: gradlew.bat ์•ฑ:installDebug -PreactNativeDevServerPort=8081

FAILURE: ์˜ˆ์™ธ์™€ ํ•จ๊ป˜ ๋นŒ๋“œ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ๋ฌด์—‡์ด ์ž˜๋ชป๋˜์—ˆ๋Š”์ง€:
    ์ž‘์—… ': app:validateSigningDebug '์— ๋Œ€ํ•œ ์‹คํ–‰์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.

    ์„œ๋ช… ๊ตฌ์„ฑ '๋””๋ฒ„๊ทธ'์— ๋Œ€ํ•œ ํ‚ค ์ €์žฅ์†Œ ํŒŒ์ผ 'E:\React Native\push notification\react-native-onesignal\examples\RNOneSignal\android\app\debug.keystore'๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

  • ๋…ธ๋ ฅํ•˜๋‹ค:
    ์Šคํƒ ์ถ”์ ์„ ์–ป์œผ๋ ค๋ฉด --stacktrace ์˜ต์…˜๊ณผ ํ•จ๊ป˜ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค. ๋” ๋งŽ์€ ๋กœ๊ทธ ์ถœ๋ ฅ์„ ์–ป์œผ๋ ค๋ฉด --info ๋˜๋Š” --debug ์˜ต์…˜๊ณผ ํ•จ๊ป˜ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค. ์ „์ฒด ํ†ต์ฐฐ๋ ฅ์„ ์–ป์œผ๋ ค๋ฉด --scan๊ณผ ํ•จ๊ป˜ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค.

  • https://help.gradle.org ์—์„œ ๋” ๋งŽ์€ ๋„์›€์„ ๋ฐ›์œผ์„ธ์š”.

3์ดˆ ๋งŒ์— ๊ตฌ์ถ• ์‹คํŒจ

at checkExecSyncError (child_process.js:601:13)
at execFileSync (child_process.js:621:13)
at runOnAllDevices (E:\React Native\push notification\react-native-onesignal\examples\RNOneSignal\node_modules\@react-native-community\cli-platform-android\build\commands\runAndroid\runOnAllDevices.js:74:39)
at buildAndRun (E:\React Native\push notification\react-native-onesignal\examples\RNOneSignal\node_modules\@react-native-community\cli-platform-android\build\commands\runAndroid\index.js:158:41)
at then.result (E:\React Native\push notification\react-native-onesignal\examples\RNOneSignal\node_modules\@react-native-community\cli-platform-android\build\commands\runAndroid\index.js:125:12)
at <anonymous>
at process._tickCallback (internal/process/next_tick.js:188:7)`

์ตœ์‹  react-native-onesignal ํŒจํ‚ค์ง€๋กœ ์ž‘์—…ํ–ˆ์Šต๋‹ˆ๋‹ค!

์—ฌ๊ธฐ ๋‚ด project/build.gradle

Screenshot 2019-10-04 at 8 01 09 PM

๋‹ค์Œ์€ ๋‚ด ํ”„๋กœ์ ํŠธ/์•ฑ/build.gradle ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.

Screenshot 2019-10-04 at 8 01 37 PM

IT ์‚ฌ์šฉ ๋‹จ๊ณ„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

yarn add react-native-onesignal

๊ทธ๋Ÿฐ ๋‹ค์Œ iOS ์šฉ
๊ฐ„๋‹จํžˆ
cd ios && pod install

์•ˆ๋“œ๋กœ์ด๋“œ๋ฅผ ์œ„ํ•ด

๊ฐ„๋‹จํžˆ

react-native run-android ํŒจํ‚ค์ง€๋ฅผ ์ž๋™์œผ๋กœ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

@waqaramjad ๋ฌธ์ œ๋Š” ์ฝ”๋“œ ์„œ๋ช…๊ณผ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

Keystore file 'E:\React Native\push notification\react-native-onesignal\examples\RNOneSignal\android\app\debug.keystore' not found for signing config 'debug'.

@indapublic ๊ทธ๋ž˜์„œ

@waqaramjad android/app/build.gradle , signingConfigs ์„น์…˜ ํ‘œ์‹œ

@indapublic์€ ์—ฌ๊ธฐ android/app/build.gradle์ž…๋‹ˆ๋‹ค.
`// ๋ชจ๋“  ํ•˜์œ„ ํ”„๋กœ์ ํŠธ/๋ชจ๋“ˆ์— ๊ณตํ†ต์ ์ธ ๊ตฌ์„ฑ ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ์ƒ์œ„ ๋นŒ๋“œ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.

๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ {
๋‚ด์„  {
buildToolsVersion = "28.0.3"
์ตœ์†Œ SDK ๋ฒ„์ „ = 16
compileSdkVersion = 28
๋Œ€์ƒ SDK ๋ฒ„์ „ = 28
supportLibVersion = "28.0.0"
}
์ €์žฅ์†Œ {
Google()
์ œ์ด์„ผํ„ฐ()
}
์ข…์†์„ฑ {
classpath("com.android.tools.build:gradle:3.4.1")

    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
}

}

๋ชจ๋“  ํ”„๋กœ์ ํŠธ {
์ €์žฅ์†Œ {
๋ฉ”์ด๋ธ๋กœ์ปฌ()
๋ฉ”์ด๋ธ {
// ๋ชจ๋“  React Native(JS, Obj-C ์†Œ์Šค, Android ๋ฐ”์ด๋„ˆ๋ฆฌ)๋Š” npm์—์„œ ์„ค์น˜๋ฉ๋‹ˆ๋‹ค.
url("$rootDir/../node_modules/react-native/android")
}
๋ฉ”์ด๋ธ {
// Android JSC๋Š” npm์—์„œ ์„ค์น˜๋ฉ๋‹ˆ๋‹ค.
url("$rootDir/../node_modules/jsc-android/dist")
}

    google()
    jcenter()
}

}
`

@waqaramjad ์–ด๋–ค RN ๋ฒ„์ „์ด ์žˆ์Šต๋‹ˆ๊นŒ?

"0.60.5"

๊ธฐ์กด ์•ฑ์„ ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๊นŒ ์•„๋‹ˆ๋ฉด ์ƒˆ๋กœ ๋งŒ๋“œ์…จ์Šต๋‹ˆ๊นŒ?

ํ•˜๋‚˜์˜ ์‹ ํ˜ธ ์ €์žฅ์†Œ์— ์žˆ๋Š” ๊ธฐ์กด ์•ฑ ์˜ˆ์ œ๋ฅผ ๋ณต์ œํ•˜๊ณ  ์‹œ์ž‘ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

@waqaramjad ๋จผ์ € ๋ง

์ฒซ ๋ฒˆ์งธ: android/app/build.gradle ์•„๋‹Œ android/build.gradle ๋ฅผ ์ธ์‡„

๋‘˜์งธ: ์˜ˆ๋ฅผ ๋“ค์–ด ์ด ์„ค๋ช…์„œ ์™€ ๊ด€๋ จ๋œ ๋””๋ฒ„๊ทธ ๋ฐ ๋ฆด๋ฆฌ์Šค ํ‚ค ์ €์žฅ์†Œ๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

btw: ๋‚˜๋Š” ๋‹น์‹ ์ด Windows๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ณด์•˜์œผ๋ฏ€๋กœ ์•„๋งˆ๋„ keytool ์‹คํ–‰์„ ์œ„ํ•ด ๋ช‡ ๊ฐ€์ง€๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” Windows์— ๋Œ€ํ•œ ๊ฒฝํ—˜์ด ์—†์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์„œ๋ช…๋œ APK๋ฅผ ์›ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํ‚ค ์ €์žฅ์†Œ๊ฐ€ ํ•„์š”ํ•œ ์ด์œ ๋Š” ํ…Œ์ŠคํŠธํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

android/app/build.gradle ๋Œ€ํ•œ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

`ํ”Œ๋Ÿฌ๊ทธ์ธ ์ ์šฉ: "com.android.application"

com.android.build.OutputFile ๊ฐ€์ ธ์˜ค๊ธฐ

/**

  • react.gradle ํŒŒ์ผ์€ ๊ฐ ๋นŒ๋“œ ๋ณ€ํ˜•์— ๋Œ€ํ•œ ์ž‘์—…์„ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: bundleDebugJsAndAssets
  • ๋ฐ bundleReleaseJsAndAssets).
  • ์ด๋“ค์€ ๊ธฐ๋ณธ์ ์œผ๋กœ Android ๋นŒ๋“œ ์ค‘์— ์˜ฌ๋ฐ”๋ฅธ ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ react-native bundle ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
  • ์ฃผ๊ธฐ. ๊ธฐ๋ณธ์ ์œผ๋กœ bundleDebugJsAndAssets๋Š” ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค. ๋””๋ฒ„๊ทธ/๊ฐœ๋ฐœ ๋ชจ๋“œ์—์„œ ๋กœ๋“œํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
  • ๊ฐœ๋ฐœ ์„œ๋ฒ„์—์„œ ์ง์ ‘ ๋ฒˆ๋“ค. ์•„๋ž˜์—์„œ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ตฌ์„ฑ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ๊ทธ๋“ค์˜ ๊ธฐ๋ณธ๊ฐ’. ๊ตฌ์„ฑ ๋ธ”๋ก์„ ์ถ”๊ฐ€ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค๋ฉด ๊ตฌ์„ฑ ๋ธ”๋ก ์•ž์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • apply from: "../../node_modules/react-native/react.gradle" ๋ผ์ธ.
    *
  • project.ext.react = [
  • // JS ๋ฒˆ๋“ค์„ ํฌํ•จํ•˜๋Š” ์ƒ์„ฑ๋œ ์ž์‚ฐ ํŒŒ์ผ์˜ ์ด๋ฆ„
  • ๋ฒˆ๋“ค ์ž์‚ฐ ์ด๋ฆ„: "index.android.bundle",
    *
  • // ๋ฒˆ๋“ค ์ƒ์„ฑ์„ ์œ„ํ•œ ์—”ํŠธ๋ฆฌ ํŒŒ์ผ
  • ํ•ญ๋ชฉ ํŒŒ์ผ: "index.android.js",
    *
  • // https://facebook.github.io/react-native/docs/performance#enable -the-ram-format
  • ๋ฒˆ๋“ค ๋ช…๋ น: "๋žจ ๋ฒˆ๋“ค",
    *
  • // ๋””๋ฒ„๊ทธ ๋ชจ๋“œ์—์„œ JS์™€ ์ž์‚ฐ์„ ๋ฒˆ๋“คํ• ์ง€ ์—ฌ๋ถ€
  • ๋ฒˆ๋“ค์ธ๋””๋ฒ„๊ทธ: ๊ฑฐ์ง“,
    *
  • // ๋ฆด๋ฆฌ์Šค ๋ชจ๋“œ์—์„œ JS์™€ ์ž์‚ฐ์„ ๋ฒˆ๋“คํ• ์ง€ ์—ฌ๋ถ€
  • BundleInRelease: ์ฐธ,
    *
  • // ๋‹ค๋ฅธ ๋นŒ๋“œ ๋ณ€ํ˜•์—์„œ JS ๋ฐ ์ž์‚ฐ์„ ๋ฒˆ๋“คํ• ์ง€ ์—ฌ๋ถ€(๊ตฌ์„ฑ๋œ ๊ฒฝ์šฐ).
  • // http://tools.android.com/tech-docs/new-build-system/user-guide#TOC -Build-Variants ์ฐธ์กฐ
  • // ๊ตฌ์„ฑ ์†์„ฑ์€ ๋‹ค์Œ ํ˜•์‹์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • // 'bundleIn${productFlavor}${๋นŒ๋“œ ์œ ํ˜•}'
  • // '๋ฒˆ๋“ค์ธ${๋นŒ๋“œํƒ€์ž…}'
  • // bundleInFreeDebug: ์ฐธ,
  • // bundleInPaidRelease: ์ฐธ,
  • // ๋ฒˆ๋“ค์ธ๋ฒ ํƒ€: ์ฐธ,
    *
  • // ์‚ฌ์šฉ์ž ์ •์˜ ๋นŒ๋“œ ๋ณ€ํ˜•์—์„œ ๊ฐœ๋ฐœ ๋ชจ๋“œ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ• ์ง€ ์—ฌ๋ถ€(๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฆด๋ฆฌ์Šค์—์„œ๋งŒ ๋น„ํ™œ์„ฑํ™”๋จ)
  • // ์˜ˆ: ์Šคํ…Œ์ด์ง• ๋นŒ๋“œ ์œ ํ˜•์—์„œ ๊ฐœ๋ฐœ ๋ชจ๋“œ ๋น„ํ™œ์„ฑํ™”(๊ตฌ์„ฑ๋œ ๊ฒฝ์šฐ)
  • devDisabledInStaging: ์ฐธ,
  • // ๊ตฌ์„ฑ ์†์„ฑ์€ ๋‹ค์Œ ํ˜•์‹์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • // 'devDisabledIn${productFlavor}${๋นŒ๋“œ ์œ ํ˜•}'
  • // 'devDisabledIn${๋นŒ๋“œ ์œ ํ˜•}'
    *
  • // ํ”„๋กœ์ ํŠธ์˜ ๋ฃจํŠธ, ์ฆ‰ "package.json"์ด ์žˆ๋Š” ์œ„์น˜
  • ๋ฃจํŠธ: "../../",
    *
  • // ๋””๋ฒ„๊ทธ ๋ชจ๋“œ์—์„œ JS ๋ฒˆ๋“ค ์ž์‚ฐ์„ ๋„ฃ์„ ์œ„์น˜
  • jsBundleDirDebug: "$buildDir/intermediates/assets/debug",
    *
  • // ๋ฆด๋ฆฌ์Šค ๋ชจ๋“œ์—์„œ JS ๋ฒˆ๋“ค ์ž์‚ฐ์„ ๋„ฃ์„ ์œ„์น˜
  • jsBundleDirRelease: "$buildDir/intermediates/assets/release",
    *
  • // ๋“œ๋กœ์–ด๋ธ” ๋ฆฌ์†Œ์Šค๋ฅผ ๋„ฃ์„ ์œ„์น˜ / React Native ์ž์‚ฐ, ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ์„ ํ†ตํ•ด ์‚ฌ์šฉํ•˜๋Š” ์ž์‚ฐ
  • // require('./image.png')), ๋””๋ฒ„๊ทธ ๋ชจ๋“œ์—์„œ
  • resourcesDirDebug: "$buildDir/intermediates/res/merged/debug",
    *
  • // ๋“œ๋กœ์–ด๋ธ” ๋ฆฌ์†Œ์Šค๋ฅผ ๋„ฃ์„ ์œ„์น˜ / React Native ์ž์‚ฐ, ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ์„ ํ†ตํ•ด ์‚ฌ์šฉํ•˜๋Š” ์ž์‚ฐ
  • // require('./image.png')), ๋ฆด๋ฆฌ์Šค ๋ชจ๋“œ์—์„œ
  • resourcesDirRelease: "$buildDir/intermediates/res/merged/release",
    *
  • // JS ํŒŒ์ผ์ด๋‚˜ ์ž์‚ฐ์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ gradle ์ž‘์—…์„ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์˜๋ฏธ
  • // ์ž‘์—…์ด ์ตœ๋Œ€์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด android/ ๋˜๋Š” ios/์˜ ํŒŒ์ผ์„ ํ™•์ธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • // ๋ฐ์ดํŠธ; ์„ฑ๋Šฅ์ƒ์˜ ์ด์œ ๋กœ ๋ฌด์‹œํ•˜๊ณ  ์‹ถ์€ ๋‹ค๋ฅธ ํด๋”๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ(gradle
  • // ์ „์ฒด ํŠธ๋ฆฌ๋ฅผ ์ธ๋ฑ์‹ฑํ•จ), ์—ฌ๊ธฐ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๋˜๋Š” android/์— JS ํŒŒ์ผ์ด ์žˆ๋Š” ๊ฒฝ์šฐ
  • // ์˜ˆ๋ฅผ ๋“ค์–ด ์—ฌ๊ธฐ์—์„œ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ž…๋ ฅ ์ œ์™ธ: ["์•ˆ๋“œ๋กœ์ด๋“œ/ ", "ios/ "],
    *
  • // ํ˜ธ์ถœ๋˜๋Š” ๋…ธ๋“œ์™€ ์ถ”๊ฐ€ ์ธ์ˆ˜๋ฅผ ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  • nodeExecutableAndArgs: ["๋…ธ๋“œ"],
    *
  • // ํŒจํ‚ค์ €์— ์ถ”๊ฐ€ ์ธ์ˆ˜๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • extraPackagerArgs: []
  • ]
    */

project.ext.react = [
ํ•ญ๋ชฉ ํŒŒ์ผ: "index.js",
enableHermes: false, // ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒฝ์šฐ ์ •๋ฆฌ ๋ฐ ์žฌ๊ตฌ์ถ•
]

์ ์šฉ: "../../node_modules/react-native/react.gradle"

/**

  • ํ•˜๋‚˜๊ฐ€ ์•„๋‹Œ ๋‘ ๊ฐœ์˜ ๊ฐœ๋ณ„ APK๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด ์ด๊ฒƒ์„ true๋กœ ์„ค์ •ํ•˜์‹ญ์‹œ์˜ค.

    • ARM ๊ธฐ๊ธฐ์—์„œ๋งŒ ์ž‘๋™ํ•˜๋Š” APK


    • x86 ๊ธฐ๊ธฐ์—์„œ๋งŒ ์ž‘๋™ํ•˜๋Š” APK

  • ์žฅ์ ์€ APK์˜ ํฌ๊ธฐ๊ฐ€ ์•ฝ 4MB๋กœ ์ค„์–ด๋“ ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • ๋ชจ๋“  APK๋ฅผ Play ์Šคํ† ์–ด์— ์—…๋กœ๋“œํ•˜๋ฉด ์‚ฌ๋žŒ๋“ค์ด ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.
  • ์žฅ์น˜์˜ CPU ์•„ํ‚คํ…์ฒ˜์— ๋”ฐ๋ผ ์˜ฌ๋ฐ”๋ฅธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
    */
    def enableSeparateBuildPerCPUArchitecture = ๊ฑฐ์ง“

/**

  • Proguard๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๋ฆด๋ฆฌ์Šค ๋นŒ๋“œ์—์„œ Java ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ์ถ•์†Œํ•ฉ๋‹ˆ๋‹ค.
    */
    def enableProguardInReleaseBuilds = ๊ฑฐ์ง“

/**

  • JavaScriptCore์˜ ๊ธฐ๋ณธ ๋นŒ๋“œ ํ”Œ๋ ˆ์ด๋ฒ„์ž…๋‹ˆ๋‹ค.
    *
  • ์˜ˆ๋ฅผ ๋“ค์–ด ๊ตญ์ œ ๋ณ€ํ˜•์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • def jscFlavor = 'org.webkit:android-jsc-intl:+'
    *
  • ๊ตญ์ œ ๋ณ€ํ˜•์—๋Š” ICU i18n ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด Date.toLocaleString ๋ฐ String.localeCompare ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • en-US ์ด์™ธ์˜ ๋กœ์ผ€์ผ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๋•Œ ์˜ฌ๋ฐ”๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ฐธ๊ณ 
  • ์ด ๋ณ€ํ˜•์€ ๊ธฐ๋ณธ๋ณด๋‹ค ์•„ํ‚คํ…์ฒ˜๋‹น ์•ฝ 6MiB ๋” ํฝ๋‹ˆ๋‹ค.
    */
    def jscFlavor = 'org. ์›นํ‚ท:android-jsc :+'

/**

  • Hermes VM์„ ํ™œ์„ฑํ™”ํ• ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค.
    *
  • ์ด๊ฒƒ์€ project.ext.react์— ์„ค์ •๋˜๊ณ  ์—ฌ๊ธฐ์— ๋ฏธ๋Ÿฌ๋ง๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์„ค์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ
  • project.ext.react์—์„œ JavaScript๋Š” Hermes Bytecode๋กœ ์ปดํŒŒ์ผ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๋”ฐ๋ผ์„œ Hermes ์‚ฌ์šฉ์˜ ์ด์ ์ด ๊ธ‰๊ฒฉํžˆ ๊ฐ์†Œํ•ฉ๋‹ˆ๋‹ค.
    */
    def enableHermes = project.ext.react.get("enableHermes", ๊ฑฐ์ง“);

์•ˆ๋“œ๋กœ์ด๋“œ {
compileSdkVersion rootProject.ext.compileSdkVersion

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}

defaultConfig {
    applicationId "com.rnonesignal"
    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"
    }
}
// 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
        }

    }
}

packagingOptions {
    pickFirst '**/armeabi-v7a/libc++_shared.so'
    pickFirst '**/x86/libc++_shared.so'
    pickFirst '**/arm64-v8a/libc++_shared.so'
    pickFirst '**/x86_64/libc++_shared.so'
    pickFirst '**/x86/libjsc.so'
    pickFirst '**/armeabi-v7a/libjsc.so'
}

}

์ข…์†์„ฑ {
๊ตฌํ˜„ ํŒŒ์ผ ํŠธ๋ฆฌ(๋””๋ ‰ํ„ฐ๋ฆฌ: "libs", ํฌํ•จ: ["*.jar"])
๊ตฌํ˜„ "com.facebook. react:react-native :+" // node_modules์—์„œ

if (enableHermes) {
  def hermesPath = "../../node_modules/hermesvm/android/";
  debugImplementation files(hermesPath + "hermes-debug.aar")
  releaseImplementation files(hermesPath + "hermes-release.aar")
} else {
  implementation jscFlavor
}

}

// BUCK์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ ๋ฒˆ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
// ๋ชจ๋“  ์ปดํŒŒ์ผ ์ข…์†์„ฑ์„ BUCK๊ฐ€ ์‚ฌ์šฉํ•  ํด๋” libs์— ๋„ฃ์Šต๋‹ˆ๋‹ค.
์ž‘์—… copyDownloadableDepsToLibs(์œ ํ˜•: ๋ณต์‚ฌ) {
๊ตฌ์„ฑ.์ปดํŒŒ์ผ์—์„œ
'libs'๋กœ
}

์ ์šฉ: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(ํ”„๋กœ์ ํŠธ)
`

๊ทธ๋Ÿฌ๋‚˜ ๋‹น์‹ ์€ ๋‹น์‹ ์˜ ์žฅ์น˜์— ๊ทธ๊ฒƒ์„ ์„ค์น˜ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๊นŒ?
๋กœ๊ทธ์ธ ๊ตฌ์„ฑ์€ ์—ฌ๊ธฐ

@indapublic ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ ๋‚ด ์•ฑ์ด ์„ฑ๊ณต์ ์œผ๋กœ ๊ตฌ์ถ•๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ onesignal ์•Œ๋ฆผ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ๋งŒ ์—ฐ์† 15์ผ ๋™์•ˆ ๋น„ํ™œ์„ฑ ์ƒํƒœ์ธ ์‚ฌ์šฉ์ž์—๊ฒŒ๋งŒ ์•Œ๋ฆผ์„ ๋ณด๋‚ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์•„๋ฌด๋‚˜ ๋„์™€์ฃผ์„ธ์š”.

์ด์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ๋ฌธ์ œ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ฃ ?

@SAHITYASAI ,
์ถ”๊ฐ€ ์ง€์›์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ OneSignal.com์˜ ์ง€์› ์ฑ„๋„์— ๋ฌธ์˜ํ•˜์‹ญ์‹œ์˜ค. ๊ฑด๋ฐฐ

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰