Google Photos не може да изтрива файлове от SD картата

Много потребители на Android са се сблъскали с досаден проблем с приложенията, които имат достъп до SD картата. Едно такова приложение е Google Photos. Веднъж всичко беше наред. Но в Android 4.4 Google внедри нова системна конфигурация, която не позволява на приложенията да записват на sd картата. Изтриването на изображения през галерията и след това изтриването им отново в google photos е изключително неудобно.

Google отдавна искаше да попречи на приложенията да имат безпрепятствен достъп до sd картата. Това се обяснява с факта, че когато дадено приложение бъде изтрито, системата не може да разбере кои файлове принадлежат на приложението, така че sd картата се затрупва. И в Android 4.4, google въведе такова нещо като SAF (Storage Access Framework). Те не позволяват на приложенията да променят нищо на sd картата, с изключение на личната директория на приложението. И ако приложението поиска, дава право да чете (но не и да записва) всичко на sd картата.

Само за да обобщим, ето опциите, които приложенията на трети страни имат в KitKat: Приложение без никакви разрешения: Автоматично четене и запис за определени частни папки на основното и вторичното хранилище С WRITE_EXTERNAL_STORAGE те също имат: Четене и запис за всяка публична папка на основното (вградено) хранилище Четене (не запис) за всяка публична папка на вторичното (SD) карта) съхранение

Какво да правим в тази ситуация?

Както казах по-горе, вече реших проблема за себе си, като коригирах системната конфигурация (необходим е root). А какво да кажем за "простите" потребители, които не са чували за root? Имам няколко идеи как да реша този проблем. Някои от тях са подходящи само за Google, а някои може да са в силата на общността да ги приложи. И така, какви са опциите?

Опция "Личен указател"

Google трябва да направишансове всичко да работи. Ясно е, че те не могат да посъветват руутване на устройството. Но какво да кажем за личната директория /storage/extSdCard/Android/data/com.google.android.apps.photos? Какво съхраняват там? Най-вероятно няма кошче, тъй като файловете, изтрити в кошчето, се намират в /data/user/0/com.google.android.apps.photos/files/trash_files. Не знам, може би не е обичайно в Android да се съхраняват потребителски данни в такива директории. Просто предлагам работещо решение.

Тези. ако приложението види, че работи на Android 4.4 и няма права за достъп, извежда съобщение като „Няма достъп. Предлагаме в настройките на вашата системна камера да зададете запазване в директорията /storage/extSdCard/Android/data/com.google.android.apps.photos/DCIM. Имайте предвид, че когато изтриете снимки от Google, всички снимки ще бъдат изтрити." В момента приложението игнорира тази директория. Ако поставите снимка в нея, директорията няма да се появи в списъка за избор за синхронизиране.

Най-вероятно това е мъртва опция, тъй като камерата трябва да е системна камера (в противен случай няма да може да пише в чужда директория на sd картата), а системната камера най-вероятно не знае как да избере директория за запазване (не знае как да записва на S4).

Опция „Не е грешка, а функция“

Но се оказва, че разработчиците са открили вратичка, която все още позволява на приложенията да манипулират файлове. Проверих го сам: възстанових оригиналния platform.xml (който няма достъп за запис на sd картата), рестартирах, инсталирах total commander и ... Изтриването работи! И дори има код.

Тук решението е за Google, такова решение може да е неприемливо за тях. Но що се отнася до мен, няма нищо срамно в използването на бъг като функция, защото те трябва да накарат всичко да работи.

Опция „Всичко е лошо, но ще надстроите“

Тази статия казва, че не на всички устройстватози хак ще свърши работа. Не остава нищо друго освен просто да се покаже съобщение, че няма достъп. Вярно, можете да намекнете в него, че root ще помогне или преминаване към друга версия на Android, а по-старата също ще свърши работа.

Опция за отметки

Също така имах идея, че Google може да актуализира своите услуги на Google (а това е системно приложение), така че несистемно приложение за снимки на Google да може да се свърже с него с молба за изтриване на файла. И няма да имате нужда от root. Google ще го направи ли?

Решение за по-нови версии на Android

В Android 5.0 google подобри SAF, така че приложенията вече могат да искат от потребителя да предостави достъп за запис до конкретни директории.

