简体   繁体   English

Android上的Kaltura Java客户端库

[英]Kaltura Java Client Library on Android

I am writing an Android API level 10 application which captures videos and then uploads them to our Kaltura site. 我正在编写一个Android API 10级应用程序,该应用程序会捕获视频,然后将其上传到我们的Kaltura网站。 It should be straight forward because Kaltura provides a Java client library ( here ), and they say to use the Java client library in their document titled the "Kaltura Android SDK Reference Application Implementation Guide." 这应该很简单,因为Kaltura提供了一个Java客户端库( 在此处 ),并且他们说在其名为“ Kaltura Android SDK参考应用程序实施指南”的文档中使用Java客户端库。 ( here ) 这里

Well, after writing a preliminary Kaltura uploading class that is identical to the Java client library example Kaltura shows (on the first link,) including all of the build references included in the Java client library "libs" folder to my project, EXCEPT for JUnit because Android already has it's own JUnit (including their JUnit causes the build to fail), the app throws a java.lang.VerifyError during the construction of a new KalturaClient Object: 好吧,在编写完一个与Java客户端库示例相同的Kaltura上载类之后,Kaltura在第一个链接上显示了该示例,该示例包括Java客户端库“ libs”文件夹中包含的所有构建引用到我的项目(EXCEPT for JUnit)由于Android已经拥有自己的JUnit(包括其JUnit会导致构建失败),因此该应用在构建新的KalturaClient对象期间会抛出java.lang.VerifyError:

W/dalvikvm(8232): VFY: array-length on non-array
W/dalvikvm(8232): VFY:  rejecting opcode 0x21 at 0x000a
W/dalvikvm(8232): VFY:  rejected Lorg/apache/log4j/config/PropertySetter;.getPropertyDescriptor (Ljava/lang/String;)Ljava/beans/PropertyDescriptor;
W/dalvikvm(8232): Verifier rejected class Lorg/apache/log4j/config/PropertySetter;
W/dalvikvm(8232): Exception Ljava/lang/VerifyError; thrown while initializing Lorg/apache/log4j/LogManager;
W/dalvikvm(8232): Exception Ljava/lang/ExceptionInInitializerError; thrown while initializing Lcom/kaltura/client/KalturaClientBase;
D/AndroidRuntime(8232): Shutting down VM
W/dalvikvm(8232): threadid=1: thread exiting with uncaught exception (group=0x40015560)
E/AndroidRuntime(8232): FATAL EXCEPTION: main
E/AndroidRuntime(8232): java.lang.ExceptionInInitializerError
E/AndroidRuntime(8232):     at com.mysite.myapp.kaltura.KalturaUploader.<init>(KalturaUploader.java:32)
E/AndroidRuntime(8232):     at com.mysite.myapp.storage.LoginActivity.invokeKaltura(LoginActivity.java:105)
E/AndroidRuntime(8232):     at com.mysite.myapp.storage.LoginActivity.access$2(LoginActivity.java:102)
E/AndroidRuntime(8232):     at com.mysite.myapp.storage.LoginActivity$3.onClick(LoginActivity.java:81)
E/AndroidRuntime(8232):     at android.view.View.performClick(View.java:2506)
E/AndroidRuntime(8232):     at android.view.View$PerformClick.run(View.java:9112)
E/AndroidRuntime(8232):     at android.os.Handler.handleCallback(Handler.java:587)
E/AndroidRuntime(8232):     at android.os.Handler.dispatchMessage(Handler.java:92)
E/AndroidRuntime(8232):     at android.os.Looper.loop(Looper.java:130)
E/AndroidRuntime(8232):     at android.app.ActivityThread.main(ActivityThread.java:3835)
E/AndroidRuntime(8232):     at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(8232):     at java.lang.reflect.Method.invoke(Method.java:507)
E/AndroidRuntime(8232):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:864)
E/AndroidRuntime(8232):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)
E/AndroidRuntime(8232):     at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(8232): Caused by: java.lang.ExceptionInInitializerError
E/AndroidRuntime(8232):     at org.apache.log4j.Logger.getLogger(Logger.java:118)
E/AndroidRuntime(8232):     at com.kaltura.client.KalturaClientBase.<clinit>(KalturaClientBase.java:45)
E/AndroidRuntime(8232):     ... 15 more
E/AndroidRuntime(8232): Caused by: java.lang.VerifyError: org.apache.log4j.config.PropertySetter
E/AndroidRuntime(8232):     at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:684)
E/AndroidRuntime(8232):     at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:647)
E/AndroidRuntime(8232):     at org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:544)
E/AndroidRuntime(8232):     at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:440)
E/AndroidRuntime(8232):     at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:476)
E/AndroidRuntime(8232):     at     org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:471)
E/AndroidRuntime(8232):     at org.apache.log4j.LogManager.<clinit>(LogManager.java:125)
E/AndroidRuntime(8232):     ... 17 more
I/Process(8232): Sending signal. PID: 8232 SIG: 9

