You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cordova.apache.org by "Victor Felder (JIRA)" <ji...@apache.org> on 2016/02/17 09:51:18 UTC

[jira] [Created] (CB-10634) res/values/*.xml don't end up in apk

Victor Felder created CB-10634:
----------------------------------

             Summary: res/values/*.xml don't end up in apk
                 Key: CB-10634
                 URL: https://issues.apache.org/jira/browse/CB-10634
             Project: Apache Cordova
          Issue Type: Bug
          Components: Android
    Affects Versions: 5.1.1
         Environment: * OS X 10.11.3 (El Capitan)
* Darwin 15.3.0 Darwin Kernel Version 15.3.0: Thu Dec 10 18:40:58 PST 2015; root:xnu-3248.30.4~1/RELEASE_X86_64 x86_64
* Meteor 1.2.1
            Reporter: Victor Felder


**TL;DR:** My xml config files placed in `res/values/` are missing from the debug apk; the app tries to access these resources (eg. in `colors.xml`), fails and crashes because of this.

* When I `ls cordova-build/platforms/android/res/values`, the files are there.
* When I `unzip -l build/outputs/apk/android-release-unsigned.apk` to see what's in there, I see all resources **except** `res/values`, it's just not there.
* When I `apktool d -s ./release-unsigned.apk -o ./release-unsigned-dump/`, I see them all, even the `res/values`!
* When I jarsign the apk, they don't get signed. (Verbose mode shows each file getting signed, `res/values` is not there.)

---

**Long version:**

I wrote a Android app in Java. It spawns an activity and it works properly when used as a standalone app.

I need to call it from Cordova, so I transformed it into a Cordova plugin. I simply added a `MyPlugin.java` to my app which extends `CordovaPlugin`, receives a JS event and spawns the activity when I click an HTML button.

It went more or less smoothly: the plugin gets compiled, the cordova application works fine, I tap the button, the activity is spawned but immediately crashes because a resource is missing.


    E AndroidRuntime: FATAL EXCEPTION: main
    E AndroidRuntime: Process: com.id1x54bf32ogivwhevdd0, PID: 16617
    E AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.id1x54bf32ogivwhevdd0/com.my.awesome.plugin.MyPlugin}: android.content.res.Resources$NotFoundException: Resource ID #0x7f040007
    E AndroidRuntime:    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
    E AndroidRuntime:    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
    E AndroidRuntime:    at android.app.ActivityThread.-wrap11(ActivityThread.java)
    E AndroidRuntime:    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
    E AndroidRuntime:    at android.os.Handler.dispatchMessage(Handler.java:102)
    E AndroidRuntime:    at android.os.Looper.loop(Looper.java:148)
    E AndroidRuntime:    at android.app.ActivityThread.main(ActivityThread.java:5417)
    E AndroidRuntime:    at java.lang.reflect.Method.invoke(Native Method)
    E AndroidRuntime:    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
    E AndroidRuntime:    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
    E AndroidRuntime: Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x7f040007
    E AndroidRuntime:    at android.content.res.Resources.getValue(Resources.java:1351)
    E AndroidRuntime:    at android.content.res.Resources.getColor(Resources.java:963)
    E AndroidRuntime:    at android.content.res.Resources.getColor(Resources.java:936)
    E AndroidRuntime:    at com.my.awesome.plugin.SomethingResourceFactory.fromXml(SomethingResourceFactory.java:27)
    E AndroidRuntime:    at com.my.awesome.plugin.MyPlugin.onCreate(MyPlugin.java:100)
    E AndroidRuntime:    at android.app.Activity.performCreate(Activity.java:6251)
    E AndroidRuntime:    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
    E AndroidRuntime:    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
    E AndroidRuntime:    ... 9 more


Apparently a resource is missing. When I take a look at `R.java`, I find it in there:

    public static final class color {
        [...]
        public static int color_myfragment_background_selected=0x7f040007;

This color is defined in `res/values/colors.xml`:

    <color name="color_myfragment_background_selected">#03abb4</color>

which is included in `plugin.xml`:

    <resource-file src="res/values/colors.xml" target="res/values/colors.xml" />

I tried adding this in `plugin.xml`:

    <config-file target="res/values/colors.xml" parent="/resources">
        <color name="color_myfragment_background_selected">#03abb4</color>

and of course, when I started paying attention to what `adb install -r thing.apk` outputs, I noticed this:

    signing: res/layout/firstlayout.xml
    signing: res/layout/itemlayout.xml
    signing: res/menu/my_menu.xml
    signing: res/xml/config.xml
    signing: resources.arsc
    signing: classes.dex
    signing: NOTICE_ANDROID.txt
    signing: VERSION

`res/values` is nowhere to be found. Everything else is here. My own `res/layout*`s, `res/drawable*`, etc.

* When I `ls cordova-build/platforms/android/res/values`, the files are there.
* When I `unzip -l build/outputs/apk/android-release-unsigned.apk` to see what's in there, I see all resources **except** `res/values`, it's just not there.
* When I `apktool d -s ./release-unsigned.apk -o ./release-unsigned-dump/`, I see them all, even the `res/values`!
* When I jarsign the apk, they don't get signed. (Verbose mode shows each file getting signed, `res/values` is not there.)

If you have a clue about what's going on here, it'd be much appreciated.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@cordova.apache.org
For additional commands, e-mail: issues-help@cordova.apache.org