0

動画をキャプチャして Kaltura サイトにアップロードする Android API レベル 10 アプリケーションを作成しています。Kaltura は Java クライアント ライブラリ (ここ) を提供しており、「Kaltura Android SDK リファレンス アプリケーション実装ガイド」というタイトルのドキュメントで Java クライアント ライブラリを使用するように述べているため、簡単に説明できます。(ここ)

さて、Kaltura が示す Java クライアント ライブラリの例 (最初のリンク) と同一の予備的な Kaltura アップロード クラスを作成した後、JUnit を除いて、Java クライアント ライブラリの "libs" フォルダーに含まれるすべてのビルド参照を含めます。 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

したがって、追加のラッパー クラス (code.google.com/p/android-logging-log4j) がないと Log4J が Android で正確に動作しないため、上記のことが起こったと推測しています。

(Kaltura のドキュメントで) Java クライアントは書かれておらず、代わりに生成されていることを読んだので、android-logging-log4j をサポートするようにコードを手動で編集するのは単純だと思います。さらに、Eclipse で Kaltura Java クライアント ソースを開くと、ビルド パスにないクラスがいくつかあります。私が最初に気づいたのは、sun.misc.BASE64Encoder でした...Android には独自の Base64Encoder がありますが、互換性はありますか?

私が何をすべきかについて何か提案はありますか?Android で動作する Kaltura Java クライアント ライブラリを入手した人はいますか? 2 番目のリンクで説明されているサンプル アプリケーションはどこにありますか?

補足として、プロジェクトをビルドすると、ビルド パスに提供された JAR を含め、Eclipse コンソールにこれらのメッセージの多くが表示されます。

[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 でさえありません。おそらく100のクラスがあり、それらのほとんどには「これは自動生成されました」という通知が上部にあります。他のクラスにもこのようなばかげた問題があります (KalturaNullableBoolean)。

ここでは、Java クライアント ライブラリが存在しないふりをします。Ruby クライアント ライブラリが存在し、私は過去に Android で JRuby を使用して大きな成功を収めました。私たちのアプリケーションはとにかく長い時間がかかる大きなファイルのみをアップロードするため、オーバーヘッドの増加はそれほど顕著ではないはずです..動作します。含まれているJRuby JARのおかげで、.APKが巨大であることを受け入れる必要があります...

言うまでもなく、彼らは何百もの Java クラスの代わりに 2 つの Ruby スクリプトにすべてを詰め込みました...互換性のない機能があれば取​​り除くのがより簡単になり、少なくとも私の Eclipse プロジェクトは Kaltura Java ソース ファイルのジャングルにはなりません。もう。:D

読んでくれてありがとう。

4

1 に答える 1

0

クライアントは実際に自動的に生成されます.KalturaのAPIが更新されると、サーバーは更新ごとに新しいクライアントを生成して、クライアントに最新の機能を提供します. Kaltura の Client Libs ジェネレーターについて詳しくは、http: //knowledge.kaltura.com/adding-new-kaltura-api-client-library-generatorをご覧ください。

クライアント ライブラリを改善すると思われるパッチや修正を歓迎します。ここまたは Kaltura.org の問題スレッドに添付してください。

現在の Java クライアントはまだ Android に対応しておらず、純粋な Java での使用を対象としています。Android 固有のバージョンを適応させて作成する作業があり、改善のための提案やパッチは大歓迎です。

于 2012-07-22T22:55:36.870 に答える