Description:
The registred device returns an error on OneSignal dashboard, therefore unable to receive push notifications.
Environment
react-native -v
react-native-cli: 2.0.1
react-native: 0.55.4
package.json
"dependencies": {
"react": "16.3.1",
"react-native": "0.55.4",
"react-native-onesignal": "^3.2.3"
}
Steps to Reproduce Issue:
compile project(':react-native-onesignal')
on dependencies. It can't compile without that dependence.OneSignal.addEventListener('ids', device => {
console.log('[OneSignal]>>ids: ', device);
});
On Init insert your app ID.
Anything else:
E/OneSignal(31234): Unknown error getting FCM Token
E/OneSignal(31234): java.lang.NoSuchMethodError: No static method isDeviceProtectedStorage(Landroid/content/Context;)Z in class Landroid/support/v4/content/ContextCompat; or its super classes (declaration of 'android.support.v4.content.ContextCompat' appears in /data/app/com.onesignaltest-1/base.apk)
E/OneSignal(31234): at com.google.firebase.FirebaseApp.zza(Unknown Source)
E/OneSignal(31234): at com.google.firebase.FirebaseApp.initializeApp(Unknown Source)
E/OneSignal(31234): at com.onesignal.PushRegistratorFCM.initFirebaseApp(PushRegistratorFCM.java:64)
E/OneSignal(31234): at com.onesignal.PushRegistratorFCM.getToken(PushRegistratorFCM.java:50)
E/OneSignal(31234): at com.onesignal.PushRegistratorAbstractGoogle.attemptRegistration(PushRegistratorAbstractGoogle.java:97)
E/OneSignal(31234): at com.onesignal.PushRegistratorAbstractGoogle.access$100(PushRegistratorAbstractGoogle.java:37)
E/OneSignal(31234): at com.onesignal.PushRegistratorAbstractGoogle$1.run(PushRegistratorAbstractGoogle.java:84)
E/OneSignal(31234): at java.lang.Thread.run(Thread.java:818)
Edit 1:
I've tried to do those, but without success:
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
to the AndroidManifest.xml@DaniloCouto This is definitely an android support library version issue. Can you post your app/build.gradle
?
@DaniloCouto check the new version 3.2.4, they fix it.
@adirzoari , Still happens on 3.2.4, with the same errors on Adb logcat and on Onesignal User Dashboard.
yarn add [email protected]
package.json
"dependencies": {
"react": "16.3.1",
"react-native": "0.55.4",
"react-native-onesignal": "3.2.4"
},
@Nightsd01 Sure thing, here it is:
app/build.gradle
(I've deleted the generated comments)
apply plugin: "com.android.application"
import com.android.build.OutputFile
project.ext.react = [
entryFile: "index.js"
]
apply from: "../../node_modules/react-native/react.gradle"
def enableSeparateBuildPerCPUArchitecture = false
def enableProguardInReleaseBuilds = false
android {
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig {
applicationId "com.onesignaltest"
minSdkVersion 16
targetSdkVersion 22
versionCode 1
versionName "1.0"
ndk {
abiFilters "armeabi-v7a", "x86"
}
}
splits {
abi {
reset()
enable enableSeparateBuildPerCPUArchitecture
universalApk false
include "armeabi-v7a", "x86"
}
}
buildTypes {
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]
def abi = output.getFilter(OutputFile.ABI)
if (abi != null) {
output.versionCodeOverride =
versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
}
}
}
}
dependencies {
compile project(':react-native-onesignal') // I just added this line
compile fileTree(dir: "libs", include: ["*.jar"])
compile "com.android.support:appcompat-v7:23.0.1"
compile "com.facebook.react:react-native:+"
}
task copyDownloadableDepsToLibs(type: Copy) {
from configurations.compile
into 'libs'
}
Edit 1:
I've added these at start of the file. Nothing has changed:
buildscript {
repositories {
maven { url 'https://plugins.gradle.org/m2/' } // Gradle Plugin Portal
}
dependencies {
classpath 'gradle.plugin.com.onesignal:onesignal-gradle-plugin:[0.10.0, 0.99.99]'
}
}
apply plugin: 'com.onesignal.androidsdk.onesignal-gradle-plugin'
...
...
...
android {
compileSdkVersion 26
buildToolsVersion "26.0.1"
...
...
}
Of course, I've clean the android project with gradlew clean
and tried to rebuild.
@DaniloCouto Are you just using the react-native-onesignal example
project...?
Can you also post your AndroidManifest.xml
file? Thanks
@Nightsd01 I've created a new react-native project and added the react-native-onesignal package through Yarn.
Here it is:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.onesignaltest">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <!-- Onesignal Instruction -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <!-- Onesignal Instruction -->
<application
android:name=".MainApplication"
android:label="@string/app_name"
android:icon="@mipmap/ic_launcher"
android:allowBackup="false"
android:theme="@style/AppTheme"
> <!-- android:launchMode="singleTop" I Was wrong at this line-->
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
android:windowSoftInputMode="adjustResize"
android:launchMode="singleTop"> <!-- brunoandradebr made a pretty nice observation right here -->
<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>
Edit 1:
Following #387 sollution, i've added this line. Nothing has changed
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
Edit 2:
As well observed by @brunoandradebr , the android:launchMode="singleTop"
need to be on activity tag not on application tag.
But it's still not working..
Same problem here , @DaniloCouto you fix it???
I got the same problem.. @DaniloCouto did you manage to fix it? I searched about it everywhere and still no works :(
@ifanfaizal, @lahed Sorry to hear that, but i'm here to find a solution too...
I've tried to follow those without success:
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
to the AndroidManifest.xmlDanilo, you are supposed to insert
android:launchMode="singleTop"
Inside Activity context not in Application as onesignal instruction.
Btw it's not working as well =[
@brunoandradebr Well observed my fellow countryman.
As you said, it's still not working.
compile "com.google.android.gms:play-services-gcm:+"
Added this to dependence after install Google Play Service from android studio sdk manager, and somehow worked, but the app crashed, then I refreshed onesignal user list and the error keep persisting =[
I think it's working now! I'v installed Google Play Service from Android Studio, It's not supposed to insert any line, you need to close bundle and compile again. It's showing subscribed with a check icon! I don't even inserted onesignal extra lines, it's the same way react native has created.
@brunoandradebr @DaniloCouto @ifanfaizal I fix, i change sdkVersion and version appcompat
Changes:
app/build.gradle
compileSdkVersion 26
buildToolsVersion "26.0.2"
In dependencies
change
compile "com.android.support:appcompat-v7:23.0.1"
to
compile "com.android.support:appcompat-v7:26.0.1"
My build.gradle (android)
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
maven { // <-- THIS
url 'https://maven.google.com/' // <-- THIS
name 'Google' // <-- THIS
} // <-- THIS
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.3'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
mavenLocal()
jcenter()
maven {
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
url "$rootDir/../node_modules/react-native/android"
}
maven { // <-- THIS
url 'https://maven.google.com/' // <-- THIS
name 'Google' // <-- THIS
} // <-- THIS
}
}
In cmd: cd android && gradlew clean
Uninstall app from my AVD and compile with react-native
@lahed Aaahhh it's working bro!! 💃 thank you very much for your solution.. I spent 3 days to make it work but no results at all.. and today, you just save my life 😃
@lahed , works like a charms, thx.
I guess it's closed...?
What OneSignal team could do about this ?
An improved react-native link ?
@lahed ty, its work
i have 2 project using one signal
project 1 no need OneSignal.init
but project 2 need to OneSignal.init
any one can explain it?
@stevanus1997 maybe u already defined the init on the build.gradle in project 2 (?) (in other words, u defined OneSignal init with an older way) so u didn't need to init again in App.js
project 1
defaultConfig {
applicationId "com.xxxxx"
minSdkVersion 16
targetSdkVersion 23
versionCode 1
versionName "1.0"
ndk {
abiFilters "armeabi-v7a", "x86"
}
manifestPlaceholders = [
onesignal_app_id: "xxxxxxxxx",
onesignal_google_project_number: "xxxxxxxxx"
]
}
project 2
defaultConfig {
applicationId "com.xxxx"
minSdkVersion 16
targetSdkVersion 23
versionCode 1
versionName "1.0"
ndk {
abiFilters "armeabi-v7a", "x86"
}
manifestPlaceholders = [
onesignal_app_id : "xxxxx",
onesignal_google_project_number: "xxxxx"
]
multiDexEnabled true
}
@ifanfaizal thats my build.gradle
@lahed thank you so much. Now its working like charm...!!!
I followed @lahed's solution but I still get the same error from OneSignal's dashboard ... could someone show me his fixed android/build.gradle
and android/app/build.gradle
?
Try close compiler and recompile again.
Done that multiple times already 😕
Have you installed Google Play Service with Android Studio ?
Yup, the latest version of it, I'm running on Android 8.0
android/app/build.gradle
:
apply plugin: "com.android.application"
apply plugin: 'com.onesignal.androidsdk.onesignal-gradle-plugin'
import com.android.build.OutputFile
apply from: "../../node_modules/react-native/react.gradle"
def enableSeparateBuildPerCPUArchitecture = false
def enableProguardInReleaseBuilds = false
android {
compileSdkVersion 27
buildToolsVersion "27.0.2"
defaultConfig {
applicationId "xxx"
minSdkVersion 16
targetSdkVersion 27
versionCode 31
versionName "0.3.0"
multiDexEnabled true
vectorDrawables.useSupportLibrary = true
ndk {
abiFilters "armeabi-v7a", "x86"
}
manifestPlaceholders = [manifestApplicationId: "${applicationId}",
onesignal_google_project_number: "xxx"]
}
signingConfigs {
release {
if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) {
storeFile file(MYAPP_RELEASE_STORE_FILE)
storePassword MYAPP_RELEASE_STORE_PASSWORD
keyAlias MYAPP_RELEASE_KEY_ALIAS
keyPassword MYAPP_RELEASE_KEY_PASSWORD
}
}
}
splits {
abi {
reset()
enable enableSeparateBuildPerCPUArchitecture
universalApk false // If true, also generate a universal APK
include "armeabi-v7a", "x86"
}
}
buildTypes {
release {
minifyEnabled enableProguardInReleaseBuilds
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
signingConfig signingConfigs.release
}
}
// 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:
// http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits
def versionCodes = ["armeabi-v7a":1, "x86":2]
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
}
}
}
}
repositories {
maven { url "https://jitpack.io" }
}
dependencies {
compile project(':react-native-image-picker')
compile(project(':react-native-maps')){
exclude group: 'com.google.android.gms', module: 'play-services-base'
exclude group: 'com.google.android.gms', module: 'play-services-maps'
}
compile 'com.google.android.gms:play-services-base:+'
compile 'com.google.android.gms:play-services-maps:+'
compile project(':react-native-svg')
compile project(':react-native-dialogs')
compile project(':react-native-onesignal')
compile fileTree(dir: "libs", include: ["*.jar"])
compile project(':react-native-vector-icons')
compile project(':react-native-i18n')
compile project(':react-native-fetch-blob')
compile (project(':react-native-camera')) {
exclude group: "com.android.support"
exclude group: "com.google.android.gms"
}
compile ("com.google.android.gms:play-services-vision:+") {
force = true;
}
compile ('com.android.support:exifinterface:27.0.2') {
force = true;
}
compile "com.android.support:appcompat-v7:27.0.2"
compile 'com.android.support:support-vector-drawable:27.0.2'
compile 'com.android.support:animated-vector-drawable:27.0.2'
compile "com.facebook.react:react-native:+" // From node_modules
}
// 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'
}
android/build.gradle
:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
maven {
url 'https://maven.google.com/'
name 'Google'
}
maven { url 'https://plugins.gradle.org/m2/' }
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.3'
classpath 'gradle.plugin.com.onesignal:onesignal-gradle-plugin:[0.10.1, 0.99.99]'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
mavenLocal()
jcenter()
maven { url "$rootDir/../node_modules/react-native/android" }
maven {
url "https://maven.google.com"
name 'Google'
}
maven { url "https://jitpack.io" }
}
}
Inside one signal list, remove actual device Option > Delete, uninstall debug app then compile again.
+1 not receive onIds with init call from react native js
@congnguyen91 That is expected. The onIds
event will only fire when the subscription state (id's) actually change.
If you want to force onIds
to fire, you can call OneSignal.configure()
after initializing. This is confusing, I know, it's legacy. We'll be refactoring in the next major release to make this less confusing.
Hi @lahed, am I seeing your proposed changes right https://github.com/geektimecoil/react-native-onesignal/issues/525#issuecomment-392224930, the min. required compileSdkVersion
and buildToolsVersion
is now 26 (which means Android 8.0)? (which matches the notes in the setup guide: https://documentation.onesignal.com/v5.0/docs/react-native-sdk-setup#section-adding-the-gradle-plugin).
Does this mean Android 6.x is not supported anymore, because my current compileSdkVersion
and buildToolsVersion
is 23 and 23.0.2.
Thanks for your help!
@natterstefan I'm almost certainly not. The one that defines the lower devices is minSdkVersion, so, everything should work perfectly, unless a native API is not supported. I tested on Android 4.4 and it works fine
I solved here....
I uninstalled the google play services packages and onesignal in sequence.
After this i installed onesignal and everything works now.
Ps: Look in archives created after build and verify if the google play services dll is there.
P2s: I'm using onesignal with xamarin applications.
We have updated our documentation to include making sure compileSdkVersion
and buildToolsVersion
are 26+.
https://documentation.onesignal.com/docs/react-native-sdk-setup#section-adding-the-gradle-plugin
This is one of the things @lahed suggested in https://github.com/geektimecoil/react-native-onesignal/issues/525#issuecomment-392224930.
The other new part is adding the OneSignal Gradle plugin to your project. With this you won't have to manually update appcompat-v7
in your app/build.gradle
and resolves issues with conflicting version in other plugins.
Make sure you have follow the new Adding the Gradle Plugin
section before creating a new issue or replying here if your seeing the same issue
@lahed thank you so much, I've tried to figure out this issue for 2 days, and finally found a very helpful one here, thank you.
I had the same, but got it working by calling onesignal.configure() like this:
OneSignal.init("my-onesignal-id");
OneSignal.configure();
This was with:
"react-native": "~0.56.0",
"react-native-onesignal": "^3.2.6",
followed the onesignal documentation to the bell and had
apply plugin: 'com.onesignal.androidsdk.onesignal-gradle-plugin'
other info:
gradle 3.1.3
ext {
compileSdkVersion = 27
buildToolsVersion = "27.0.3"
minSdkVersion = 16
targetSdkVersion = 27
supportLibVersion = "27.1.1"
googlePlayServicesVersion = "12.0.1"
playServicesVersion = googlePlayServicesVersion
}
In my case, I never got any errors on the OneSignal dashboard; the device was getting registered with OneSignal fine. The onIds
were just not firing.
Adding this right after OneSignal.init() fixed my issue:
OneSignal.configure();
Hope this helps others.
Same issue here
package.json:
{
"name": "smartial",
"version": "0.0.1",
"private": true,
"scripts": {
"android": "react-native run-android",
"ios": "react-native run-ios",
"start": "react-native start",
"test": "jest",
"lint": "eslint .",
"android-linux": "npx react-native run-android --terminal \"$PWD/shkonsole\""
},
"dependencies": {
"@react-native-community/google-signin": "^4.0.3",
"react-native-onesignal": "^3.7.3",
"@sentry/react-native": "^1.4.1",
"react-native-code-push": "^6.2.1",
"react-native-google-places": "^3.1.2",
"@react-native-community/datetimepicker": "^2.4.2",
"@react-native-community/masked-view": "^0.1.10",
"@react-navigation/material-bottom-tabs": "^5.2.12",
"@react-navigation/native": "^5.4.3",
"@react-navigation/stack": "^5.4.0",
"react-native-gesture-handler": "^1.6.1",
"native-base": "^2.13.12",
"react-native-paper": "^3.10.1",
"react-native-safe-area-context": "^2.0.3",
"react-native-reanimated": "^1.9.0",
"react-native-screens": "^2.8.0",
"apisauce": "^1.1.1",
"react-native-config": "^1.2.1",
"react-native-easy-app": "^1.7.3",
"react-native-vector-icons": "^6.6.0",
"@thallyssonklein/border-layout-react-native": "^1.0.14",
"recoil": "github:eveningkid/Recoil#react-native",
"react": "16.13.1",
"react-native": "0.63.2"
},
"devDependencies": {
"@babel/core": "^7.10.0",
"@babel/runtime": "^7.10.0",
"@bam.tech/react-native-make": "^3.0.0",
"@react-native-community/eslint-config": "^1.1.0",
"babel-jest": "^26.0.1",
"eslint": "^7.1.0",
"jest": "^26.0.1",
"metro-react-native-babel-preset": "^0.59.0",
"react-test-renderer": "16.11.0"
},
"jest": {
"preset": "react-native"
}
}
android/build.gradle
// 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
googlePlayServicesAuthVersion = "16.0.1"
}
repositories {
google()
jcenter()
}
dependencies {
classpath('com.android.tools.build:gradle:3.6.3')
classpath 'com.google.gms:google-services:4.1.0'
// 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' }
}
}
android/app/build.gradle
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.smartial"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 24
versionName "3.0.9"
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('smartial-app.jks')
storePassword KEYSTORE_PASSWORD
keyAlias KEY_ALIAS
keyPassword KEY_PASSWORD
}
}
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.release
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"])
// implementation 'com.google.android.gms:play-services-auth:18.0.0'
// implementation "com.google.android.gms:play-services-base:16.0.1"
// implementation "com.google.firebase:firebase-core:16.0.6"
// implementation "com.google.firebase:firebase-messaging:17.3.4"
//noinspection GradleDynamicVersion
implementation "com.facebook.react:react-native:+" // From node_modules
implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.0.0"
compile 'com.android.support:multidex:1.0.1' //enter the latest version
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
}
implementation project(':react-native-config')
compile project(':react-native-onesignal') // I just added this line
}
// 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)
apply from: "../../node_modules/react-native-code-push/android/codepush.gradle"
apply from: "../../node_modules/react-native-vector-icons/fonts.gradle"
apply from: project(':react-native-config').projectDir.getPath() + "/dotenv.gradle"
apply plugin: 'com.google.gms.google-services' // <--- this should be the last line
src/main/AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.smartial">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
<application
android:name=".MainApplication"
android:label="@string/app_name"
android:icon="@mipmap/ic_launcher"
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>
src/debug/AndroidManifest.xml
<?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"/>
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
<application android:usesCleartextTraffic="true" tools:targetApi="28" tools:ignore="GoogleAppIndexingWarning" />
</manifest>
Most helpful comment
@brunoandradebr @DaniloCouto @ifanfaizal I fix, i change sdkVersion and version appcompat
Changes:
app/build.gradle
In dependencies
change
compile "com.android.support:appcompat-v7:23.0.1"
to
compile "com.android.support:appcompat-v7:26.0.1"
My build.gradle (android)
In cmd: cd android && gradlew clean
Uninstall app from my AVD and compile with react-native