Android Callable Wrapper не удается построить для проекта Crosswalk

Я создал проект привязки для проекта пешеходного перехода. Он создал код ACW, который не удается собрать

package mono.org.xwalk.core.internal;


public class XWalkSettingsInternal_ZoomSupportChangeListenerImplementor
    extends java.lang.Object
    implements
        mono.android.IGCUserPeer,
        org.xwalk.core.internal.XWalkSettingsInternal.ZoomSupportChangeListener
{
    static final String __md_methods;
    static {
        __md_methods = 
            "n_onGestureZoomSupportChanged:(ZZ)V:GetOnGestureZoomSupportChanged_ZZHandler:Org.Xwalk.Core.Internal.XWalkSettingsInternal/IZoomSupportChangeListenerInvoker, MethodCRM.Crosswalk\n" +
            "";
        mono.android.Runtime.register ("Org.Xwalk.Core.Internal.XWalkSettingsInternal+IZoomSupportChangeListenerImplementor, MethodCRM.Crosswalk, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", XWalkSettingsInternal_ZoomSupportChangeListenerImplementor.class, __md_methods);
    }


    public XWalkSettingsInternal_ZoomSupportChangeListenerImplementor () throws java.lang.Throwable
    {
        super ();
        if (getClass () == XWalkSettingsInternal_ZoomSupportChangeListenerImplementor.class)
            mono.android.TypeManager.Activate ("Org.Xwalk.Core.Internal.XWalkSettingsInternal+IZoomSupportChangeListenerImplementor, MethodCRM.Crosswalk, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", "", this, new java.lang.Object[] {  });
    }


    public void onGestureZoomSupportChanged (boolean p0, boolean p1)
    {
        n_onGestureZoomSupportChanged (p0, p1);
    }

    private native void n_onGestureZoomSupportChanged (boolean p0, boolean p1);

    java.util.ArrayList refList;
    public void monodroidAddReference (java.lang.Object obj)
    {
        if (refList == null)
            refList = new java.util.ArrayList ();
        refList.add (obj);
    }

    public void monodroidClearReferences ()
    {
        if (refList != null)
            refList.clear ();
    }
}

Это ошибка сборки, которую я получил.

/Users/xxxxx/Integration/Mobile/MethodCRM/Droid/obj/Debug/android/src/mono/org/xwalk/core/internal/XWalkSettingsInternal_ZoomSupportChangeListenerImplementor.java(48,48): Ошибка: ошибка: ZoomSupportChangeListener не общедоступный в XWalkSettingsInternal; недоступен из внешнего пакета org.xwalk.core.internal.XWalkSettingsInternal.ZoomSupportChangeListener (MethodCRM.Droid)

Похоже, что компилятор жалуется, что org.xwalk.core.internal.XWalkSettingsInternal.ZoomSupportChangeListener является частным интерфейсом, а XWalkSettingsInternal_ZoomSupportChangeListenerImplementor является общедоступным классом. Как устранить эту ошибку?

Обновление: я попытался удалить XWalkSettingsInternal и XWalkSettingsInternal.ZoomSupportChangeListener в Metadata.xml, но это не решило проблему.

<remove-node path="/api/package[@name='org.xwalk.core.internal']/class[@name='XWalkSettingsInternal']" />
<remove-node path="/api/package[@name='org.xwalk.core.internal']/interface[@name='XWalkSettingsInternal.ZoomSupportChangeListener']" />

person burnt1ce    schedule 29.05.2016    source источник


Ответы (2)


Я попробовал оболочку CrossWalk в этом проекте GitHub https://github.com/philieu/XamarinFormsXWalkViewTest, и он работает, так что, может быть, вы могли бы посмотреть на это, чтобы увидеть, что вы делаете по-другому?

Обновление: я просмотрел исходный код CrossWalk и нигде не вижу, чтобы XWalkSettingsInternal публично выставлялся другими классами, поэтому я бы просто полностью удалил этот узел.

Эта ссылка может быть полезна http://forums.xamarin.com/discussion/12627/java-binding-member-cannot-be-accessed-from-outside-package

person Bill Reiss    schedule 29.05.2016
comment
Это весело. На самом деле я использую тот же проект привязки, и он использует Crosswalk v15. Я пытаюсь обновить этот проект до Crosswalk v18, чтобы устранить некоторые ошибки, но я застрял, потому что не могу понять, как устранить ошибку сборки в моем вопросе. - person burnt1ce; 29.05.2016
comment
Я попытался удалить XWalkSettingsInternal, но это не сработало (подробнее в моем обновленном вопросе). - person burnt1ce; 29.05.2016

Обратите внимание, что когда вы просматриваете исходный код Crosswalk и видите некоторые классы с именем xxInternal.java в пакете org.xwalk.core.internal, эти классы НЕ являются внешним интерфейсом.

Когда вы создаете исходный код Crosswalk, есть сценарий, который автоматически переводит org.xwalk.core.internal.xxInternal.java в org.xwalk.core.xx.java, что является окончательным интерфейсом для разработчиков. Хотя между этой парой файлов и есть однозначное соответствие, они не совсем одинаковы. Только метод, отмеченный @XWalkAPI в xxInternal.java, останется в xx.java.

Вы можете проверить окончательный интерфейс через официальную документацию по API или путем декомпиляции xwalk_core_library.jar, которая можно найти в используемом вами файле AAR.

person lincsoon    schedule 02.06.2016