2013-02-02 2 views
1

우리의 응용 프로그램을 시작하려고하면 새 사용자의 약 1 %가 데이터베이스 생성에 실패합니다. 주로 중국에서, 때로는 러시아와 다른 지역에서 발생합니다. 내 기기에서 재생산 할 수는 없지만 로그 업로드에서 정보를 수집했습니다./data/data/<package>에 SQLite DB 만들기가 실패했습니다.

내가 알아챈 한 가지는 : db 작성이 실패하면 패키지 디렉토리 /data/data/com.lootworks.swords의 파일 사용 권한이 --x 즉 읽기/쓰기가 불가능합니다. 이것은 rwx 액세스 권한이있는 테스트 장치와 다릅니다.

패키지 디렉토리에 --x를 지정하면 db 작성이 실패하는 이유는 무엇입니까? SQLite가 액세스하려고 할 때 OS가 변경 권한과 같은 펑키 한 작업을하지 않는 한 확실히 나에게 좋지 않습니다. 이걸 본 사람 있어요?

상세 정보 :

응용이 서브 클래스 사용합니다
  • SQLiteOpenHelper, getWritableDatabase (에
  • 초기 호출 (같은 준비된 DB 파일 또는 아무것도를 복사하지 않고)) Application.onCreate 동안 발생하는 매우 루틴()

예외 우리 SQLiteOpenHelper.onCreate() 메소드 호출로까지 도달하기 전에 전화

  • 가 getWritableDatabase에 대한 첫 번째 호출에 실패(). 그것은 우리에서 onCreate에 다시 전화해야하지만 그 전에 실패

    이미 확인 것들
    Caused by: android.database.sqlite.SQLiteException: unable to open database file 
    at android.database.sqlite.SQLiteDatabase.dbopen(Native Method) 
    at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1880) 
    at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:851) 
    at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:885) 
    at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:878) 
    at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:599) 
    at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:234) 
    at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:149) 
    at com.lootworks.swords.db.SwSqlDbOpenHelper.getDb(SourceFile:379) 
    at com.lootworks.swords.db.SwSqlDbOpenHelper.getOpenHelper(SourceFile:88) 
    at com.lootworks.swords.db.SwSqlDb.prepareDatabase(SourceFile:66) 
    at com.lootworks.swords.SwApplication.onCreate(SourceFile:291) 
    at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1004) 
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3372) 
    at android.app.ActivityThread.access$2200(ActivityThread.java:155) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1031) 
    at android.os.Handler.dispatchMessage(Handler.java:130) 
    at android.os.Looper.loop(SourceFile:351) 
    at android.app.ActivityThread.main(ActivityThread.java:3818) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:538) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:659) 
    at dalvik.system.NativeStart.main(Native Method) 
    

    : (? 일부 CN 파일 공유 일을) 설치 프로그램입니다 일부 사용자가 사이드로드하지만 증거를 가지고있다

    • 닷컴 .andding.jpg (GPlay)
  • 답변

    1

    왜 db 작성에 실패했는지 패키지 디렉토리에 있습니까?

    내 추측이 될 것입니다. 당신의 프로세스는 심지어 databases/이 존재하는지 알지 못한다.

    일부 사용자 (? 일부 CN 파일 공유 일을) 사이드로드하지만 곰 염두에 Play 스토어가 공정한 비트를 불법 복제

    설치 com.android.vending되는 예 (GPlay)가있다 앱이 Google Play에서 설치한다고 주장한다고해서 기기가 Play 스토어와 호환 가능하다는 의미는 아닙니다.

    +0

    Play 스토어가 불법 복제 될 수 있다는 것은 나에게 발생하지 않았습니다. 그래서 나는 이것들이 비공식적 인 배포판에서 설치가 엉망이라고 의심합니다. 나는 대체 안드로이드 버전/불법 복제가있는 지역에서 성공/실패 %에 대한 더 나은 아이디어를 얻기 위해 더 많은 정보 수집을 추가했습니다. – mwk

    +0

    패키지 방향 권한이 rwx 인 모든 실행에서 24h의 데이터가 성공합니다. 나는 해적판 gplay 정보가 내가 필요한 대답이라고 생각한다. – mwk