La aplicación Android Wear no se instala a través del teléfono

Estoy tratando de instalar una aplicación portátil a través de un teléfono Android usando el ‘Paquete con el método de Android Studio’ que se encuentra aquí, pero no está funcionando. El apk nunca se instala en el dispositivo portátil. Esta es la salida de logcat:

07-28 15:11:54.107 766-820/? W/PackageManager﹕ Unknown permission com.google.android.wearable.READ_SETTINGS in package com.google.android.gms 07-28 15:11:54.117 766-820/? W/PackageManager﹕ Not granting permission com.google.android.gm.permission.AUTO_SEND to package com.google.android.wearable.app (protectionLevel=2 flags=0x88be44) 07-28 15:11:54.117 766-820/? W/PackageManager﹕ Not granting permission android.permission.MEDIA_CONTENT_CONTROL to package com.google.android.wearable.app (protectionLevel=18 flags=0x88be44) 07-28 15:11:55.047 632-632/? D/WearablePkgInstaller﹕ Got PackageUpdateReceiver message Intent { act=android.intent.action.PACKAGE_REMOVED dat=package:my.package.name flg=0x4000010 cmp=com.google.android.wearable.app/com.google.android.clockwork.companion.packagemnager.PackageUpdateReceiver (has extras) } 07-28 15:11:55.177 632-632/? D/WearablePkgInstaller﹕ Got PackageUpdateReceiver message Intent { act=android.intent.action.PACKAGE_ADDED dat=package:my.package.name flg=0x4000010 cmp=com.google.android.wearable.app/com.google.android.clockwork.companion.packagemnager.PackageUpdateReceiver (has extras) } 

Como nota al margen, puedo empaquetar manualmente (también se describe en el enlace anterior) y el apk se instala en el dispositivo portátil cuando lo ejecuto en el teléfono. Estoy usando buildToolsVersion 20.0.0, estoy ejecutando Android Studio 0.8.2 y tengo esta línea en build.gradle de mi módulo de teléfono:

 wearApp project(':wearable') 

Me he quedado sin ideas sobre cómo depurar esto, los registros parecen bastante inútiles. ¿Algunas ideas?

EDITAR: va a publicar secciones relevantes de Manifest y build.gradle tanto para el teléfono como para el módulo portátil.

Manifiesto del teléfono

                               <!--  ...The rest of the activities   

