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"์์ ๋ช ๊ฐ์ง ๋ฌธ์ ๋ฅผ ์ฐพ์์ง๋ง ์ ์ฉํ ๊ฒ์ ์ฐพ์ง ๋ชปํ์ต๋๋ค.
์ด๋์๋ถํฐ ์์ํด์ผ ํ๋์ง ์๋ ค์ฃผ์ธ์?
๋ง์ฐฌ๊ฐ์ง๋ก ๋ด ์ฑ๋ Android์์ ์๋ฆผ์ ๋ฐ์ ๋ ์ถฉ๋ํฉ๋๋ค. mi note 4(android 7.0, RN 0.60.3, react-native-onesignal 3.3.3)์์ ํ ์คํธํ์ต๋๋ค.
@SAHITYASAI adb logcat
์๊ฒ ์ต๋๊น?
์ด๊ฒ์ ์ฑ์ด ์ถฉ๋ํ ๋๋ง๋ค ๋ฐ์ํ๋ ๋ฐํ์ ์ค๋ฅ์
๋๋ค.
๋์ผ ์ค๋ฅ๊ฐ ๋ฐ์ ๋ค์ดํฐ๋ธ 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-native bundle
๋ฅผ ํธ์ถํฉ๋๋ค.apply from: "../../node_modules/react-native/react.gradle"
๋ผ์ธ.project.ext.react = [
ํญ๋ชฉ ํ์ผ: "index.js",
enableHermes: false, // ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ ์ ๋ฆฌ ๋ฐ ์ฌ๊ตฌ์ถ
]
์ ์ฉ: "../../node_modules/react-native/react.gradle"
/**
/**
/**
def jscFlavor = 'org.webkit:android-jsc-intl:+'
Date.toLocaleString
๋ฐ String.localeCompare
๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค./**
์๋๋ก์ด๋ {
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
๋ค์์ ๋ด ํ๋ก์ ํธ/์ฑ/build.gradle ํ์ผ์ ๋๋ค.
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-native bundle
๋ฅผ ํธ์ถํฉ๋๋ค.apply from: "../../node_modules/react-native/react.gradle"
๋ผ์ธ.project.ext.react = [
ํญ๋ชฉ ํ์ผ: "index.js",
enableHermes: false, // ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ ์ ๋ฆฌ ๋ฐ ์ฌ๊ตฌ์ถ
]
์ ์ฉ: "../../node_modules/react-native/react.gradle"
/**
/**
/**
def jscFlavor = 'org.webkit:android-jsc-intl:+'
Date.toLocaleString
๋ฐ String.localeCompare
๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค./**
์๋๋ก์ด๋ {
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.60.5 ์ฌ์ฉ [email protected]์