Android Wear app pas l'installation par le biais du combiné

Je vais essayer d'obtenir un portable application installée par un Androïde appareil en utilisant le Paquet avec Android Studio méthode " trouvés ici mais cela ne fonctionne pas. L'apk est jamais installé dans l'appareil portable. C'est le logcat de sortie:

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.packagemanager.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.packagemanager.PackageUpdateReceiver (has extras) }

Comme une note de côté, je suis en mesure de package manuellement (également décrite dans le lien ci-dessus) et de l'apk est installée sur le portable quand je le lance sur le combiné. Je suis à l'aide de buildToolsVersion 20.0.0, je suis en cours d'exécution Android Studio 0.8.2 et avoir cette ligne dans mon combiné du module de construire.gradle:

wearApp project(':wearable')

Je suis à court d'idées sur la façon de débogage, les journaux semblent assez inutile. Des idées?

EDIT: Allez poster les articles pertinents de Manifester et construire.gradle pour fois sur le téléphone et portable module.

Combiné Manifeste

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="my.package.name"
android:installLocation="auto"
android:versionCode="259"
android:versionName="4.6.1">
<!-- =========== -->
<!-- PERMISSIONS -->
<!-- =========== -->
<permission
android:name="my.app.name.permission.C2D_MESSAGE"
android:protectionLevel="signature"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<!-- ====================== -->
<!-- APPLICATION PROPERTIES -->
<!-- ====================== -->
<uses-sdk
android:minSdkVersion="9"
android:targetSdkVersion="19" />
<supports-screens
android:anyDensity="true"
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"
android:xlargeScreens="true"/>
<application
android:name=".AppState"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.MyApp"
android:hardwareAccelerated="true">
<!-- ==================== -->
<!-- GOOGLE PLAY SERVICES -->
<!-- ==================== -->
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version"/>
<!-- ================== -->
<!-- Android Wear -->
<!-- ================== -->
<service
android:name=".wear.DataLayerListenerService" >
<intent-filter>
<action android:name="com.google.android.gms.wearable.BIND_LISTENER" />
</intent-filter>
</service>
<!-- This is used for manual packaging I have this commented out when -->
<!-- packaging with Android Studio-->
<!--<meta-data android:name="com.google.android.wearable.beta.app"-->
<!--android:resource="@xml/wearable_app_desc"/>-->
...The rest of the activities
</application>
</manifest>

Combiné construire.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 compilation 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"
}

Portable Manifeste

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="my.package.name">
<uses-feature android:name="android.hardware.type.watch" android:required="false"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@android:style/Theme.DeviceDefault" >
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<activity
android:name=".WearReaderActivity"
android:label="MyApp" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="my.package.name.READ"/>
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service
android:name=".wear.DataLayerListenerService" >
<intent-filter>
<action android:name="com.google.android.gms.wearable.BIND_LISTENER" />
</intent-filter>
</service>
</application>
</manifest>

Portable construire.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.+'
}
  • Avez-vous essayé le DataLayer de l'échantillon qui vient de le SDK Manager? Il montre comment construire et assembler une demande à la fois du téléphone et de l'usure, vous devriez vérifier pour vous assurer qu'il fonctionne. Ensuite, vous pouvez comparer les fichiers XML pour voir ce qui pourrait être différent avec votre application.
  • oui je l'ai et il fonctionne très bien. J'ai essayé de les comparer à la mienne et tout à l'air bien, mais mon application est plus complexe qu'il avec des saveurs différentes, donc il y a assez peu de différences
  • Je ne suis pas sûr que vous pouvez compiler avec l'api 19 au lieu de l'api 20. Aussi à l'usure et une application mobile doit avoir les mêmes autorisations.
  • l'échantillon DataLayer compile avec 19. Il a essayé avec 20 de toute façon et il ne fonctionne toujours pas. Je crois que votre deuxième suggestion est incorrect, le portable ne peut pas avoir une permission que le combiné n'a pas, mais c'est bien que le combiné dispose des autorisations le portable ne fonctionne pas. Mon portable ne dispose pas de toutes les autorisations.
  • vous avez raison sur le second point! Mon erreur.
  • Je vous remarquerez que de déclarer le numéro de version dans AndroidManifest.xml pour le combiné, mais dans la construction.gradle pour le portable. Pouvez-vous faire à la fois dans la construction.gradle fichier, tout comme le DataLayer échantillon n'? Il est important que ces données sont identiques, et vous voulez juste être sûr sur ce point.
  • Je suis sûr que le numéro de version pour le portable ne doit pas être le même que le numéro de version pour le combiné. J'ai essayé de faire en sorte qu'ils étaient les mêmes et le déplacement de la version pour le construire.gradle sur le combiné app de toute façon et il ne fonctionne toujours pas.
  • découvrez la mise à jour de réponse.
  • J'ai eu de travail. Les saveurs étaient tout gâcher. J'avais créé à l'origine de l'usure de l'application avec une version bêta de la saveur, et a ensuite essayé de la construire avec une production de saveur. J'ai dû créer un nouveau projet avec la production de la saveur et de copier tout le code. Je dois également utiliser Build -> Générer signé apk et sélectionnez la Clé du chemin d'accès au magasin, en précisant les chemins vers le même magasin de clés dans la construction.gradle fichier qui ne fonctionne pas pour une raison quelconque. Espérons que cela aide 🙂
  • Je crois que j'ai suivi tout ce qui est suggéré ici, dans le post, mais encore le mobile apk intégré avec l'usure apk est installé sur mon appareil mobile, alors qu'une notification (numérisé menace pour la sécurité) apparaît sur mon usure émulateur virtuel au plus... Pourriez-vous m'aider ici? Voici mon post dans plus de détails: stackoverflow.com/questions/36266770/...
  • Pour l'erreur -103, c'est parce que gradle est pas la signature de l'usure de l'application. J'étais en train de dans cette et il s'avère que j'ai dû reproduire une signature config pour le porter app dans mon construire.gradle comme elle n'était pas signée à tous.

InformationsquelleAutor odiggity | 2014-07-28