2017-02-28 24 views
1

私はHDMI入力を読み込んで画面の一部に表示するAndroidボックス専用のアプリを開発中です。このために、R9 Mini Android TVボックス(link)を使用しています。ベンダーは、HDMI入力を読み取るためのサンプルアプリケーションのソースコードを提供しましたが、アプリケーションはスローエラーポップアップを起動できませんでした(残念ながら、SourceInは停止しました)。続きAndroid:システムライブラリを読み込むことができません

は、例外スタックトレースです:

02-28 15:38:36.988 3232-3232/rtk.com.RealtekSourceIn W/art: Method processed more than once: void android.app.Instrumentation.callActivityOnResume(android.app.Activity) 
02-28 15:38:37.090 3232-3232/rtk.com.RealtekSourceIn A/art: art/runtime/barrier.cc:90] Check failed: count_ == 0 (count_=-1, 0=0) Attempted to destroy barrier with non zero count 
02-28 15:38:37.090 3232-3232/rtk.com.RealtekSourceIn A/art: art/runtime/runtime.cc:366] Runtime aborting --- recursively, so no thread-specific detail! 
02-28 15:38:37.090 3232-3232/rtk.com.RealtekSourceIn A/art: art/runtime/runtime.cc:366] 
02-28 15:38:37.090 3232-3232/rtk.com.RealtekSourceIn A/libc: Fatal signal 6 (SIGABRT), code -6 in tid 3232 (RealtekSourceIn) 

クラッシュは、ライブラリの依存関係内のコードから開始されます。デコンパイルされた.classファイルのデバッグ時。上記のエラーがスローされたコードは以下の通りです:

static { 
    System.loadLibrary("realtek_runtime"); 
} 

私は/システム/ libに/フォルダでの.soファイルを見て存在することがlibrealtek_runtime.soを見つけたので、私はLoadLibrary関数が失敗した理由を理解することができませんしています。

以下は関連するコード:

RTKSourceInActivity:

public class RTKSourceInActivity extends Activity { 

    private String TAG="HDMIRxActivity"; 
    private ViewGroup m_Root; 
    private HDMIRxPlayer m_HDMIRxPlayer = null; 
    private final Handler mHandler = new Handler(); 
    private byte[] mCapture; 
    private static final long SCREENSHOT_SLOT = 200; 
    private boolean mIsFullScreen = true; 

    private File mRecordFile; 
    private boolean mRecordOn = false; 

    @Override 
    public void onResume() { 
     Log.d(TAG,"onResume"); 
     super.onResume(); 
     if(hasRtkMusicPlaybackService()) { 
      Intent i = new Intent("com.android.music.musicservicecommand"); 
      i.putExtra("command", "stop"); 
      sendBroadcast(i); 
     } 
     m_Root = (ViewGroup) findViewById(R.id.root); 
     m_HDMIRxPlayer = new HDMIRxPlayer(this, m_Root, 1920, 1080); 
    } 

... 
} 

HDMIRxPlayer:

public HDMIRxPlayer(Context context, ViewGroup parent, int width, int height) 
{ 
    mContext = context; 
    mSurfaceView = new SurfaceView(context); 
    mSurfaceHolder = mSurfaceView.getHolder(); 
    mSurfaceHolder.addCallback(HDMIRXCallback); 
    mSurfaceHolder.setFixedSize(width, height); 
    parent.addView(mSurfaceView); 

    mHDMIRX = new RtkHDMIRxManager(); // Exception here 

    IntentFilter hdmiRxFilter = new IntentFilter(HDMIRxStatus.ACTION_HDMIRX_PLUGGED); 
    mContext.registerReceiver(hdmiRxHotPlugReceiver, hdmiRxFilter); 
} 

RtkHDMIRxManagerベンダによって与え依存ジャー(Realtekの-クラス)内の.classあります。ソリューションの方を向いて、任意の方向が大きな助けになるでしょう

static { 
    System.loadLibrary("realtek_runtime"); 
} 

:私はRtkHDMIRxManagerの逆コンパイルバージョン内のデバッグポイントを置いたら

、私はで例外を発見しました。

答えて

0

2通りの方法が解決します

  1. 私はandroid:sharedUserId="android.uid.system"を使用してpempk8ファイルを対応するアプリに署名しなければなりませんでした。

  2. adbコマンドを使用して、アプリケーションを/ system /ディレクトリに移動します。それはシステムアプリではありません。今すぐすべてのシステムリソースを共有できます。

関連する問題