So I'm guessing the above happened because Log4J doesn't exactly work on Android without additional wrapper classes (code.google.com/p/android-logging-log4j), so why not just modify Kaltura to use Android's logging facilities? 所以我猜想发生了上述情况,因为没有其他包装类(code.google.com/p/android-logging-log4j),Log4J不能在Android上完全正常工作,那么为什么不修改Kaltura以使用Android的日志记录功能呢?

Because I've read (in Kaltura's documentation) that the Java client is not written but instead is generated, so I feel that manually editing the code to support android-logging-log4j would be naive. 因为我已经读过(在Kaltura的文档中)Java客户端不是编写而是生成的,所以我觉得手动编辑代码以支持android-logging-log4j会很幼稚。 Furthermore, when I open up the Kaltura Java Client source in Eclipse, there are a few classes which are missing from my build path. 此外,当我在Eclipse中打开Kaltura Java Client源代码时,构建路径中缺少一些类。 The first I noticed was sun.misc.BASE64Encoder...Android does have it's own Base64Encoder, would it be compatible? 我注意到的第一个是sun.misc.BASE64Encoder ... Android确实有它自己的Base64Encoder,它兼容吗?

Does anybody have any suggestions as to what I should do? 没有任何人有任何建议,我应该怎么办呢? Has anybody gotten the Kaltura Java Client Library running on Android? 有人得到了在Android上运行的Kaltura Java客户端库吗? Where is the sample application described in the second link? 第二个链接中描述的示例应用程序在哪里?

As a side note, I also see many of these messages in my Eclipse console when I build the project, including the provided JAR's in my build path: 另外,在构建项目时,我还会在Eclipse控制台中看到许多这些消息,包括构建路径中提供的JAR:

[2012-07-18 22:44:37 - MyApp] Dx warning: Ignoring InnerClasses attribute for an anonymous inner class
(org.apache.commons.httpclient.protocol.ControllerThreadSocketFactory$1) that doesn't come with an
associated EnclosingMethod attribute. This class was probably produced by a
compiler that did not target the modern .class file format. The recommended
solution is to recompile the class from source, using an up-to-date compiler
and without specifying any "-target" type options. The consequence of ignoring
this warning is that reflective operations on this class will incorrectly
indicate that it is *not* an inner class.

Thanks in advance for the help! 先谢谢您的帮助!


