2017-02-28 4 views
1

Ich arbeite an einer proprietären App für Android-Boxen, die HDMI-Eingang liest und es in einem Teil des Bildschirms anzeigt. Dafür verwenden wir R9 Mini Android TV Box (link). Der Anbieter hat den Quellcode einer Beispielanwendung bereitgestellt, um die HDMI-Eingabe zu lesen, aber die App startet das Wurffehler-Popup nicht (Leider wurde SourceIn gestoppt).Android: Kann keine Systembibliothek laden

Es folgt die Ausnahme-Stack-Trace:

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) 

Der Absturz aus dem Code innerhalb einer Bibliothek Abhängigkeit initiiert wird. Beim Debuggen der dekompilierten .class-Datei. Im Folgenden ist der Code, wo der obige Fehler ausgelöst wird:

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

Ich habe die .so-Dateien gesehen auf/system/lib/Ordner und gefunden librealtek_runtime.so vorhanden zu sein, so kann ich nicht verstehen, warum loadlibrary versagt.

Nach der relevante Code:

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 ist ein .class- innerhalb des Abhängigkeits jar (realtek-Klassen) von dem Verkäufer angegebenen .

Wenn ich Debug-Punkte innerhalb dekompilierten Version von RtkHDMIRxManager platziert haben, fand ich die Ausnahme an:

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

jede Richtung in Richtung der Lösung zeigte eine große Hilfe sein würde.

Antwort

0

2 Möglichkeiten zu beheben:

  1. I android:sharedUserId="android.uid.system" und Zeichen-App mit entsprechenden pem und pk8 Dateien verwenden musste.

  2. Installieren Sie die App, verwenden Sie ADB-Befehle, um die App in das Verzeichnis/system/zu verschieben. Nicht eine System App. Sie können jetzt alle Systemressourcen freigeben.

Verwandte Themen