Cấm com.android.phone đã dừng lại sau khi flash bẩn CM13


8

Sau khi làm bẩn flash OnePlus One của tôi (thịt xông khói) từ CM12.1 sang CM13, tôi liên tục bị bật các hộp thoại đóng cửa sổ bật lên

Unfortunately the process com.android.phone has stopped

Logcat chứa đầy stacktraces như thế này:

Shutting down VM
FATAL EXCEPTION: main
Process: com.android.phone, PID: 13148
java.lang.RuntimeException: Unable to get provider com.android.providers.telephony.TelephonyProvider: java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.
    at android.app.ActivityThread.installProvider(ActivityThread.java:5205)
    at android.app.ActivityThread.installContentProviders(ActivityThread.java:4797)
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4737)
    at android.app.ActivityThread.-wrap1(ActivityThread.java)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1424)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:148)
    at android.app.ActivityThread.main(ActivityThread.java:5466)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.
    at android.database.CursorWindow.nativeGetString(Native Method)
    at android.database.CursorWindow.getString(CursorWindow.java:438)
    at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:51)
    at com.android.providers.telephony.TelephonyProvider$DatabaseHelper.getStringValueFromCursor(TelephonyProvider.java:993)
    at com.android.providers.telephony.TelephonyProvider$DatabaseHelper.copyPreservedApnsToNewTable(TelephonyProvider.java:905)
    at com.android.providers.telephony.TelephonyProvider$DatabaseHelper.onUpgrade(TelephonyProvider.java:641)
    at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:256)
    at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:187)
    at com.android.providers.telephony.TelephonyProvider.onCreate(TelephonyProvider.java:1457)
    at android.content.ContentProvider.attachInfo(ContentProvider.java:1748)
    at android.content.ContentProvider.attachInfo(ContentProvider.java:1723)
    at android.app.ActivityThread.installProvider(ActivityThread.java:5202)
    ... 10 more

Khi tôi bằng cách nào đó thoát khỏi cửa sổ bật lên UI liên tục, có vẻ như com.android.phonenó bị sập ít nhất 10 lần mỗi giây, làm ngập logcat và khiến cho việc sử dụng điện thoại gần như không thể.

Có bất kỳ hy vọng cho một sửa chữa, hoặc là một thiết lập lại cứng là lựa chọn duy nhất?


1
Làm dữ liệu rõ ràng cho com.android.providers.telephony(ứng dụng đi theo nhãn "Bộ lưu trữ / nhà cung cấp điện thoại / điện thoại"). Trong khi bạn đang ở trên đó, hãy làm điều đó cho ứng dụng Điện thoại ( com.android.phone), khởi động lại và cho chúng tôi biết kết quả. Dường như cơ sở dữ liệu com.android.providers.telephonykhông thể đọc được. Có thể bạn không thể xóa dữ liệu cho các ứng dụng đó. Trong trường hợp đó, xóa thư mục / dữ liệu / dữ liệu của họ khỏi bề mặt trái đất.
Firelord

Xóa bộ nhớ cache (khỏi phục hồi) có thể giúp
Ankush

