2015-04-02 82 views
2

膨胀,其中包括XWalkView一个XML布局时,我有一个运行时异常严重的问题......如何在XML布局(或编程)中充气XWalkView?

堆栈跟踪:

 Caused by: java.lang.RuntimeException: java.lang.RuntimeException: Use SharedXWalkView if you want to support shared mode 
      at org.xwalk.core.ReflectionHelper.handleException(ReflectionHelper.java:233) 
      at org.xwalk.core.ReflectionHelper.handleException(ReflectionHelper.java:237) 
      at org.xwalk.core.ReflectionHelper.init(ReflectionHelper.java:132) 
      at org.xwalk.core.ReflectionHelper.loadClass(ReflectionHelper.java:199) 
      at org.xwalk.core.ReflectionHelper$ConstructorHelper.loadConstructor(ReflectionHelper.java:37) 
      at org.xwalk.core.ReflectionHelper.createInstance(ReflectionHelper.java:246) 
      at org.xwalk.core.XWalkView.<init>(XWalkView.java:169) 
            at java.lang.reflect.Constructor.newInstance(Native Method) 
            at java.lang.reflect.Constructor.newInstance(Constructor.java:288) 
            at android.view.LayoutInflater.createView(LayoutInflater.java:607) 
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743) 
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:806) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:504) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:414) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:365) 
            at com.bean.project.XWalkUIActivity.onCreate(XWalkUIActivity.java:51) 
            at android.app.Activity.performCreate(Activity.java:5933) 
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 
            at android.app.ActivityThread.access$800(ActivityThread.java:144) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 
            at android.os.Handler.dispatchMessage(Handler.java:102) 
            at android.os.Looper.loop(Looper.java:135) 
            at android.app.ActivityThread.main(ActivityThread.java:5221) 
            at java.lang.reflect.Method.invoke(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:372) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
    Caused by: java.lang.RuntimeException: Use SharedXWalkView if you want to support shared mode 
            at org.xwalk.core.ReflectionHelper.handleException(ReflectionHelper.java:237) 
            at org.xwalk.core.ReflectionHelper.init(ReflectionHelper.java:132) 

XML:

<?xml version="1.0" encoding="utf-8"?> 
 
<RelativeLayout 
 
    xmlns:android="http://schemas.android.com/apk/res/android" 
 
    android:layout_width="match_parent" 
 
    android:layout_height="match_parent" 
 
    android:id="@+id/com_bean_project_content" 
 
    android:theme="@style/com_bean_project_black" > 
 
    
 
    <!-- bottom controls --> 
 
\t <RelativeLayout 
 
\t \t android:id="@+id/com_bean_project_bottom_layout" 
 
\t \t android:layout_width="match_parent" 
 
\t \t android:layout_height="wrap_content" 
 
\t \t android:layout_alignParentBottom="true"> 
 

 
\t \t <!-- some buttons, nothing to worry about --> 
 

 
\t </RelativeLayout> 
 

 
    <!-- fills most of the parent view --> 
 
    <org.xwalk.core.XWalkView 
 
     android:layout_width="match_parent" 
 
     android:layout_height="match_parent" 
 
     android:id="@+id/com_bean_project_webview" 
 
     android:layout_alignParentTop="true" 
 
     android:layout_above="@id/com_bean_project_bottom_layout"/> 
 

 
</RelativeLayout>
我做过的事:

1)在Android Studio中,我使用库中的armeabi-v7a文件夹和xwalk_core_library_java_app_part.jarxwalk_core_library_java_library_part.jar这两个都包含在依赖项中。我不知道我是否应该只使用其中一个罐子?在任何文件中我都找不到它。

2)XWalkView的活动有人行横道的下载页面上android:hardwareAccelerated="true"

3)(https://crosswalk-project.org/documentation/downloads.html)我已经下载的Android webview (ARM)

4)我还合并了 “RES” 文件夹从版本11.40.277.7人行横道到我的项目,但这没有什么区别。

5)我也试过纲领性通货膨胀,但是,它也只是一个new XWalkView(mParentActivity, mParentActivity);(我知道,愚蠢的构造函数)节选:

 Caused by: java.lang.RuntimeException: java.lang.RuntimeException: Use SharedXWalkView if you want to support shared mode 
      at org.xwalk.core.ReflectionHelper.handleException(ReflectionHelper.java:233) 
      at org.xwalk.core.ReflectionHelper.handleException(ReflectionHelper.java:237) 
      at org.xwalk.core.ReflectionHelper.init(ReflectionHelper.java:132) 
      at org.xwalk.core.ReflectionHelper.loadClass(ReflectionHelper.java:199) 
      at org.xwalk.core.ReflectionHelper$ConstructorHelper.loadConstructor(ReflectionHelper.java:37) 
      at org.xwalk.core.ReflectionHelper.createInstance(ReflectionHelper.java:246) 
      at org.xwalk.core.XWalkView.<init>(XWalkView.java:192) 

为灵感,我看不过https://crosswalk-project.org/apis/embeddingapidocs/reference/org/xwalk/core/XWalkView.html,这是在这个问题上没有帮助。

+0

