שְׁאֵלָה:
מדוע כרטיס ה- SD מותקן ב- "/ sdcard / external_sd" במקום "/ sdcard" (או "/ mnt / sdcard")?
Sepero
2012-11-10 14:43:24 UTC
view on stackexchange narkive permalink

לאחרונה שדרגתי את הטלפון שלי ל- LG Motion 4G (Android 4 ICS). אני רואה שכרטיס ה- sd מותקן ב- / sdcard / external_sd . שמתי לב שנראה שזה זהה עם כמה דגמים חדשים יותר. האפליקציות מצפות שכרטיס ה- SD יהיה בכתובת / sdcard . אני מניח שהיצרנים רוצים לכלול הרבה אחסון פנימי, אבל למה לעלות אחסון פנימי ב- / sdcard ? האם זה לא אמור להיות מנוגד לתקן מפרט אנדרואיד כלשהו?

באשר ל"תקן המפרט ", זה לא אמור להעלות בעיות: כפי שאתה יכול לקרוא בתיעוד המפתחים ב- [אחסון חיצוני] (http://developer.android.com/guide/topics/data/data-storage.html# filesExternal), אפליקציות צריכות לקבוע את המיקום / הזמינות באמצעות שיחות API (כאן: [getExternalStorageState ()] (http://developer.android.com/reference/android/os/Environment.html#getExternalStorageState ())), לא משתמש נתיבים מקודדים קשה.
נקודה טובה איזי, אבל כנראה שחלק מהיצרנים מפנים באופן שגוי אפליקציות לחלל הפנימי דרך getExternalStorageDirectory (). http://stackoverflow.com/questions/11281010/how-can-i-get-external-sd-card-path-for-android-4-0
אה, גם נקודה טובה - כמי שאינו מפתח לא הייתי מודע לכך. אבל אני רואה ש- Flow סיפק הסבר טוב מאוד - שוב עם נקודות שלא הייתי מודע להן ...
שְׁלוֹשָׁה תשובות:
Flow
2012-11-10 17:35:21 UTC
view on stackexchange narkive permalink

הסיבה היא ההיסטוריה של אנדרואיד: לדור הראשון של מכשירי אנדרואיד היה רק ​​כמות קטנה של אחסון פנימי (בסביבות 100-400MiB) שהותקן תחת / data .

בשלב הבא יצאו מכשירים עם כרטיס SD, באותו זמן חיצוני. כרטיס ה- SD הותקן תחת /mnt/sdcard.

לאחר מכן, מכשירים עם אחסון פנימי גדול הגיעו לשוק. אחסון זה חולק, מכיוון ש- / mnt / sdcard הפך למקום ברירת המחדל עבור נתחי Big Data מאפליקציות, תמונות וכדומה. כך שסביבת אנדרואיד הייתה חייבת לכלול ספריה / data ו- / mnt / sdcard . לכן מחיצה אחת הייתה עבור / data , והשניה עבור / mnt / sdcard . זו הסיבה שבגללה שטח האחסון יכול להיות נמוך (המחיצה / data ) גם אם יש מספיק מקום ב- / mnt / sdcard .

מצב זה שופר עם Android 3.0: / data ו- / mnt / sdcard מצביעים כעת על אותה מחיצה. עבודה טובה גוגל, זה יכול היה להיעשות לפני גרסאות. sup> וזו גם הסיבה לכך שאין צורך יותר ב- app2sd ב- Android 3.0 ומעלה: היית מעביר את הנתונים רק באותו נפח.

כעת אנו מגיעים לתשובה אם שאלתך: מכיוון ש- / mnt / sdcard כבר מותקן על האחסון הפנימי, כרטיס SD חיצוני צריך להשתמש בנקודת הרכבה אחרת. נקודת הרכבה זו אינה מוגדרת על ידי גוגל. זה יכול להיות

  • / mnt / sdcard / ext_sd
  • / mnt / external
  • / mnt / extSdCard
  • / mnt / sdcard / external_sd
  • וכו '

שיחת ה- API getExternalStorageDirectory () בדרך כלל מצביעה על ספריית האחסון הפנימית. התנהגות זו מתועדת. ישנם פרויקטים של קוד פתוח המספקים כלים למציאת ספריית כרטיסי ה- SD החיצונית באופן קנוני.

האם זה אומר שאין "דרך שקופה" לאפליקציות לקבוע את כרטיס ה- SD? כמובן, יש [`isExternalStorageRemovable ()`] (http://developer.android.com/reference/android/os/Environment.html#isExternalStorageRemovable ()) כדי לראות אם האחסון "החיצוני" נשלף, ועוד אחד יכול קבע את נקודות ההרכבה (באמצעות פקודת 'הר') ובדוק אם קיימים דגלי הר וכו '. אבל אם לא טועים כאן, זה עדיין אומר שכל מפתח צריך להבין את האפליקציה שלו בעצמו, ואין קריאת API פשוטה ל לעשות את זה בשבילו?
זה נכון. ישנן הספריות שקישרתי המנסות להוסיף את התכונה הזו, אך אין קריאה רשמית ל- API לעשות זאת.
אם גם האחסון החיצוני וגם מחיצת '/ data' מוזגים, כיצד אוכל לטעון / לפרק את כרטיס ה- SD בבטחה כדי לחבר אותו, למשל, למחשב האישי שלי? נראה לי שיש מחיצות נפרדות זה הגיוני ואני לא מבין למה כל זה היה צריך לקרות.
זה לא האחסון החיצוני, אלא מה שמכונה "SD פנימי" ומחיצת `/ data` שמתמזגים.
"מצב זה שופר עם אנדרואיד 3.0: / data ו- / mnt / sdcard מצביעים כעת על אותה מחיצה". רק לידיעתך, זה לא נכון לפחות בטלפון אחד שמריץ אנדרואיד 4.0 (Pantech Burst), כאשר '/ data' הוא מחיצת ext4 בנפח 1GB ו- '/ mnt / sdcard' היא מחיצת FAT32 בגודל 12GB.
כל ההצהרות קשורות לאנדרואיד וניל. היצרנים רשאים לעזוב את הדרך שגוגל קבעה.
תתבייש בגוגל על ​​שלא מספקת קריאת API לזיהוי חד משמעי של נקודת ההרכבה, או לכל הפחות ציין נקודת הרכבה "מומלצת" (במקום להשאיר יצרנים להמציא כל אחד מהם). פרויקט Environment2 ב- GitHub (תודה על הקישור אליו) אכן מקל על הכאב, אך חבל שהתיעוד (הנרחב) בקוד הכל בגרמנית.
רק כדוגמה, אני משתמש ב- Android 6.0.1 וכרטיס ה- SD החיצוני שלי מותקן ב- `/ אחסון / {מספרים אקראיים, למשל. 3430-3234} `, אשר אסטרו משנה את שמו ל-` / אחסון / כרטיס SD`.
Deecee
2012-11-30 11:03:16 UTC
view on stackexchange narkive permalink

לאילוץ הרכבה של SD חיצוני הרחק מ- / mnt / sdcard אין שום תועלת טכנית, זו הדרך של גוגל לעזור לספקי חומרה ליצור נקודת בידול לטלפונים עם זיכרון פנימי רב יותר.

אין שום סיבה שאפליקציות יצטרכו למצוא דרך לאתר את הכרטיס החיצוני כאשר / mnt / sdcard היה בבירור המקום בו כרטיס ה- SD היה צריך להיות והדרך הלא מוגדרת של גוגל לטעון כרטיס SD חיצוני היא עוד אחת פחות מזימה ידידותית לצרכן כדי להפוך את כרטיס ה- SD החיצוני לפחות שימושי במכשירי Android חדשים יותר. אין שום סיבה ש / data ו- / mnt / sdcard היו צריכים להיות מוזגים לאותה מחיצה בגרסה חדשה יותר של Android, למעט היצרן כדי לבדל טלפונים עם זיכרון פנימי גדול יותר מ יחידות בעלות נמוכה יותר עם פחות זיכרון פנימי. גם אם המיזוג היה צריך להיעשות, גוגל הייתה יכולה להגדיר בבירור נקודת הרכבה חדשה STANDARD עבור כרטיסי ה- SD החיצוניים במקום להשאיר אותה מעורפלת לחלוטין. זה פועל לחלוטין נגד מניעת "פילוח" נוסף של מערכת הסביבה של אנדרואיד על ידי עיצוב מגושם כדי לסייע בבידול ספקים של מכשירי קצה גבוהים יותר לעומת יחידות בעלות נמוכה יותר עם פחות זיכרון מובנה.

קבצים בינאריים של אפליקציות אנדרואיד הם טלפונים זעירים עם 1-2 הופעות של זיכרון פנימי אמורים להכיל מספיק מקום למאות אפליקציות, וכל הנתונים הגדולים יכולים להיות מונחים בבטחה בכרטיס SD חיצוני. אבל אז הספקים הבינו שהם חייבים להיות דרך להבדיל את המוצר הקצה הגבוה שלהם, וטוענים כי זיכרון פנימי גבוה יותר הופך לחלק מאותה תכנית ומשתק את התועלת שבזיכרון חיצוני הוא החלק המשולב האחר שהתכנית הזו נדרשת בכדי שזה יעבוד באופן מלא ומכאן API פחות מועיל למציאת כרטיסי SD חיצוניים ונקודות ההרכבה הלא תקנות.

אז: לא, הרכבת כרטיס SD במקום שאינו / mnt / sdcard אינה אלא אסטרטגיה עסקית למכירת טלפונים חדשים במחירים גבוהים יותר תחת גרסה חדשה יותר של Android, לא יותר מכך. תארו לעצמכם, אם ה- Nexus 4 8GB וה- Nexus 16GB יכולים להשתמש בשני 64GB של כרטיס SD חיצוני ליישום ולמדיה, האם יש סיבה שמישהו יקנה את גרסת ה- 16 GB? זיכרון ה- NAND הנוסף של 8 ג'יגה בייט לא שווה להבדל במחיר של 50 דולר אם מדובר בכרטיסי SD חיצוניים. מכיוון שרוב הרכיבים בטלפון חכם די צריכים להיות זהים (זיכרון RAM, מעבד, מכשירי רדיו), האזור היחיד שנותר לשולי רווח גדולים יותר הוא שטח הזיכרון הפנימי, ומכאן נקודת ההרכבה המימרית החיצונית המוזרה.

אני לא אתפלא מאנדרואיד 5.0, התמיכה בכרטיס SD חיצוני תהיה נחלת העבר. מכיוון שאם קשה לאפליקציות למצוא כרטיס SD חיצוני, אז רוב התוכניות פשוט ישתמשו במיקומים הידועים / data ו- / mnt / sdcard , כאשר רוב האפליקציות משתמשות יותר ויותר נתונים מאוחסנים יותר לצורך פעולתו, אסטרטגיית סימון מוצרים תוססת נוצרת מתוך "אוויר דק" פשוט על ידי אי הרכבה של כרטיס SD חיצוני ב- / mnt / sdcard .

עכשיו, זה מה שאני מכנה * קיר טקסט *. נראה גם קצת ערמומי. אנא הוסף כמה פסקאות לתשובתך. כמו כן אני לא מבין מדוע אין "שום סיבה למזג` / data` ו- `/ mnt / sdcard`", מכיוון שאני רואה בבירור סיבה: הימנעות מפיצול האחסון הפנימי.
זה בהחלט היה התלהמות, Deecee, אבל בלי קשר, אני מעריך את תשומתך. לחיים
ויש בזה עוד דבר: במכשירים שמניחים את כרטיס ה- SD החיצוני * בתוך * הפנימי (למשל `/ sdcard / external_sd` ב- LG P880), גיבוי" אחסון משותף "* כולל את שניהם *, ויוצר ענק ארכיון. אין דרך לגבות את ה- SD הפנימי רק בגישה קלה. מה שלא הגיוני במיוחד, שכן ישנן דרכים קלות בהרבה לגבות את הכרטיס החיצוני. עובדה שמשגעת אותי, כיוון שיש לי את המכשיר שהוזכר ...
Rudi Pittman
2013-07-18 20:55:36 UTC
view on stackexchange narkive permalink

עליך להיות מודע (אם מושרש) אתה יכול להיכנס אל /system/etc/vold.fstab ולהחליף את נקודות ההרכבה ל- / sdcard ו- / mnt/external_sd.... זה יאפשר לכרטיס ה- sd שלך להיות מופעל / sdcard כפי שאתה מצפה ושאר "האחסון הפנימי" יותקן ב- / mnt / external_sd או אם אתה מעדיף / sdcard / external_sd /

זה עובד עם כמה דגמי טלפונים, אך לא כולם. זה לא עובד עבור ה- LG Motion 4G שלי, אנדרואיד 4.0.4. תודה


שאלה ותשובה זו תורגמה אוטומטית מהשפה האנגלית.התוכן המקורי זמין ב- stackexchange, ואנו מודים לו על רישיון cc by-sa 3.0 עליו הוא מופץ.
Loading...