我正在編寫一個Android API級別10的應用程序,該應用程序捕獲視頻並將其上傳到我們的Kaltura網站。由於Kaltura提供了一個Java客戶端庫(here),並且他們說在他們的文檔中使用了Java客戶端庫,所以標題爲「Kaltura Android SDK參考應用程序實現指南」。 (here)Android上的Kaltura Java客戶端庫
那麼,在編寫一個與Java客戶端庫示例相同的初步Kaltura上傳類之後,Kaltura會顯示(在第一個鏈接上),包括Java客戶端庫「libs」文件夾中包含的所有構建引用我的項目,除了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
所以我猜上面發生的事情是因爲Log4J在沒有附加包裝類(code.google.com/p/android-logging-log4j)的Android上不能正常工作,所以爲什麼不只是m讓Kaltura使用Android的日誌記錄工具?
因爲我讀過(在Kaltura的文檔中),Java客戶端沒有寫入,而是生成了,所以我覺得手動編輯代碼以支持android-logging-log4j會很幼稚。此外,當我在Eclipse中打開Kaltura Java客戶端源代碼時,我的構建路徑中缺少一些類。我注意到的第一個是sun.misc.BASE64Encoder ... Android確實有它自己的Base64Encoder,它會兼容嗎?
有沒有人對我應該做什麼有什麼建議?有沒有人獲得在Android上運行的Kaltura Java客戶端庫?第二個鏈接中描述的示例應用程序在哪裏?
作爲一個方面說明,我也看到了我的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.
謝謝!
編輯:瀏覽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;
}
}
}
他們如何曾經編譯這段代碼?這甚至不是合法的Java。可能有一百個班,其中大部分都有「這是自動生成的」通知。其他類也有這樣的愚蠢問題(KalturaNullableBoolean)。
現在我要假裝Java客戶端庫不存在。一個Ruby客戶端庫存在,我以前在Android上使用JRuby取得了巨大的成功,而且我們的應用程序只上傳需要很長時間的大文件,所以開銷增加不應該非常明顯。如果這一切作品。我們只需要接受包含JRuby JAR的.APK巨大的感謝......
更不用說他們將所有東西塞進2個Ruby腳本中,而不是數百個Java類......所有這些都更容易剝離不兼容的功能,如果有的話,至少我的Eclipse項目不會再是Kaltura Java源文件的叢林了。 :D
感謝您的閱讀。
@ Zohain.Babin我知道現在已經很晚了對此主題發表評論。我剛開始使用kaltura sdk,它只是困惑我。它提供了kaltura配置和Kalturaclient類wh9ic不時使用asynctask evry ..我的意思是多線程保存在農村,同時使圖書館..我想知道如何使用kaltura使用翻新和其他libraries.Please分享您的寶貴經驗whalt kaltura develpomen – DevKRos 2016-09-22 10:39:08
加入@saltmiser – DevKRos 2016-09-22 10:39:16