2012-07-19 127 views
0

我正在編寫一個Android API級別10的應用程序,該應用程序捕獲視頻並將其上傳到我們的Kaltura網站。由於Kaltura提供了一個Java客戶端庫(here),並且他們說在他們的文檔中使用了Java客戶端庫,所以標題爲「Kaltura Android SDK參考應用程序實現指南」。 (hereAndroid上的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

感謝您的閱讀。

回答

0

客戶端確實是自動生成的,因爲Kaltura的API得到更新,服務器會在每次更新時生成新客戶端以提供客戶端的最新功能。 你可以閱讀更多關於Kaltura的客戶端類庫裏發電機在這裏: http://knowledge.kaltura.com/adding-new-kaltura-api-client-library-generator

任何補丁或你認爲會改善客戶端庫,歡迎修改,隨意在這裏或在Kaltura.org問題線程附加它。

當前的Java客戶端還不是Android友好的,它適用於純Java使用。 有適應和創建一個Android特定版本的工作,任何改進的建議或補丁都非常感謝。

+0

@ Zohain.Babin我知道現在已經很晚了對此主題發表評論。我剛開始使用kaltura sdk,它只是困惑我。它提供了kaltura配置和Kalturaclient類wh9ic不時使用asynctask evry ..我的意思是多線程保存在農村,同時使圖書館..我想知道如何使用kaltura使用翻新和其他libraries.Please分享您的寶貴經驗whalt kaltura develpomen – DevKRos 2016-09-22 10:39:08

+0

加入@saltmiser – DevKRos 2016-09-22 10:39:16