Edit: Browsing the Kaltura code, I found some scary stuff that must be a result of this generated library... 编辑:浏览Kaltura代码,我发现了一些可怕的东西,这些东西一定是此生成的库的结果...

 // =================================================================================================== // _ __ _ _ // | |/ /__ _| | |_ _ _ _ _ __ _ // | ' </ _` | | _| || | '_/ _` | // |_|\\_\\__,_|_|\\__|\\_,_|_| \\__,_| // // This file is part of the Kaltura Collaborative Media Suite which allows users // to do with audio, video, and animation what Wiki platfroms allow them to do with // text. // // Copyright (C) 2006-2011 Kaltura Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. // // @ignore // =================================================================================================== package com.kaltura.client.enums; /** * This class was generated using generate.php * against an XML schema provided by Kaltura. * @date Wed, 18 Jul 12 07:10:33 -0400 * * MANUAL CHANGES TO THIS CLASS WILL BE OVERWRITTEN. */ public enum KalturaFlavorReadyBehaviorType implements KalturaEnumAsInt { NO_IMPACT (0), REQUIRED (1), OPTIONAL (2), INHERIT_FLAVOR_PARAMS (0); public int hashCode; KalturaFlavorReadyBehaviorType(int hashCode) { this.hashCode = hashCode; } public int getHashCode() { return this.hashCode; } public static KalturaFlavorReadyBehaviorType get(int hashCode) { switch(hashCode) { case 0: return NO_IMPACT; case 1: return REQUIRED; case 2: return OPTIONAL; case 0: return INHERIT_FLAVOR_PARAMS; default: return NO_IMPACT; } } } 

How did they ever compile this code? 他们如何编译此代码? It's not even legal Java. 它甚至不是合法的Java。 There are maybe a hundred classes, most of them have the "this was auto-generated" notice at the top. 可能有一百个类,其中大多数类的顶部都有“这是自动生成的”通知。 Other classes have silly problems like this too (KalturaNullableBoolean). 其他类也有类似的愚蠢问题(KalturaNullableBoolean)。

For now I'm going to pretend the Java client library does not exist. 现在,我要假装Java客户端库不存在。 A Ruby client library exists, and I've had great success with JRuby on Android in the past, and our application only uploads big files which take a long time anyway, so the overhead increase shouldn't be terribly noticeable..if it all works. 存在一个Ruby客户端库,过去我在Android上使用JRuby取得了很大的成功,而且我们的应用程序仅上传需要花费很长时间的大文件,因此开销的增加应该不会非常明显。作品。 We'll just have to accept the .APK being huge thanks to the included JRuby JAR... 多亏了附带的JRuby JAR,我们只需要接受.APK巨大的代码...

Not to mention they crammed everything into 2 Ruby scripts instead of hundreds of Java classes...all the easier to strip out incompatible functionality, if there is any, and at least my Eclipse project won't be a jungle of Kaltura Java source files anymore. 更不用说他们将所有内容都塞进了2个Ruby脚本中,而不是将数百个Java类塞入了所有……所有这些都更容易剔除不兼容的功能(如果有的话),至少我的Eclipse项目不会是Kaltura Java源文件的丛林不再。 :D :D

Thanks for reading. 谢谢阅读。

The client is indeed automatically generated, as Kaltura's API gets updated, the server generates new clients every update to provide for the latest functionality in the clients. 客户端的确是自动生成的,因为Kaltura的API已更新,服务器每次更新都会生成新的客户端,以提供客户端中的最新功能。 You can read more about Kaltura's Client Libs generator here: http://knowledge.kaltura.com/adding-new-kaltura-api-client-library-generator 您可以在此处阅读有关Kaltura的客户端库生成器的更多信息: http : //knowledge.kaltura.com/adding-new-kaltura-api-client-library-generator

Any patches or modifications that you think will improve the client libraries are welcome, feel free to attach it here or to an issue thread on Kaltura.org. 欢迎您认为可以改善客户端库的任何补丁或修改,请随时将其附加在此处或附加到Kaltura.org上的发行线程上。

The current Java Client is not yet Android friendly, it's geared for pure Java use. 当前的Java客户端尚不支持Android,仅适用于纯Java。 There is work to adapt and create an Android specific version, and any suggestions or patches for improvement are greatly appreciated. 目前有工作来适应和创建Android特定版本,对于任何改进的建议或补丁,我们将不胜感激。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM