標籤:
最近做東西,先是在模擬器上進行資料庫的測試,讀寫操作,發現沒問題了之後開始進行真機的測試。但是,為了在測試的時候能查看資料庫的變化,確保程式的值都正確的寫入了資料庫。就通過adb shell串連手機進行查看。但是發現和模擬器不同,有各種各樣的問題,不過總結下來一句話就是---許可權不夠。
現將問題總結如下,並給出我的一些解決辦法,都是一些笨方法。比較粗暴。
問題一: sh: sqlite3 command not found.
adb shell進入程式目錄後通過 sqlite3 "databases name",後提示這個,是因為/system/xbin/下沒有sqlite3 檔案的命令執行檔案。解決的方法就是拷貝一個進去。網上關於這方面的東西也很多。但是也有很多人說不好使。原因在於sqlite3也是有很多版本的,個人推薦的方法是先弄清楚自己的真機的Android版本。在AVD中建立一個版本一樣的模擬器,然後將模擬器中/system/xbin/sqlite3 拉出來,放進真機中。
問題二: permission denied
接著上面的步驟我們發現,檔案放進去了,但是檔案的屬性是讀寫,沒有執行許可權。所以解決辦法就是給它執行的的許可權。簡單粗暴一點的方法就是 chmod 777.簡單又粗暴。其實在上面或者這裡我們都會發現一個問題,當我們以adb shell 去操作真機時,會發現,由於手機的系統都是read only,所以上面和我們接下來的大部分操作都會被拒絕或者提醒許可權不夠,這時我們需要暫時的把檔案系統改為可寫的(我對linux並不是很熟悉,這是在網上搜集的解決方案)。
mount -o remount,rw -t yaffs2 /system/xbin
問題三: CANNOT LINK EXECUTABLE
修改完sqlite3檔案的可執行許可權後,還是執行失敗,是因為少了libncurses.so庫檔案,上網上down下來然後拉進/system/lib下。
問題四: Error: unable to open database "****": unable to open database file
做完上面的東西,已經折騰了半天,實在是很無語。本以為快要解決的時候。突然又出現了這個問題。這個問題讓我有點摸不著頭腦,因為百度了一下發現,這依然是許可權問題。但是我不懂的是作為一個資料庫檔案,有了讀寫的許可權為什麼還是不能被sqlite3載入。在我嘗試給資料庫賦上執行許可權時,就能夠開啟了個人感覺一個檔案不需要執行,只需要被另一個程式開啟時是不需要執行許可權的。還望大家看到後告知我一聲。雖然解決了但是依然莫名其妙。
在解決了上述的問題後就能夠通過adb shell 調試真機的資料庫了。網上也有一些這方面的文章,此篇文章只是作為補充說明和個人碰到問題集合。
Android 調試真機 SQLite 資料庫