fuseandroid
⑴ 【譯】Fuse入門(二)
官網原文: Fuse
預覽時,Fuse會在手持設備上創建一個殼(shell)程序,與在運行在桌面系統的Fuse後台程序相連,從而快速顯示你對項目做的所有更改。但是,如果你去參加一個會議,或者給客戶去秀秀,手持設備要斷開與開發環境的連接時,你就需要將項目輸出到你要運行的設備上。
首先,你需要有一台運行OS X系統並安裝了Xcode的Mac,其次,你還要有一個蘋果開發者賬號,都齊了,就在項目目錄里鍵入下面的命令:
該命令會在Xcode中打開建成的項目,在可用輸出目標的下拉菜單里選擇你的設備型號,然後點擊「運行」按鈕,App就會部明伍署並運行在你的設備上了。
首先確定Android SDK/NDK都安裝好了(在安卓上預覽也需要安裝這些,如沒有,在命令行輸入: fuse install android ),然後在命令行的項目目錄中鍵入:
你的項目就已部署在與系統相連的安卓設備上了。
Fuse主要被用來做這么兩類事兒:
這兩類事兒都是通過UX標記來進行主體表喚槐述的。
UX標記實際上是基於XML的文件格式,有點XML經驗的用戶都能輕松上手。詳細的功能、深度的解讀,請參考 UX標記文檔 。
單獨創建應用或原型,使用 <app> 標簽:
在 <App> 標簽內,可以嵌入任何 Node 、 Behavior 或 Theme 這些類型的標簽。上面的例子簡單的用默認的字體顯示了一段文字。
App 標簽自身負責引導整個App,並處理應用程序的生命周期和主題事務。
使用 Background 屬性設置App根視圖的背景色。
UX文檔都是由若干XML標簽組成,每個可用的UX標簽都相當於一個用Uno編碼的類,每個標簽還對應一個或多個runtime對象。
這些可用的標簽(類)可分為如下類別:
App 提供一個主題設置,Theme定義了各標准組件的外觀,如下列所示:
如不指定, App 會默認一個預設設定叫做 GraphicsTheme 。
當使用 NativeTheme 時, Fuse會應用目標平台的原生控制,如下所示:
此例中,所有顯示的控制激鏈或器都採用iOS和安卓的原生樣式,而桌面預覽中並不會出現。
GraphicsTheme 是App的預設主題,它能讓你的App在所有平台上都保持一致的外觀,除了這些:
使用 GrapicsTheme 主題的好處是:
因為 GraphicsTheme 是預設值,所以無需特意寫上,但如果實在需要,那就看這兒:
或者這樣:
擴展定製 GraphicsTheme 也是可行的,比如要給 Slider 滑動條和 Button 按鈕定義特別的外觀。
自定義 GraphicsTheme 的方式是,把它當成一個基礎類來使用, 象這樣:
這樣的話,在App標簽里要這么寫:
也可以給它創建一個全局別名,像這樣:
那樣的話,在App標簽里要這么寫:
這個 BasicTheme 主題實際上就是以 GraphicsTheme 為基礎,加上一些預設的Fuse頁面,並且在設計上採用了谷歌的 material design 設計理念。
如果你設計UI時需要一個起點,該主題會幫到你並在全平台上保持一致的外觀。
⑵ android 為什麼要用fuse
Android FUSE 的設計目的就是為了把/data分區映射成一個內部儲存,使得手機的內部儲存和/data分區激扒或可以共用。
還有就是,比如我要支持一個新的文件系統,比如支持NTFS,要在內核中寫代碼實現,而不巧的是內核態的代碼非常的難寫,非常的難調試。。。so。。導致整個工程都拖延在這里了此槐,但是呢。明伍。用戶空間中編寫和調試的難度小,所以非常方便,用C++ Java寫都可以。
作者:何文力
⑶ 如何恢復安卓中 /dev/fuse 的文件
步驟一:首先要把手機和電腦連接,判斷手機是否能被電腦識別。 步驟二謹喚碼:選擇合適的數據恢復工具 步驟三:選擇合適祥哪的數據恢復方法 步驟五:在掃描結果中查找需要恢復的文件 步驟六:將需要恢復的文件拷貝出來 手機存儲卡空間上的文件誤刪除鏈族之後,...
⑷ 如何正確獲得Android內外SD卡路徑
/**
* 獲取手機自身內存路徑
*
*/
public static String getPhoneCardPath(){
return Environment.getDataDirectory().getPath();
}
/**
* 獲取sd卡路徑
* 雙sd卡時,根據」設置「裡面的數據存儲位置選擇,獲得的是內置sd卡或外置sd卡
* @return
*/
public static String getNormalSDCardPath(){
return Environment.getExternalStorageDirectory().getPath();
}
/**
* 獲取sd卡路徑
* 雙sd卡時,獲得的是外置sd卡
* @return
*/
public static String getSDCardPath() {
String cmd = "cat /proc/mounts";
Runtime run = Runtime.getRuntime();// 返回與當前 Java 應用程序相關的運行時對象
BufferedInputStream in=null;
BufferedReader inBr=null;
try {
Process p = run.exec(cmd);// 啟動另一個進程來執行命令
in = new BufferedInputStream(p.getInputStream());
inBr = new BufferedReader(new InputStreamReader(in));
String lineStr;
while ((lineStr = inBr.readLine()) != null) {
// 獲得命令執行後在控制台的輸出信息
Log.i("CommonUtil:getSDCardPath", lineStr);
if (lineStr.contains("sdcard")
&& lineStr.contains(".android_secure")) {
String[] strArray = lineStr.split(" ");
if (strArray != null && strArray.length >= 5) {
String result = strArray[1].replace("/.android_secure",
"");
return result;
}
}
// 檢查命令是否執行失敗。
if (p.waitFor() != 0 && p.exitValue() == 1) {
// p.exitValue()==0表示正常結束,1:非正常結束
Log.e("CommonUtil:getSDCardPath", "命令執行失敗!");
}
}
} catch (Exception e) {
Log.e("CommonUtil:getSDCardPath", e.toString());
//return Environment.getExternalStorageDirectory().getPath();
}finally{
try {
if(in!=null){
in.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if(inBr!=null){
inBr.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return Environment.getExternalStorageDirectory().getPath();
}
//查看所有的sd路徑
public String getSDCardPathEx(){
String mount = new String();
try {
Runtime runtime = Runtime.getRuntime();
Process proc = runtime.exec("mount");
InputStream is = proc.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
String line;
BufferedReader br = new BufferedReader(isr);
while ((line = br.readLine()) != null) {
if (line.contains("secure")) continue;
if (line.contains("asec")) continue;
if (line.contains("fat")) {
String columns[] = line.split(" ");
if (columns != null && columns.length > 1) {
mount = mount.concat("*" + columns[1] + "\n");
}
} else if (line.contains("fuse")) {
String columns[] = line.split(" ");
if (columns != null && columns.length > 1) {
mount = mount.concat(columns[1] + "\n");
}
}
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return mount;
}
//獲取當前路徑,可用空間
public static long getAvailableSize(String path){
try{
File base = new File(path);
StatFs stat = new StatFs(base.getPath());
long nAvailableCount = stat.getBlockSize() * ((long) stat.getAvailableBlocks());
return nAvailableCount;
}catch(Exception e){
e.printStackTrace();
}
return 0;
}
⑸ android 4.4的sdcardfs是什麼它大體是怎樣工作的
是三星基於wrapfs,進行二次開發的產物。更准確的說,是重寫了fuse.把fuse在用戶態(在Android中是sdcard這個可執行文件)。悶絕工作原理是,由掛載觸發(mount -t sdcardfs... 或者寫在init.rc中也可以)。內部會起一個線程通過inotify監控packages.list這個文件。該文件保存了所有安裝APK的包名,uid,gid,路徑名等,內虛罩睜部使用一個hashlist來保存。發現有新的包安裝後,會去重新reload這個文件,比對包名。讀取其中的信息,開始修改對應inode節點的屬性,並傳遞給下一層的具體文件系統。其實本質上理解了fuse,就理解了sdcardfs.相對於fuse,減少了用戶態和內核態之間交互數據的過程。在讀寫大文件時,性能提升差歲顯著。
⑹ Android4.4不能寫外卡了嗎!!!
網上看到的:Google的Android 4.4對外卡的寫操作增加了如下兩條限制:遲晌第段手一握旦嫌是通過用戶態文件系統fuse對外卡的寫許可權進行了限制
⑺ android fuse和vold的區別
按啟動順絕慎序,如下:
service vold /system/bin/vold
class core
socket vold stream 0660 root mount
service installd /system/bin/installd
class main
socket installd stream 600 system system
service sdcard /system/bin/sdcard -u 1023 -g 1023 -l /並核敬data/media /mnt/氏孫shell/emulated
class late_start