2017-02-28 10 views
1

나는 HDMI 입력을 읽고 화면의 일부에 표시하는 Android 박스 용 독점 앱을 개발 중입니다. 이를 위해 우리는 R9 미니 안드로이드 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 벤더에 의해 지정된 종속성 항아리 (리얼텍 클라스) 내에서의 .class 인 .

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

큰 도움이 될 것입니다 솔루션쪽으로 향하고 어떤 방향을 : 나는 RtkHDMIRxManager의 디 컴파일 버전에서 디버깅 포인트를 배치 한

, 나는에 예외를 발견했다.

답변

0

2 가지 방법이 해결하려면

  1. 내가 android:sharedUserId="android.uid.system"를 사용하고 pempk8 파일을 해당과 응용 프로그램에 서명했다.

  2. 앱을 설치하고 adb 명령을 사용하여 앱을/system/디렉토리로 이동하십시오. 시스템 앱이 아닙니다. 지금 모든 시스템 리소스를 공유 할 수 있습니다.