你看了看错误是什么说:java.lang.RuntimeException:如果你想支持共享模式,使用SharedXWalkView – tyczj 2015-04-02 20:36:22

+0

是的,我看到了 - 但我不知道它应该做什么......没有文档为了它。 ? “共享模式”意味着什么?我只是想在我的布局视图。 – 2015-04-02 20:43:35

+0

在ARM上使用X86构建库时,我看到了这个问题。我试着在基于英特尔的Android平板电脑上运行它,并且工作。 HTH – Boy 2015-04-25 08:52:26

回答

3

也许这将帮助你:

起初我也试图在我的应用程序中使用罐子。那没用,我和你有同样的例外。

然后我偶然发现了this sample app,它展示了如何使用Crosswalk。 然后,我将构建复制到我的应用程序中,一切正常。 以下是我在我的gradle这个文件中加入: 在仓库部分我添加一个行(crashlytics下面..)

repositories { 
mavenCentral() 
maven { url 'http://download.crashlytics.com/maven'} 
maven { url 'https://download.01.org/crosswalk/releases/crosswalk/android/maven2'} 

}

相关内容部分我还添加了一个行 - 中最后一个:

dependencies { 
compile fileTree(dir: 'libs', include: ['*.jar']) 
compile 'com.android.support:appcompat-v7:21.0.3' 
compile 'com.google.android.gms:play-services:6.5.87' 
compile 'org.xwalk:xwalk_core_library:10.39.235.15' 

}

这是该活动的XML:

<org.xwalk.core.XWalkView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/walk_view" 
    android:layout_width="fill_parent" 
    android:background="#000000" 
    android:layout_height="fill_parent" 
    /> 

这也是我如何使用它在Java代码:

private void setXView(){ 
    mXview = (XWalkView)findViewById(R.id.walk_view); 
    mXview.load("http://www.cnn.com",null); 
} 

不要忘记删除的罐子在您的应用程序,或者如果你有文件树(DIR你可能会得到一个编译错误: 'libs',包括:['* .jar'])在您的依赖项中。

+0

感谢您的详细解答。我已经将你的文字标记为答案。但它似乎取决于所使用的XWalk版本。您使用10.39.235.15,但我使用12.41.x.x,我需要以编程方式实例化XWalkView,即使11.40.x.x需要编程实例 – 2015-04-30 18:52:03

+0

我明白了。是的,我确实忽略了版本问题......不确定我的方法是否适用于更高版本。你是否试图用12.41.x.x构建这种方式? – peresisUser 2015-05-03 08:53:05

+0

为xwalkview启动需要太多时间 – skyshine 2016-07-28 15:19:53

3

经过一天疯狂的实验,我终于放弃了试图存储本地库的副本。 - 这是有用的https://crosswalk-project.org/documentation/embedding_crosswalk/crosswalk_aar.html

在该页面的底部有一个链接到的成立与Maven一个示例应用程序:

相反,我使用这些指令去使用Maven。

注:找出库的版本可供选择,请到这里:https://download.01.org/crosswalk/releases/crosswalk/android/maven2/org/xwalk/xwalk_core_library/

例如,而不是“测试版”的依赖,你将有compile 'org.xwalk:xwalk_core_library:12.41.296.5'

有它设置了之后maven,然后我又回到了XML通货膨胀。

不过,我当时面临着

04-02 16:38:31.036 14165-14165/com.bean.project W/System.err﹕ Caused by: java.lang.ClassCastException: android.view.ContextThemeWrapper cannot be cast to android.app.Activity 
04-02 16:38:31.037 14165-14165/com.bean.project W/System.err﹕ at org.xwalk.core.internal.XWalkViewInternal.<init>(XWalkViewInternal.java:197) 
04-02 16:38:31.037 14165-14165/com.bean.project W/System.err﹕ at org.xwalk.core.internal.XWalkViewBridge.<init>(XWalkViewBridge.java:46) 

的疯狂继续...

public XWalkViewInternal(Context context, AttributeSet attrs) { 
    super(convertContext(context), attrs); 

    checkThreadSafety(); 
    mActivity = (Activity) context; 
    mContext = getContext(); 
    init(mContext, attrs); 
} 

他们怎么能认为这是一个好主意?? !!/捂脸

编辑:得到XWalkView添加到布局编程我把一个占位符(空)的RelativeLayout在XML与ID FULLSCREEN_YOUTUBE_CONTAINER_ID,然后在的onCreate()的活动我做的:

mYoutubeVideoViewContainer = (RelativeLayout) mLayoutView.findViewById(FULLSCREEN_YOUTUBE_CONTAINER_ID); 
mYoutubeWebView = new XWalkView(mParentActivity, mParentActivity); 
RelativeLayout.LayoutParams relativeParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); 
mYoutubeVideoViewContainer.addView(mYoutubeWebView, relativeParams); 
+0

您是否设法最终实现它? – peresisUser 2015-04-27 05:42:30

+1

hi peresis - 我终于设法让它以编程方式工作。我已经编辑了这个答案的步骤。 – 2015-04-30 18:46:05

+0

感谢您的更新:) – peresisUser 2015-05-03 07:58:48