15

I have configured build variants in my project with applicationIdSuffix so that I can install both debug and release versions on my device. here is my build.gradle (relevant parts):

 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'
        }
    }

But when I try to install both, it fails. I tried different ways:

1. Generated both debug and release apks and transferred them to my phone storage. The first one installs, and the second one gives an error "App not installed" - no further info. This is the same no matter which version I install first.

2. Installed debug version from storage, then tried to install release version from play store, but play store gives error :

cant install app error code:-505.

3. Installed release version from store, and then tried running the project from android studio, and this is my 'run' log :

    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

any idea what is going on?

Update : don't know if it helps, but here is how I declared my launcher activity in 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>
ShahiM
  • 3,179
  • 1
  • 33
  • 58
  • 1
    Have you tried to change the name of your `android:name=".AppClassDebug"` and launcher activity to `MainActivityDebug`? I see that you add suffix to the package name, which is fine. – Nikola Despotoski Aug 28 '16 at 18:42
  • Sorry I dont follow. Do you mean change the name of my launcher activity class? How would that help? – ShahiM Aug 28 '16 at 21:32
  • I think your appSuffix is interesting in the gradle but if you're using build variants why not just use a manifest.xml with a different application name? that way when you build you know pm isn't going to get confused. – Danny Beaumont Sep 02 '16 at 14:27

2 Answers2

7

Okay, I figured out what was going on.

I was actually creating an unsigned apk for the debug variant (Build > Build APK). But I had to use (Build > Generate Signed APK) and then select the debug variant from the options.

enter image description here

Also, when running the project on my device, gradle would be generating an unsigned apk. So that too wouldn't work. That is - unless I configure SigningConfigs as explained in this answer.

Community
  • 1
  • 1
ShahiM
  • 3,179
  • 1
  • 33
  • 58
4

Instead of using build types, why not use product Flavors instead? Here's a link to the documentation on how to do this, as well as what you are currently trying to do. Hope this helps.

Kolten Sturgill
  • 188
  • 1
  • 7