Auricular build.gradle

 buildscript { repositories { maven { url 'http://download.crashlytics.com/maven' } } dependencies { } } apply plugin: 'com.android.application' apply plugin: 'crashlytics' apply plugin: 'newrelic' repositories { mavenCentral() maven { url 'http://download.crashlytics.com/maven' } } dependencies { compile fileTree(dir: 'libs', include: '*.jar') compile 'com.android.support:support-v4:20.0.+' compile 'com.android.support:appcompat-v7:20.0.+' compile project(':facebook') compile project(':mopub-sdk') compile project(':GooglePlay') compile 'com.newrelic.agent.android:android-agent:3.+' compile 'com.crashlytics.android:crashlytics:1.+' androidTestCompile fileTree(dir: 'tests/libs', include: '*.jar') wearApp project(':wearable') } android { compileSdkVersion 19 buildToolsVersion '20.0.0' //Build type is debug to avoid conflict with Proguard testBuildType = "debug" defaultConfig { testApplicationId "my.package.name.test" testInstrumentationRunner "com.zutubi.android.junitreport.JUnitReportTestRunner" } lintOptions { // We do not want to abort the build due to lint errors abortOnError false } sourceSets { // Main is the default unless stated otherwise main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] resources.srcDirs = ['src'] aidl.srcDirs = ['src'] renderscript.srcDirs = ['src'] res.srcDirs = ['res'] assets.srcDirs = ['assets'] } // Testing androidTest.setRoot('tests') androidTest { java.srcDirs = ['tests/src'] res.srcDirs = ['tests/res'] } // Cannot add beta icons in here because custom flavour source sets are created // during comstacktion and name duplication will result in a crash } signingConfigs { debug { storeFile file("**") storePassword "***" keyAlias "***" keyPassword "***" } release { storeFile file("***") storePassword "***" keyAlias "***" keyPassword "***" } } buildTypes { // Development configuration debug { debuggable true jniDebugBuild true signingConfig signingConfigs.debug runProguard false } // Release configuration release { debuggable false jniDebugBuild false signingConfig signingConfigs.release // COMMENTED PROGUARD OUT FOR NOW TO SEE IF IT WILL HELP // // Configure ProGuard // runProguard true // // General configuration // proguardFile 'proguard/proguard.cfg' // // Add all of our component-specific configurations (excluding the Android generic, as we want it to be last) // FileTree tree = fileTree(dir: 'proguard', include: '*.txt', exclude: 'Android.txt') // tree.each {File file -> // proguardFile file.getCanonicalPath() // } // // Add a fallback configuration for all Android apps // proguardFile 'proguard/Android.txt' } // Release configuration, but debuggable and without ProGuard // Used for testing features like G+ and in-app billing where a release config is required staging { debuggable true jniDebugBuild true signingConfig signingConfigs.release runProguard false } } productFlavors { production { applicationId "my.package.name" } internalBeta { applicationId "my.internalbetapackage.name" // Beta icons sourceSets.internalBeta.res.srcDirs = ['res-beta/internal'] } externalBeta { applicationId "my.externalbetapackage.name" // Beta icons sourceSets.externalBeta.res.srcDirs = ['res-beta/external'] } testing{ applicationId "my.package.name" } } // Without this, gradle will complain that duplicate files were added to the APK, see: // http://stackoverflow.com/questions/20673888/duplicate-files-copied-android-studio-0-4-0 packagingOptions { exclude 'META-INF/LICENSE.txt' // twitter4j exclude 'META-INF/ASL2.0' // jackson exclude 'META-INF/LICENSE' // jackson exclude 'META-INF/NOTICE' // jackson } } task makeTestApks { dependsOn "assembleProductionRelease" dependsOn "assembleProductionTest" } 

Wearable Manifest

                       

Wearable build.gradle

 repositories { mavenCentral() } apply plugin: 'com.android.application' apply plugin: 'newrelic' android { compileSdkVersion 19 buildToolsVersion '20.0.0' defaultConfig { minSdkVersion 19 targetSdkVersion 19 versionCode 259 versionName "4.6.1" } signingConfigs { debug { keyAlias '***' keyPassword '***' storeFile file('sameAsHandset/debug.keystore') storePassword '***' } release { storeFile file("sameAsHandset/android.keystore") storePassword "***" keyAlias "***" keyPassword "***" } } buildTypes { release { debuggable true jniDebugBuild false signingConfig signingConfigs.release } } productFlavors { production { applicationId "my.package.name" } internalBeta { applicationId "my.internalBetaPackage.name" // Beta icons sourceSets.internalBeta.res.srcDirs = ['res-beta/internal'] } externalBeta { applicationId "my.externalBetaPackage.name" // Beta icons sourceSets.externalBeta.res.srcDirs = ['res-beta/external'] } testing{ applicationId "my.package.name" } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile project(':GooglePlay') compile 'com.newrelic.agent.android:android-agent:3.+' } 

Para responder a @odiggity específicamente, en el archivo build.gradle de su aplicación de teléfono, debe mencionar el nombre exacto de la carpeta de la aplicación de desgaste . Si creó el proyecto en Android Studio , su build.gradle debería verse así:

  wearApp project(':wear') 

Esto puede suceder por las siguientes razones:

  • Los "permissions" la aplicación Wear & Mobile no son los mismos.

Esto no está documentado en ningún lado en el sitio web de los desarrolladores, sin embargo, lo encontré con mi experiencia personal. La razón por la que puedo pensar detrás de esta restricción es que Google quiere evitar que los desarrolladores sigilosos exploten a los usuarios y su privacidad.

  • Package name del Package name de Wear & Mobile no coincide.
  • Application ID (archivo build.gradle) de la aplicación Mobile & wear no coincide.
  • Compresión de activos

Si está utilizando Eclipse para el desarrollo, asegúrese de desactivar la “Compresión de activos”, de lo contrario, el archivo “.apk” en la carpeta sin procesar se double compressed por la double compressed y el phone won't be able to recognize si la aplicación móvil está empaquetando la aplicación de desgaste. o no.

Mejor solución:

Use Android Studio.

  1. Crear proyecto de Android
  2. Seleccione el proyecto Phone & Wear
  3. Siga los pasos para la creación del proyecto
  4. Copie todos los permisos usados ​​en la aplicación Wear en el Manifiesto de la aplicación móvil o viceversa

Tuve que usar sabores de productos de desgaste . Tenía sabores tanto en aplicaciones de mano como de uso. Para resolver mi problema, utilicé el siguiente código en el archivo de la aplicación de mano build.gradle:

 freeWearApp project(path: ':wear', configuration: 'wearfreeRelease') fullWearApp project(path: ':wear', configuration: 'wearfullRelease') 

donde, libre y lleno son los sabores del módulo de mano, sin desgaste y desgastante son sabores de desgaste mudule, Release es el nombre del módulo de desgaste buildtype.

Y no se olvide de publishNonDefault true en el bloque de Android de la gradle de desgaste.

Tuve este problema incluso después de verificar los nombres de los paquetes, las ID de las aplicaciones y asegurarme de que el módulo de desgaste no tenía ningún permiso que el módulo portátil no tuviera.

Mi problema era que estaba solicitando el permiso android.permission.BIND_NOTIFICATION_LISTENER_SERVICE en AndroidManifest.xml para el módulo portátil. Parece que esto solo debe solicitarse para el módulo de mano.

por lo que sé que los sabores del producto no son compatibles en este momento, use la comstackción manual (activo o sin procesar) o elimine los sabores del producto.

Según mi experiencia, solo funciona al comstackr una versión de lanzamiento firmada. Al implementar una comstackción de depuración, nunca instalé la aplicación de desgaste para mí. Con el lanzamiento firmado funcionó con buildToolsVersion “19.1.0”.

En este caso específico, puedo ver que estás usando “comstackr proyecto (‘: GooglePlay’)”. ¿Es esa la última versión? (compile ‘com.google.android.gms: play-services-wearable: +’)

He estado teniendo este problema recientemente, y al final lo siguiente lo solucionó;

  • Desinstalar la aplicación anterior
  • Reinicia el celular
  • Reiniciar el desgaste
  • Desconecte y vuelva a conectar el desgaste
  • Re-sincronización de aplicaciones en la aplicación Android Wear

Y luego apareció en el reloj. Antes de esto, probé todo y estaba convencido de que la construcción no funcionaba bien

Solo quería agregar algo que no había visto en muchas respuestas.

Debe hacer coincidir el applicationId de applicationId en su aplicación de mano y usar la aplicación.

Anteriormente pensé que necesitabas tener tanto en el dispositivo de mano como en el manifiesto de visualización, con add: android:required="true" para el manifiesto de uso y android:required="false" para el dispositivo.

ESTO ES FALSO No necesita lo anterior en el manifiesto de la computadora de mano. De hecho, con Wear 2.0, Google ha realizado algunos cambios que no le permitirán cargar ningún apk con minSdk menor que 23 si está en su computadora de mano aplicación Perdón por cualquier confusión.

Tengo el mismo problema, resultó que newrelic está instrumentando la aplicación Android Wear. Intenta comentar la línea: // aplica el complemento: ‘newrelic’

No pude encontrar la manera de decirle a newrelic que se mantenga alejado de la aplicación de desgaste …