问题在运行tns的同一个Android设备上运行多个NativeScript应用程序

时间:2016-05-16 18:27:39

标签: android nativescript

NativeScript 2.0.0,Windows 10

当尝试在同一个Android设备上运行多个NativeScript应用程序时,tns运行android命令会停止并显示消息:

Successfully deployed on device with identifier '192.168.99.100:5555'.

未安装该应用程序。

经过一番调查,我尝试直接使用adb在Android设备上安装应用程序:

adb "-s" "192.168.99.100:5555" "install" "-r" "<path to apk>.apk"

该命令响应以下内容:

961 KB/s (15394490 bytes in 15.642s)
WARNING: linker: /system/lib/libhoudini.so has text relocations. This is wasting memory and prevents security hardening. Please fix.
        pkg: /data/local/tmp/<app name>-debug.apk
Failure [INSTALL_FAILED_CONFLICTING_PROVIDER]

对INSTALL_FAILED_CONFLICTING_PROVIDER进行一些调查后发现以下链接:

我可以说这是一个丑陋的问题。

在NativeScript项目中,在目录\ platforms \ android \ build \ intermediates \ explosion-aar \ com.google.android.gms \ play-services-measurement \ 8.4.0目录中研究更多内容包含以下内容的模板:

<provider
      android:authorities="${applicationId}.google_measurement_service"
      android:name="com.google.android.gms.measurement.AppMeasurementContentProvider"
      android:exported="false"/>

但是从未定义过applicationId,因此当添加了多个具有此提供程序的应用程序时,第二个应用程序无法安装。

2 个答案:

答案 0 :(得分:2)

我的手机和模拟器上安装了多个NS应用程序;但是当你创建一个新的应用程序;检查一下你是否以某种方式使用相同的内部名称。 (如果您复制以前的项目,这很容易发生)

打开位于项目文件夹最外层根目录的main / primary package.json文件。

在这个package.json文件中你应该有一个键:

"nativescript": {
        "id": "org.nativescript.test3",
        "tns-android": {
            "version": "2.0.0"
        }
    },

&#34; id&#34;是将安装在手机上的应用程序的基础名称。在这种情况下;这是令人敬畏的&#34; org.nativescript.test3&#34;项目。

如果您获得了重复的ID,那么该应用将在部署时覆盖彼此。

还有第二个原因,这个问题的实际原因也是问题的作者。但是我会留在这里为任何可能遇到这种情况的未来的人们提供一个有效的答案。

作者使用的是Google Play服务插件,它有一个AppMeasurementContentProvider,如果您没有在配置中设置applicationId,它将默认为空白ID;这意味着它将与使用GPS的任何其他应用程序冲突,该应用程序也没有设置applicationId。

这个错误的真正令人讨厌的是它会与任何其他开发人员的应用程序冲突,这些开发人员也将他们的applicationId留空。因此,只有一个应用程序可以安装;任何其他具有空白applicationId的应用程序都无法在该设备上安装。

解决方案是打开 /app/App_Resources/Android/app.gradle 文件,我们将为其添加新值。

NativeScript v2.00的当前版本如下所示:

android {  
  defaultConfig {  
    generatedDensities = []  
  }  
  aaptOptions {  
    additionalParameters "--no-version-vectors"  
  }  
} 

如果你还记得这个答案的第一部分和重复的id;我们引用的 package.json 为您提供了要使用的名称。所以在我的情况下,我会添加到

defaultConfig {
   applicationId = "org.nativescript.test3"
}

所以最终文件看起来像这样:

android {  
  defaultConfig {  
    generatedDensities = []  
    applicationId = "org.nativescript.test3"
  }  
  aaptOptions {  
    additionalParameters "--no-version-vectors"  
  }  
} 

这与以下内容有关: Install shows error in console: INSTALL FAILED CONFLICTING PROVIDER https://code.google.com/p/analytics-issues/issues/detail?id=784

答案 1 :(得分:0)

这个解决方法对我有用:

在app / App_Resources / Android / AndroidManifest.xml文件中添加:

<provider
   tools:replace="android:authorities"
   android:name="com.google.android.gms.measurement.AppMeasurementContentProvider"
   android:authorities="MY_APPLICATION_ID.gms.measurement.google_measurement_service"  
   android:exported="false" />

MY_APPLICATION_ID是应用程序的包(手动放置,因为__PACKAGE__不起作用) 不要忘记声明de tools命名空间:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="__PACKAGE__" ...>