Tôi đã cố gắng loại bỏ các thư mục này bằng Total Commander trong chế độ root. Tôi đã cố gắng để xóa nhưng nó không giúp được gì. Tôi cũng đã thực hiện khởi động lại :( Tôi không thể gọi cho bất cứ ai ...
Nickon

Câu trả lời:


8

Điều này là do một sự thay đổi trong mã.

Như Firelord đã nói, hãy xóa dữ liệu cho các ứng dụng, Điều này có thể được thực hiện như vậy ( điều này cũng sẽ xóa cơ sở dữ liệu SMS / MMS của bạn, vì vậy hãy đảm bảo sao lưu chúng trước ):

adb shell
rm -fr /data/data/com.android.providers.telephony/
rm -fr /data/data/com.android.phone/
exit

Cờ -f dành cho lực lượng và cờ -r có nghĩa là đệ quy.


Điều đó đã làm việc! Cảm ơn. Tôi cũng nhận thấy dòng này trong logcat của tôi: TelephonyProvider: dbh.onUpgrade:+ db=SQLiteDatabase: /data/user/0/com.android.providers.telephony/databases/telephony.db oldV=1114120 newV=1376264Sau khi xóa thư mục dữ liệu và khởi động lại, các hộp thoại đóng lực lượng dừng lại. Có gì trong cơ sở dữ liệu? Tôi nhận thấy tất cả các tin nhắn văn bản của tôi đã biến mất. Còn gì nữa không?
Friederbluemle

2
Độc giả: đảm bảo khởi động lại thiết bị sau khi xóa các thư mục đó.
Firelord

Xen kẽ là không thể xóa dữ liệu khỏi menu Ứng dụng. Tôi cần khởi động lại vào TWRP và xóa thư mục ở đó (cái đầu tiên là đủ)
reox

Phương pháp này không hoạt động đối với Cyanogenmod 14 / Android 7

@Adem tháng 11, logcat là gì?
Aaahh

6

Tôi gặp vấn đề tương tự khi nâng cấp lên CM13 từ CM12.1. Bạn có thể giải quyết vấn đề này mà không xóa các tệp cơ sở dữ liệu của mình và do đó mất dữ liệu như được đề xuất trong các câu trả lời khác.

Thủ phạm dường như bị phá vỡ cơ sở dữ liệu mã nâng cấp trong TelephonyProvider của CM. Các ppp_numbercột của bảng hãng không tồn tại, nhưng mã nâng cấp giả định nó đã tồn tại.

Tôi đã giải quyết nó bằng cách sao chép telony.db vào máy Linux cục bộ của tôi và hoàn nguyên phiên bản cơ sở dữ liệu thành phiên bản 16 << 16 | 6 = 1048582để buộc mã nâng cấp thêm các cột bị thiếu. Các ALTER TABLEcâu lệnh trong mã được liên kết được bảo vệ bởi các khối thử bắt, do đó không có vấn đề gì nếu một số cột đã tồn tại. Khởi động điện thoại vào recovery (ví dụ TWRP) để có quyền riêng tư adb và tránh các cuộc đua khóa với Android Runtime, người luôn cố gắng bắt đầu nhà cung cấp dịch vụ điện thoại.

% adb pull /data/user/0/com.android.providers.telephony/databases/telephony.db
% adb pull /data/user/0/com.android.providers.telephony/databases/telephony.db-journal

Tạo bản sao lưu

% cp telephony.db telephony.db.bak
% cp telephony.db-journal telephony.db-journal.bak

Sau đó mở cơ sở dữ liệu với sqlite và thiết lập phiên bản

% sqlite3 telephony.db
sqlite> PRAGMA user_version = 1048582;
sqlite> .quit

Tải cơ sở dữ liệu đã thay đổi trở lại thiết bị và sửa quyền

% adb push telephony.db /data/user/0/com.android.providers.telephony/databases
% adb shell
~ # cd /data/user/0/com.android.providers.telephony/databases
/data/data/com.android.providers.telephony/databases # rm telephony.db-journal
/data/data/com.android.providers.telephony/databases # chown radio:radio telephony.db
/data/data/com.android.providers.telephony/databases # chmod 660 telephony.db

Bạn cũng có thể thử điều này trên hệ thống bị hỏng mà tôi không khuyến nghị. Bạn có thể phải trở thành root với adb rootđể sao chép và sửa đổi các tập tin với adb.


Tuyệt vời chú ý đến chi tiết! Lời giải thích được nhiều đánh giá cao. Giống như @gedenkt, tôi đã làm theo các hướng dẫn này, nhưng chúng cũng không hiệu quả với tôi. : - / Chỉ cần xóa hai *.db*tệp này đã giải quyết vấn đề.
Tommy Stanton

Bạn có thể sử dụng lệnh "chân không" để hợp nhất nhật ký với db. $ sqlite3 telephony.db VACUUM
tlwhitec

4

Tôi đã thử giải pháp của Sebastian, nhưng lỗi vẫn tồn tại. Câu trả lời được chấp nhận dẫn đến mất tất cả SMS của bạn, do đó không phải là một lựa chọn cho tôi. Tuy nhiên, sau khi khởi động vào chế độ phục hồi và xóa các tệp

/data/data/com.android.providers.telephony/databases/telephony.db
/data/data/com.android.providers.telephony/databases/telephony.db-journal

Điện thoại hoạt động hoàn hảo trở lại. Các tệp dường như chỉ chứa dữ liệu được tạo tự động, vì vậy an toàn khi xóa chúng.


Làm cách nào để xóa một số tệp trong chế độ khôi phục?
Hinrich

1
@Hinrich Nếu bạn sử dụng phục hồi đầy đủ tính năng như TWRP, bạn có thể sử dụng trình quản lý tệp tích hợp.
Bí tích

Dưới đây là chi tiết hơn một chút về TWRP. Trong trường hợp của tôi, tôi đang chạy Safestrap 3.75 (TWRP v2.7.1.0) và tôi phải sử dụng nút "Mount", sau đó kiểm tra "Dữ liệu", sau đó quay lại, sau đó sử dụng nút "Nâng cao" để sử dụng Nút "Trình quản lý tệp" (sau đó điều hướng, bắt đầu từ thư mục "dữ liệu").
Tommy Stanton

1

Nếu bạn không thể truy cập vào vỏ adb hoặc xóa thư mục khỏi điện thoại của mình vì không thể sử dụng được, bạn cũng có thể xóa thư mục khỏi phục hồi TWRP whitin.


1
Vui lòng thêm các hướng cần thiết để làm điều đó trong câu trả lời của bạn. Nếu OP không có TWRP thì sao?
Tamoghna Chowdhury

0

Có cùng poblem sau khi cập nhật từ CM12 lên CM13. Đây là cách tôi có thể sửa nó:

Tôi đã xóa hai thư mục này

/data/user/0/com.android.providers.telephony
/data/data/com.android.phone/

hoàn toàn từ điện thoại của tôi (Nexus 5). Tôi đã từng ES Explorerlàm như vậy, tôi phải bật Root ModeShow Hidden Filesđể có thể xóa các tập tin trong thư mục đó.

Nhật ký cuộc gọi và SMS vẫn còn đó, không thể thấy bất kỳ nhược điểm nào do xóa các thư mục đó. Mọi thứ dường như hoạt động trơn tru trở lại.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.