I can´t use PubNub in my Android application.
Gradle file:
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.google.android.support:wearable:2.0.1'
compile 'com.google.android.gms:play-services-wearable:10.2.1'
compile 'com.google.android.gms:play-services-maps:10.2.1'
compile group: 'com.pubnub', name: 'pubnub', version: '4.0.5'
compile 'com.pubnub:pubnub:3.7.2'
}
In MainActivity.java:
import com.pubnub.api.*;
public class MainActivity extends Activity implements OnMapReadyCallback,
GoogleMap.OnMapLongClickListener, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener {
//...
private Pubnub pubnub; // CANNOT RESOLVE !
//...
}
How to solve this?
You have a case issue:
Pubnub should be PubNub
Also, you have two versions of PubNub SDK in there:
compile group: 'com.pubnub', name: 'pubnub', version: '4.0.5'
compile 'com.pubnub:pubnub:3.7.2'
So I would assume you are migrating from 3x to 4x and that is the reason you had the Pubnub/PubNub case issue. If you haven't seen it check out the Android V3 to Android V4 Migration Guide.
Related
I am developing a new release for my app with a test package name so i don't annoy current users.
Admob's native ads were showing but once i changed the app package name to the current P.N. that i use in Play Store , ads aren't showing any more and i get this error message :
the previous native ad failed to load. attempting to load another
PS : ads are not restricted for my app
PS 2 : admob is linked to my firebase account
My dependencies :
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.palette:palette:1.0.0'
implementation 'com.google.android.material:material:1.0.0' // Crash when updating
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
testImplementation 'junit:junit:4.12'
//implementation 'de.hdodenhof:circleimageview:3.0.1'
implementation 'com.mikhaellopez:circularimageview:3.2.0' // circle image view
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
implementation "com.leinardi.android:speed-dial:2.0.1"
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'com.android.volley:volley:1.1.1'
implementation 'com.android.support:multidex:1.0.3'
implementation 'com.squareup.picasso:picasso:2.71828'
implementation 'org.jsoup:jsoup:1.8.1'
implementation 'com.facebook.shimmer:shimmer:0.1.0#aar'
// Firebase login
implementation 'com.firebaseui:firebase-ui-auth:6.2.0'
implementation 'com.facebook.android:facebook-android-sdk:5.15.1'
implementation 'com.google.firebase:firebase-analytics:17.2.3' // Firebase Analytics
implementation 'com.google.firebase:firebase-crashlytics:17.0.0-beta02'
// Add the Firebase SDK for Crashlytics.
//implementation 'com.google.firebase:firebase-perf:19.0.5' // Add the dependency for the Performance Monitoring library
implementation 'com.google.firebase:firebase-messaging:20.1.3' // Other Firebase
implementation 'com.github.guy-4444:SmartRateUsDialog-Android:1.00.08' // Rate us
implementation 'com.google.android.gms:play-services-ads:19.0.1' // ads
implementation project(':nativetemplates') // nativetemplates
}
My gradle
buildscript {
repositories {
mavenLocal()
mavenCentral()
jcenter()
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.6.1'
classpath 'com.google.gms:google-services:4.3.3'
// Add the Crashlytics Gradle plugin.
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.0.0-beta03'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
mavenLocal()
google()
jcenter()
maven { url 'https://jitpack.io' }
}
}
Newest Fabric documentation says
If using the Android plugin for Gradle version 2.2.0+ with the externalNativeBuild DSL, you should remove the androidNdkOut and androidNdkLibsOut properties, as these paths will automatically be detected by the Fabric plugin.
But it's not working for me because my native code located in library module I guess. I have native code in library module and enabled Crashlytics in app module. How can I make it work?
I am using com.android.tools.build:gradle:2.3.3 and io.fabric.tools:gradle:1.23.0.
Error:
com.crashlytics.tools.android.project.codemapping.CodeMappingException: Crashlytics could not find NDK output directory '[my app module path]/obj'. Is the -androidNdkOut setting configured correctly?
UPDATE.
I moved Crashlytics configuration to my library module:
buildscript {
repositories {
jcenter()
maven { url 'https://maven.fabric.io/public' }
}
dependencies {
classpath('com.android.tools.build:gradle:2.3.3') {
force = true
}
classpath 'io.fabric.tools:gradle:1.23.0'
}
}
repositories {
jcenter()
}
apply plugin: 'com.android.library'
apply plugin: 'io.fabric'
android {
compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion
publishNonDefault true
defaultConfig {
minSdkVersion 16
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 1
versionName "1.0"
ndk {
moduleName "core"
}
externalNativeBuild {
ndkBuild {
abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64", "mips", "mips64"
}
}
}
lintOptions {
abortOnError false
}
buildTypes {
debug {
debuggable true
jniDebuggable true
minifyEnabled false
}
release {
debuggable false
jniDebuggable false
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
externalNativeBuild {
ndkBuild {
path 'jni/Android.mk'
}
}
}
crashlytics {
enableNdk true
baseManifestPath '../app/src/main/AndroidManifest.xml'
}
dependencies {
compile "com.android.support:support-v4:${rootProject.ext.supportLibVersion}"
compile "com.android.support:appcompat-v7:${rootProject.ext.supportLibVersion}"
compile "com.android.support:design:${rootProject.ext.supportLibVersion}"
compile "com.google.android.gms:play-services-maps:${rootProject.ext.playServicesVersion}"
compile "com.google.android.gms:play-services-location:${rootProject.ext.playServicesVersion}"
}
My app module now contains only dependencies:
dependencies {
// Crashlytics Kit
compile('com.crashlytics.sdk.android:crashlytics:2.6.8#aar') {
transitive = true
}
// NDK Kit
compile('com.crashlytics.sdk.android:crashlytics-ndk:1.1.6#aar') {
transitive = true
}
}
But now I getting error
Could not find method baseManifestPath() for arguments [path to my Manifest] on object of type com.crashlytics.tools.gradle.CrashlyticsExtension.
I faced with same issue. I have main application module 'app' and 'library' module contains ndk sources.
Update June 2019
Last month I've been gotten an error while performing 'crashlyticsUploadSymbolsRelease' command with gradle. Seems location of libs files changed.
The following code allows me to see NDK crashes with line numbers:
crashlytics {
enableNdk true
androidNdkOut '../library/build/intermediates/cmake/release/obj'
androidNdkLibsOut '../library/build/intermediates/stripped_native_libs/release/out/lib'
}
Hope it helps.
Mike from Fabric here. That improvement will help when the NDK assets are built directly into your app, but not when building as a separate library project. When the native code is part of an external library, the project structure may differ. You’ll need to include an Ant or Gradle task to temporarily create the appropriate project structure before running the symbol upload.
Once you have assembled the appropriate project structure and you have your AndroidManifest.xml file available, you’ll need to set a few properties for the Fabric plugin to use.
Using Ant
For Ant, you should create a fabric.properties file with the following properties:
enableNDK=true
androidBaseManifest=AndroidManifest.xml
externalCSymUpload=true
Then, to run the symbol upload, invoke the crashlytics-devtools.jar which can be found inside the Ant plugin zip file. Calling java -jar crashlytics-devtools.jar -properties fabric.properties will start the upload process.
The androidBaseManifest property defines the path to the AndroidManifest.xml file with your app’s API key and package name.
Using Gradle
For Gradle, you’ll need a minimal Android build.gradle file and you can define the properties directly in a crashlytics {} block: The Fabric Gradle plugin requires the Android Gradle plugin to be applied before it in your build.gradle.
apply plugin: 'com.android.library'
apply plugin: 'io.fabric'
android {
compileSdkVersion <CURRENT COMPILESDKVERSION>
buildToolsVersion "<YOUR BUILD TOOLS VERSION>"
defaultConfig {
applicationId "<YOUR APP'S PACKAGE NAME>"
}
}
crashlytics {
enableNdk true
baseManifestPath 'AndroidManifest.xml'
}
Then run ./gradlew crashlyticsUploadSymbolsRelease to upload your symbols.
I have set up a brand new project in Android Studio 1.1 RC 1:
Created an Android project [app] (because there is no way to create an App Engine backend project right away).
Added an existing backend module by first creating a new App Engine module and then manually importing the files [backend].
Removed the Android app module [app].
Added a Java library module, same procedure, first creating a new module, then importing files [common].
Everything compiles fine, but Android Studio has two problems:
When I look at Project Structure, the [common] module is missing in the left pane, but it still appears as referenced module in the right pane!?
My Project tree looks fine and all modules are recognized, but gradle is telling me the sync failed.
Gradle says "Task '' not found in root project" ('' is empty string as it seems). I get a Warning and an exception in the log when running from Terminal, but it doesn't seem to be related (related to Indexing), so I haven't included it here.
settings.gradle has both modules specified:
include ':backend', ':common'
I tried to exchange the .iml file of the main project with a fake one which contains both modules, with the result that (besides multiple side effects) both modules were there. (I restored the original state because of the side-effects.)
Here are my gradle files:
Root module:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.0.1'
}
}
allprojects {
repositories {
jcenter()
}
}
[backend]
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.google.appengine:gradle-appengine-plugin:1.9.17'
}
}
repositories {
jcenter();
}
apply plugin: 'java'
apply plugin: 'war'
apply plugin: 'appengine'
sourceCompatibility = JavaVersion.VERSION_1_7
targetCompatibility = JavaVersion.VERSION_1_7
dependencies {
appengineSdk 'com.google.appengine:appengine-java-sdk:1.9.17'
compile 'com.google.appengine:appengine-endpoints:1.9.17'
compile 'com.google.appengine:appengine-endpoints-deps:1.9.17'
compile 'javax.servlet:servlet-api:2.5'
compile 'com.googlecode.objectify:objectify:5.1.3'
compile 'com.squareup.retrofit:retrofit:1.9.0'
compile 'io.jsonwebtoken:jjwt:0.4'
compile project(':common')
}
appengine {
downloadSdk = true
appcfg {
oauth2 = true
}
endpoints {
getClientLibsOnBuild = true
getDiscoveryDocsOnBuild = true
}
}
[common]
apply plugin: 'java'
task sourcesJar(type: Jar, dependsOn:classes) {
classifier = 'sources'
from sourceSets.main.allSource
}
artifacts {
archives sourcesJar
}
dependencies {
compile 'com.google.http-client:google-http-client-android:1.18.0-rc'
compile 'com.google.code.gson:gson:2.3.1'
}
apply plugin: 'maven'
group = 'cc.closeup'
version = 'v2-2.0-SNAPSHOT'
install {
repositories.mavenInstaller {
pom.artifactId = 'common'
pom.packaging = 'jar'
}
}
Any ideas? Anything else that you'd like to see here?
If you want to build an AE project only. You could try this tutorial for intellij idea jetbrains.com/idea/help/creating-google-app-engine-project.html
My mistake was I removed [app]. It seems that if you create an App Engine backend module, you must keep a "fake" frontend module in the same project to keep Android Studio/gradle happy.
In earlier Android Studio versions it was possible to remove the frontend module without problems, but it seems Google has locked this somehow. It still works when I keep the fake frontend module.
--
Why I configured it this way? In my configuration, I have backend and frontend modules in different projects, and I have the backend project install libraries into local Maven, which I then pick up within my frontend project (with a team you would choose a local Maven server). This configuration has multiple advantages, for example that I can test backend/frontend on two screens simultaneously without switching back and forth all the time. Some companies may also want this configuration to keep their backend code separate and secure.
My Gradle was working up until I upgraded to Android Studio 0.8.5. Now the gradle build is broken with the error message:
Error:Relying on packaging to define the extension of the main artifact has been deprecated and is scheduled to be removed in Gradle 2.0
(of class java.lang.String)
I am attaching the build.gradle file for reference:
buildscript {
repositories {
mavenCentral()
maven { url 'http://saturday06.github.io/gradle-android-scala-plugin/repository/snapshot' }
flatDir {
dirs 'libs/'
}
// flatDir {
// dirs '/Users/sto/workspace/robolectric-gradle-plugin.sonny/build/libs/'
// }
// flatDir {
// dirs '/Users/sto/workspace/gradle-android-scala-plugin/build/libs/'
// }
}
dependencies {
classpath 'com.android.tools.build:gradle:0.12.+'
classpath 'jp.leafytree.gradle:gradle-android-scala-plugin:1.0-SNAPSHOT'
classpath 'org.robolectric:robolectric-gradle-plugin.sonny:0.12.1'
classpath "commons-io:commons-io:2.4"
classpath 'net.lingala.zip4j:zip4j:1.3.2'
}
}
repositories {
mavenCentral()
flatDir {
dirs 'libs/'
}
}
apply plugin: 'com.android.application'
apply plugin: 'android-scala'
apply plugin: 'robolectric'
robolectric {
include '**/*Test*.class'
}
android {
compileSdkVersion 19
buildToolsVersion '20.0.0'
defaultConfig {
minSdkVersion 15
targetSdkVersion 19
versionCode 1
versionName '1.0'
// testInstrumentationRunner "android.test.InstrumentationTestRunner"
testInstrumentationRunner "com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner"
}
packagingOptions {
exclude 'rootdoc.txt'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
exclude 'decoder.properties'
exclude 'META-INF/LICENSE'
exclude 'META-INF/NOTICE'
exclude 'LICENSE.txt'
}
sourceSets {
main {
java.srcDirs = ['src/main/gen-java', 'src/main/java', 'src/main/scala']
}
androidTest.setRoot('src/androidTest/')
androidTest {
java.srcDirs = ['src/androidTest/scala', 'src/androidTest/java']
}
}
android {
lintOptions {
abortOnError false
}
}
buildTypes {
debug {
runProguard true
proguardFile file('proguard-rules-debug.txt')
}
release {
runProguard true
proguardFile file('proguard-rules.txt')
}
}
}
dependencies {
compile project(':swiper')
compile 'org.scala-lang:scala-library:2.11.2'
compile 'org.json4s:json4s-native_2.11:3.2.10'
compile 'com.google.android.gms:play-services:4.0.30'
compile 'com.google.android:android:4.1.1.4'
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.2'
compile 'com.loopj.android:android-async-http:1.4.4'
compile 'com.edmodo:cropper:1.0.1'
compile 'de.hdodenhof:circleimageview:1.1.1'
compile 'org.fusesource.mqtt-client:mqtt-client:1.10'
compile 'log4j:log4j:1.2.17'
compile 'de.mindpipe.android:android-logging-log4j:1.0.3'
compile('org.apache.thrift:libthrift:0.9.1') {
transitive = false
}
compile 'ch.hsr:geohash:1.0.10'
compile 'org.slf4j:slf4j-android:1.7.7'
androidTestCompile('junit:junit:4.11') {
// exclude module: 'hamcrest-core'
}
androidTestCompile('org.robolectric:robolectric:2.3') {
exclude module: 'classworlds'
exclude module: 'commons-logging'
exclude module: 'httpclient'
exclude module: 'maven-artifact'
exclude module: 'maven-artifact-manager'
exclude module: 'maven-error-diagnostics'
exclude module: 'maven-model'
exclude module: 'maven-project'
exclude module: 'maven-settings'
exclude module: 'plexus-container-default'
exclude module: 'plexus-interpolation'
exclude module: 'plexus-utils'
exclude module: 'wagon-file'
exclude module: 'wagon-http-lightweight'
exclude module: 'wagon-provider-api'
}
}
I am still able to build using gradle (v1.12) from command line, but without using Studio I can't set my usual breakpoints for debug.
Update:
Turns out what was causing this issue for me (and likely for you, given the build file above) was the Scala plugin. There was a bug with the Scala plugin preventing Android Studio from importing Gradle projects. The fix for this has already been pushed live, so to get Android Studio working again you can either disable the Scala plugin or update it.
Open Settings/Preferences
Open the Plugins section on the left
Find the Scala plugin
Right click on the plugin and click Reload List of Plugins
Right click on the plugin again and click Update Plugin
This allowed me to do a Gradle sync and build from Android Studio again, I hope it helps for you!
Original answer below:
It looks like this is a bug with Android Studio. Hopefully it'll be fixed soon.
In the meantime, you can debug your application without launching it from Android Studio by attaching the debugger to a running process of the application. You can do this two ways.
Via the menus: Run -> Attach Debugger to Android Process
Pressing the button that is two to the right of the play/build button. It looks like a grey phone/rectangle with a little green bug in the bottom right
After you do this, a dialog will show up listing available applications to debug. Select your application and press OK. Your breakpoints should now work.
If you need to debug something that happens on app startup, you can tell Android to wait for a debugger when launching certain applications with the following steps:
On the phone open the Android Settings
Open the Developer Options
Make sure Wait for debugger is checked
Press Select debug app and choose your application
Then when you start your application, it'll wait for you to attach a debugger via one of the two methods mentioned above.
Hope this helps!
I have the CastSampleActivity set up with GoogleCastSdkAndroid, mediarouter and appcompact as dependencies, and I am able to build and launch on my phone. However no chromecast icon appears in the resulting app:
http://i.stack.imgur.com/KxMFJ.png (screenshot)
When I open activity_cast_sample.xml, I see the following:
The following classes could not be instantiated:
- android.support.v7.app.MediaRouteButton (Open Class, Show Error Log)
Which leads to a stack trace:
java.lang.NullPointerException
at com.android.layoutlib.bridge.android.BridgeContext.resolveThemeAttribute(BridgeContext.java:278)
at android.content.res.Resources_Theme_Delegate.resolveAttribute(Resources_Theme_Delegate.java:64)
at android.content.res.Resources$Theme.resolveAttribute(Resources.java:1426)
at android.support.v7.app.MediaRouterThemeHelper.isLightTheme(MediaRouterThemeHelper.java:51)
at android.support.v7.app.MediaRouterThemeHelper.createThemedContext(MediaRouterThemeHelper.java:30)
at android.support.v7.app.MediaRouteButton.<init>(MediaRouteButton.java:121)
at android.support.v7.app.MediaRouteButton.<init>(MediaRouteButton.java:117)
Anyone know what's going on?
This is a completely unmodified CastSampleActivity from GitHub, except for my app_id of course. I am able to cast from Youtube, Netflix, etc...
The instantiation error is normal.
Did you change the manifest or the theme settings in any way?
I had this problem too, it's incorrect project setup. Are you using Gradle? If you are, then have your build.gradle file somewhat like: (remember to put the googlecastsdk library in your libs folder)
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.6.1+'
}
}
apply plugin: 'android'
repositories {
mavenCentral()
}
android {
compileSdkVersion 18
buildToolsVersion "18.1.0"
defaultConfig {
minSdkVersion 7
targetSdkVersion 16
}
}
dependencies {
compile "com.android.support:appcompat-v7:18.0.+"
compile "com.android.support:mediarouter-v7:18.0.+"
compile files('libs/GoogleCastSdkAndroid.jar')
}