无法在同一设备上安装调试版和发行版

时间:2016-08-26 14:58:01

标签: android android-gradle android-build-type

我已使用applicationIdSuffix在项目中配置了构建变体,以便我可以在我的设备上安装调试版和发行版。 这是我的build.gradle(相关部分):

 buildTypes {
        debug {
            buildConfigField "String", "BASE_URL", '"http://dev.xyz.com"'

            applicationIdSuffix ".debug"
        }
        release {
            buildConfigField "String", "BASE_URL", '"http://api.xyz.com"'
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

但是当我尝试安装两者时,它失败了。我尝试了不同的方式:

1。生成调试和发布apks并将其传输到我的手机存储。第一个安装,第二个安装错误“应用未安装” - 没有进一步的信息。无论我先安装哪个版本,都是一样的。

2. 从存储安装调试版本,然后尝试从Play商店安装发布版本,但Play商店出错:

  

无法安装应用程序错误代码:-505。

3. 从商店安装发布版本,然后尝试从android studio运行项目,这是我的'运行'日志:

    Launching app
    $ adb push D:\myPROJECTS\MyApp\app\build\outputs\apk\app-debug.apk /data/local/tmp/com.example.myapp.debug
    $ adb shell pm install -r "/data/local/tmp/com.example.myapp.debug"
    java.lang.UnsatisfiedLinkError: No implementation found for java.lang.String android.os.SystemProperties.native_get(java.lang.String) (tried Java_android_os_SystemProperties_native_1get and Java_android_os_SystemProperties_native_1get__Ljava_lang_String_2)
      at android.os.SystemProperties.native_get(Native Method)
      at android.os.SystemProperties.get(SystemProperties.java:52)
      at android.os.Environment$UserEnvironment.<init>(Environment.java:123)
      at android.os.Environment.initForCurrentUser(Environment.java:98)
      at android.os.Environment.<clinit>(Environment.java:92)
      at android.os.Environment.getLegacyExternalStorageDirectory(Environment.java:597)
      at android.os.Debug.<clinit>(Debug.java:103)
      at android.ddm.DdmHandleHello.handleHELO(DdmHandleHello.java:164)
      at android.ddm.DdmHandleHello.handleChunk(DdmHandleHello.java:91)
      at org.apache.harmony.dalvik.ddmc.DdmServer.dispatch(DdmServer.java:171)
    java.lang.UnsatisfiedLinkError: android.os.Debug
      at android.ddm.DdmHandleHello.handleFEAT(DdmHandleHello.java:176)
      at android.ddm.DdmHandleHello.handleChunk(DdmHandleHello.java:93)
      at org.apache.harmony.dalvik.ddmc.DdmServer.dispatch(DdmServer.java:171)
    java.lang.UnsatisfiedLinkError: android.os.Debug
      at android.ddm.DdmHandleProfiling.handleMPRQ(DdmHandleProfiling.java:187)
      at android.ddm.DdmHandleProfiling.handleChunk(DdmHandleProfiling.java:88)
      at org.apache.harmony.dalvik.ddmc.DdmServer.dispatch(DdmServer.java:171)
    Aborted 

    $ adb shell am start -n "com.example.myapp.debug/com.example.myapp.LoginActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
    Error while executing: am start -n "com.example.myapp.debug/com.example.myapp.LoginActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
    Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.example.myapp.debug/com.example.myapp.LoginActivity }
    Error type 3
    Error: Activity class {com.example.myapp.debug/com.example.myapp.LoginActivity} does not exist.

    Error while Launching activity

知道发生了什么事吗?

更新:不知道是否有帮助,但以下是我在androidmanifest.xml中宣布启动器活动的方式:

<activity
    android:name=".LoginActivity"
    android:label="@string/app_name"
    android:screenOrientation="portrait"
    android:theme="@style/AppTheme.Launcher">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

2 个答案:

答案 0 :(得分:7)

好的,我弄清楚发生了什么。

我实际上是为调试变体创建了一个未签名的apk( Build&gt; Build APK )。但我必须使用(构建&gt;生成签名APK ),然后从选项中选择调试版本。

enter image description here

此外,在我的设备上运行项目时,gradle将生成一个未签名的apk。所以这也不会起作用。这是 - 除非我按照this answer中的说明配置SigningConfigs

答案 1 :(得分:3)

为什么不使用产品口味而不是使用构建类型?这是documentation关于如何执行此操作的链接,以及您当前正在尝试执行的操作。希望这会有所帮助。