2012-04-23 6 views
0

Недавно я реализовал код файла расширения APK, описанный в http://developer.android.com/guide/market/expansion-files.html, в моем приложении. Я обновил манифест, создал файлы службы и получателя и обновил основное действие onCreate(), чтобы соответствовать инструкциям в руководстве.Исключение загрузки файла расширения APK

Я создал подписанный apk своего приложения и загрузил его в свою учетную запись Google Play вместе с файлом obb. Они были сохранены как «черновики».

Затем я использовал ADB установить мою подписанную APK на устройстве и запустил его и сразу получил следующее исключение:


java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myapp/com.example.myapp.MyApp}: 
android.database.sqlite.SQLiteException: no such table: 
MetadataColumns: , while compiling: SELECT APKVERSION,_id,DOWNLOADSTATUS,DOWNLOADFLAGS FROM MetadataColumns LIMIT 1 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java: 1821) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java: 1842) 
    at android.app.ActivityThread.access$1500(ActivityThread.java: 132) 
    at android.app.ActivityThread $H.handleMessage(ActivityThread.java:1038) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:150) 
    at android.app.ActivityThread.main(ActivityThread.java:4263) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:507) 
    at com.android.internal.os.ZygoteInit $MethodAndArgsCaller.run(ZygoteInit.java:839) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
    at dalvik.system.NativeStart.main(Native Method) 
Caused by: android.database.sqlite.SQLiteException: no such table: 
MetadataColumns: , while compiling: SELECT APKVERSION,_id,DOWNLOADSTATUS,DOWNLOADFLAGS FROM MetadataColumns LIMIT 1 
    at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method) 
    at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java: 92) 
    at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java: 65) 
    at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:83) 
    at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java: 49) 
    at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java: 53) 
    at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java: 1438) 
    at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java: 1406) 
    at com.google.android.vending.expansion.downloader.impl.t.<init>(SourceFile: 76) 
    at com.google.android.vending.expansion.downloader.impl.t.a(SourceFile: 44) 
    at com.google.android.vending.expansion.downloader.impl.DownloaderService.a(SourceFile: 634) 

Что интересно, если я бегу мое приложение через отладчик Eclipse я могу выполнить код, вызвавший исключение, и продолжить обычную обработку, получив сообщение «Ошибка загрузки, потому что , возможно, вы не приобрели это приложение».

Любая идея, почему в подписанной версии есть исключение SQLite в библиотеке загрузчика , в частности DownloadsDB.java?

Мой проект сборки Target является 2.3.3

У меня есть Google Play лицензии, Downloader и Zip библиотеки , на которые ссылается мой проект

И я следующий в моем манифесте:

<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="15"/ 
<uses-permission android:name="com.android.vending.CHECK_LICENSE"/
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<service android:name=".MyAppDownloaderService" /> 
<receiver android:name=".MyAppAlarmReceiver" /> 

ТИА,

ДБ

+1

Вы запутываете версию выпуска? – dagalpin

ответ

0

Я не получил точно такое же исключение, но это может быть ваша проблема:

http://code.google.com/p/android/issues/detail?id=31663

Код в DownloadsDB.java немного неаккуратно и вхождений:

if (null != cur && cur.moveToFirst()) { ... } 

должен быть изменен :

if (null != cur) { if (cur.moveToFirst()) { ... } } 
+0

Спасибо, что указали это. Я дам ему попробовать. – user899352

+0

Позже я узнал, что это не исключает исключения.И они не имеют большого значения - отладчик просто предупреждал меня о них. Я мог просто просто продолжить выполнение. –

+0

Этот код сам по себе не имеет значения для заданного вопроса, потому что он абсолютно ничего не меняет. Если вы прочитали сообщение по указанной ссылке, автору пришлось разделить условие IF, чтобы он мог закрыть курсор, когда DB пуст (null! = Cur - true и cur.moveToFirst() - false). – Stan

-1

Да, но теперь подход немного изменился. каждое приложение имеет ключ,

эта ошибка возникает в основном по нескольким причинам, убедитесь, что:

вы вошли в систему с тестовой acoount в устройство. Ключи тоже в коде. Вы указали размер файла расширения в коде правильно в байтах. после загрузки подождите 3-4 часа, после чего он начнет загрузку, сразу же он не будет работать.

Смежные вопросы