programing

2 개의 Android 앱간에 SQLite 데이터베이스를 공유 하시겠습니까?

copyandpastes 2021. 1. 14. 23:37
반응형

2 개의 Android 앱간에 SQLite 데이터베이스를 공유 하시겠습니까?


두 앱간에 단일 데이터베이스를 공유해야합니다. 데이터베이스가 / data / data / MY_PACKAGE / databases /에 생성된다는 것을 알고 있습니다. 패키지 이름이 다르기 때문에 두 앱에서 데이터베이스를 만들 때 하나의 패키지 이름에 대한 경로를 정의 할 수 있습니까? 감사.


확실히 두 앱간에 단일 데이터베이스를 공유 할 수 있습니다.

앱간에 데이터를 공유하려면 (동일한 게시자가 발급 한 경우) 두 앱의 AndroidManifest.xml에 공유 사용자 ID를 지정해야합니다.

<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:sharedUserId="my.app" ... >

(문서화되지 않았지만 공유 사용자 ID는 점 구분 기호가 하나 이상있는 문자열이어야합니다.)

나머지는 쉽고 데이터베이스 경로를 엉망으로 만들 필요가 없습니다. 두 앱에서 동일한 DBAdapter를 사용하십시오. 데이터베이스를 호스팅하는 앱에서 네이티브 컨텍스트로 DBAdapter를 호출합니다.

DBadapter hostDBAdapter = new DbAdapter(getApplicationContext());
performerDBadapter.open();

두 번째 앱에서 데이터베이스 호스팅 앱의 컨텍스트를 사용하여 데이터베이스에 액세스합니다.
먼저 공유 컨텍스트를 정의하십시오.

Context sharedContext = null;
    try {
        sharedContext = this.createPackageContext("replace.with.host.package.name", Context.CONTEXT_INCLUDE_CODE);
        if (sharedContext == null) {
            return;
        }
    } catch (Exception e) {
        String error = e.getMessage(); 
        return;
        }   

그런 다음 공유 컨텍스트로 DBAdapter를 엽니 다.

DbAdapter sharedDBadapter = new PerformerDbAdapter(sharedContext);
sharedDBadapter.open();

마지막으로, 매니페스트에서 공유 사용자 ID를 설정하기 전에 데이터베이스가 존재하는 경우, 데이터베이스에서 자신을 잠그지 않도록 물리적 장치에서 앱을 제거 / 다시 설치해야합니다 (sqlite 오류 14). 반면 에뮬레이터는 더 관대 할 수 있습니다. 결론적으로, 앱이 Android 마켓에 게시 된 경우 나중에 공유 사용자 ID를 설정하면 작동하지 않습니다.

도움이 되었기를 바랍니다.


데이터베이스 경로는 각 애플리케이션에 대해 비공개이며 내가 아는 한 애플리케이션간에 직접 액세스 할 수 없습니다.

그러나 한 가지 접근 방식은 한 애플리케이션이 ContentProvider를 사용하여 다른 애플리케이션이 데이터베이스에 액세스 할 수 있도록하는 것 입니다. 그것이 당신을 위해 작동하는지 확인하십시오.

콘텐츠 제공 업체는 데이터를 저장 및 검색하고 모든 애플리케이션에서 액세스 할 수 있도록합니다. 응용 프로그램간에 데이터를 공유하는 유일한 방법입니다. 모든 Android 패키지가 액세스 할 수있는 공통 저장 영역이 없습니다.


두 애플리케이션에서 동일한 인증서를 사용하는 한 애플리케이션은 동일한 프로세스에서 실행되고 동일한 애플리케이션 인 것처럼 작동합니다. Android 문서 http://developer.android.com/tools/publishing/app-signing.html 의이 섹션을 확인하세요. # 전략

참조 URL : https://stackoverflow.com/questions/7053809/share-sqlite-database-between-2-android-apps

반응형