По-богат достъп до вторични споделени устройства за съхранение В KitKat въведохме API, които позволяват на приложенията да четат/записват файлове в специфични за приложението директории на вторични устройства за съхранение, като например SD карти.

Чухме силно и ясно, че разработчиците искат по-богат достъп извън тези директории, така че в Lollipop добавихме новото намерение ACTION_OPEN_DOCUMENT_TREE. Приложенията могат да стартират това намерение, за да изберат и върнат директория от всеки поддържан DocumentProvider, включително всяко споделено хранилище, поддържано от устройството. След това приложенията могат да създават, актуализират и изтриват файлове и директории навсякъде под избраното дърво без допълнително взаимодействие с потребителя. Точно както при другите намерения за документи, приложенията могат да запазят този достъп при рестартиране.

Но дори и на Android 5, google photos не използва тази функция, просто казва, че няма достъп. Вярвам, чепреди да синхронизира директория, приложението трябва първо да поиска разрешения за запис в нея чрез SAF, така че моментните снимки да могат да бъдат изтрити. Това може да стане директно от същата дейност, където с превключвател избирате коедиректории, които искате да синхронизирате (Настройки - Стартиране и синхронизиране - Изберете папки). Google, защо не го направиш?

Обобщете

Потребителят щракна върху sd картата Има ли директен достъп за запис на sd картата? Да - изтрийте моментната снимка. Не - показваме съобщение, че няма достъп.

Потребителят щракна върху sd картата Има ли директен достъп / през вратичка за запис на sd картата? Да - изтрийте моментната снимка. Не - тогава - Използваме ли Android 5.0+? —Да—Поискайте достъп до каталога чрез SAF и изтрийте моментната снимка. — Не - (т.е. най-вероятно е 4.4. Но също така може да е специално модифициран 4.3-, конфигуриран като в 4.4), тогава: — - Показване на съобщение: „Няма достъп, но root ще ви помогне или сменете версията на Android“ или „Настройте системната камера да запазва снимки в /storage/extSdCard/Android/data/com.google.android.apps.photos/DCIM“, или „Актуализирайте височините на google ser, ние ще предоставим достъп за запис през тях“ по преценка на google.

Нуждаете се от разработчици

Ако тук има представители на Google, предайте информацията на разработчиците. Тъй като тази тема се обсъжда от дълго време, но Google не коригира ситуацията.

А за хабраузърите, които знаят как да се развиват на Android, искам да задам един въпрос. Може ли да си сменя приложението, както казах, но сам, без да чакам гугъл? Знам за несъответствие на цифровия подпис, но в нашия случай това няма значение. В крайна сметка всичко това е необходимо само ако приложението не е системно. И ако не е системен, тогава можете да го изтриете и след това да го инсталирате с различен подпис. Видях модифицирано приложение вместо youtube - OGYouTube. Може би точно това описвам.

Попълнете този формуляр, ако сте имали/имате описания проблем.

Hardcore conf в C++. Каним само професионалисти.

Чете сега

Разработване на печеливш Andro > +129 119k 307 147

ARCore: Разширена реалност на Android > +14 29.1k 36 6

Седмица на сигурността 28: докато Petya беше трудна за отваряне, в Andro > +17 17.2k 26 9

Коментари 30

Цитат от помощ на Google:

Какво трябва да направя, ако изтрита снимка се появи отново в колекцията?

Да, има промени. Но редът беше: 4.3 - всичко е възможно за всеки 4.4 - бе въведен saf, няма възможност за писане в sd без руут или вратички 5.0 - възможност за предоставяне на разрешения за запис на приложения в директории на sd 6.0 - Възможност за използване. sd карта вместо (!) вградена памет. 7.0 - виртуални файлове

Моля, имайте предвид, че иновация в 6.0 прави картата несменяема. Въпреки че физически файловете са на него, не можете просто да го извадите и да го поставите в компютъра, т.к. картата е форматирана по специален начин. Освен това трябва да разберете, че в този режим sd картата ще замени (но не ще допълни) вътрешната памет. Съответно се губи предимството на sd картата. И това нововъведение няма пряко отношение към проблема с достъпа до sd. Като какво е новото в 7.0.

Същия проблем. не може да получи root (твърде рядко устройство), не може да актуализира фърмуера, остана на 4.4

Първоначално версия 4.4

Фабричните настройки технически не могат да помогнат по никакъв начин - това не е в неговата компетентност; свържете устройството чрез MTP, отново няма да работи поради счупена инициализация. Единственият лесен изход е да смените eMMC с нов, но може би има алтернативни начини?

Той също беше възмутен от това. Но тъй като използвам root достъп от първото устройство на Android, за мен проблемът беше решен с редактиране на 1 файл. Устройството трябва да се подчинява на човека, а не обратното.

Моите съчувствия към потребителите за устройствакоято 4.4 е последната планирана версия и няма да има актуализации.

По този начин приложението google plus има няколко икони в менюто на приложението: собствена и google снимки. Не знаех какво се случи. Очевидно това се прави така, че преходът от google+ photo към googe photos да е прозрачен за потребителя.

Заключение: въпреки привидната предварителна инсталация, приложението Google Photos всъщност не е предварително инсталирано на вече остарели версии на операционната система.

Направих собствено проучване.

От няколко седмици Google Photos започна да казва, че не може да изтрие снимки от устройството

В google+ снимки вече се предлага да инсталирате google снимки. Но google+ photos беше системно приложение и можеше да бъде изтрито от sd, а приложението google photos, което потребителят инсталира, не е системно приложение и подлежи на ограничения за запис.

Позволете ми да споделя с вас някои от моите изследвания:

1) Има ли API на Google за Google Photos - изчезва Мислех си, че е възможно да се създаде заобиколно приложение, което да получи достъп както до снимките на потребителя, така и до SD картата според опцията „не е грешка, а функция“. По аналогия с API за данни на YouTube, търсихте ли нещо подобно за GP? Намерен и щастлив. Да, потърсих в Google малко информация за API на Google Photos. Рано се зарадвах. Оказва се, че този API предоставя възможност за използване на алгоритмите на googe за разпознаване на обекти в картини, както се случва в тяхното приложение. Но този API няма нищо общо с моментните снимки на потребителите.

2) Преди да модифицирам gp, исках да проверя дали изобщо ще е възможно да го стартирам по-късно. Така че реших да преподпиша gp с моя ключ и да видя дали google ще работи с такова приложение. Взех orig_gp.apk, изтрих папката META-INF в него, преименувах го наorig_gp_nometa.apk Инсталирайте jdk6, поставете моето хранилище за ключове в

/.keystore и изпълнен

Файлът беше презаписан, преименуван на gp_resigned_unaligned.apk Намерих помощната програма zipalign (тази помощна програма трябва да е някъде в sdk, но не стигнах до дъното къде е, затова изтеглих двоичния файл от интернет). Завършено

За всеки случай проверих правилността на подписа на подравнения файл

И имайте предвид, че дори още не сме променили приложението, а само го преподписахме.

За да се уверя, че съм направил всичко правилно, реших да опитам да преподпиша някое отделно приложение. Взех coolreader.apk, направих всички същите манипулации с него, поставих го - всичко работи добре.

И така, направих всичко правилно и проблемът се крие във факта, че някой друг проверява подписа за принадлежност към Google. Това най-вероятно е някаква услуга на Google.

3) Принципът на работа на OG Youtube Интересно е, че ако пакетът е проверен за целостта, тогава как е модифициран youtube? Реших да разбера как работи OG Youtube. Ясно е, че нито един от модифицираните apk няма подпис в Google. Как се инсталира модът? Има три опции. a) unrooted е инсталиран като друг пакет успоредно с истинския youtube. Упълномощаване с microg. b) корен прост системата youtube е премахната, поставена под прикритието на пакет на Google. Упълномощаване с microg. c) root xposed системата youtube е премахната, поставена под прикритието на пакет на Google. Упълномощаване чрез реални услуги на Google, като ги заблуждавате, че подписът принадлежи на Google.

В нашия случай представляват интерес варианти a и b. Не се изненадвайте, че посочих опцията root: нашият gp не е системен, можем безопасно да го премахнем, така че системата да ни позволи да инсталираме пакет с различен подпис.По принцип a и b не се различават, просто в единия случай ще бъде инсталиран до истинското приложение, а в другия ще замени истинското.