Папка /data
может быть пустым, поскольку вам не хватает соответствующих разрешений. Чтобы решить эту проблему, мне пришлось выполнить следующие команды.
adb shell
su
Эти команды запускают оболочку в эмуляторе и предоставляют вам права root. Команда adb
расположена в папке platform-tools
Android SDK, обычно установленной в ~/Library/Android/sdk/
на MacOS.
chmod -R 777 /data
Измените разрешения папки (и подпапки рекурсивно) /data
, чтобы они отображались в инструменте A ndroid Device Monitor .
adb root
Наконец, эта команда перезапускает adb
с правами root. Будьте осторожны, он работает только на сборках разработки (как правило, с помощью эмуляторов).
Затем вы можете увидеть содержимое папки /data
и перенести данные, расположенные внутри. Вы также можете сделать это в консоли , используя adb pull <remote> <locale>
, например:
adb pull /data/data/<app name>/databases/<database> .
Вот хороший альтернативный подход: задержка, загружающаяся .
При создавании приложения, свяжите все это, как Вы были бы с исходным именем DLL (но установите origional dll, чтобы быть загруженной задержкой).
Вы затем развертываете DLL, переименованный согласно Вашему клиентскому запросу.
Ваш EXE попытается определить местоположение DLL с помощью настоящего имени, а не переименованная версия так перестанет работать, однако с задержкой, загружающей Вас, может прервать этот сбой и загрузить переименованную версию самих и затем иметь собственную твердость загрузчика окон все, как будто ничто не изменилось.
Read Поддержка Компоновщика статьи Загруженного Задержкой DLLs и посмотрите пример Delay Hook .
Ваш рычаг задержки мог бы быть чем-то как ниже:
FARPROC WINAPI delayHook( unsigned dliNotify, PDelayLoadInfo pdli )
{
switch( dliNotify )
{
case dliNotePreLoadLibrary:
if( strcmp( pdli->szDll, "origional.dll" ) == 0 )
return (FARPROC)LoadLibrary( "renamed.dll" );
break;
default:
return NULL;
}
return NULL;
}
Ваш клиент пьян? Из всех сумасшедших требований во всем мире...
Назад в мои славные дни как сифилитический полуночный программист на C++ сумасшедшего я раньше добавлял мой DLLs к моему .exe файлу как ресурсы. Затем при запуске я распаковал бы их и записал бы им в каталог exe. Ваша программа может выбрать имя файла DLL в этой точке. Действительно пойдите для вещи путаницы - запускаются со случайного числа, связывают некоторую поэзию Edward Lear и xor это с Вашим любимым немецким двуствольным существительным; должен сделать для начинающих так или иначе. Затем загрузите использование DLL LoadLibrary ().
enum ukOverwrite {dontOverwriteAnything = 0, overwriteWhateverPresent = 1};
void unpackResource (ukOverwrite param1, int resourceID, const char* basePath,
const char* endFilename)
{
char* lpName = 0;
lpName += resourceID;
HRSRC MrResource = FindResource (0, lpName, "file");
if (MrResource)
{
HGLOBAL loadedResource = LoadResource (0, MrResource);
if (loadedResource)
{
void* lockedResource = LockResource (loadedResource);
if (lockedResource)
{
DWORD size = SizeofResource (0, MrResource);
if (size)
{
unsigned long creationDisposition = CREATE_NEW;
if (param1 == overwriteWhateverPresent)
creationDisposition = CREATE_ALWAYS;
char filepath [MAX_PATH];
strcpy (filepath, basePath);
strcat (filepath, endFilename);
HANDLE rabbit = CreateFile (filepath, GENERIC_WRITE, 0, 0,
creationDisposition, 0, 0);
if (rabbit != INVALID_HANDLE_VALUE)
{
DWORD numBytesWritten = 0;
int wf = WriteFile (rabbit, lockedResource, size, &numBytesWritten,
0);
CloseHandle (rabbit);
}
}
}
FreeResource (loadedResource);
}
}
}
Используя инструмент LIB (включенный с Visual Studio) можно генерировать библиотечный файл из файла определения. Asuming Ваш dll источник не включает файл определения, необходимо создать одно первое. Можно использовать dumpbin для помощи Вам. Например: dumpbin /exports ws2_32.dll
В выводе Вы видите названия экспортируемых функций. Теперь создайте файл определения как это:
LIBRARY WS2_32
EXPORTS
accept @1
bind @2
closesocket @3
connect @4
@number является ординалом в выводе dumpbin
Использование LIB /MACHINE:x86 /def:ws2_32.def
для генерирования библиотечного файла.
Теперь можно легко изменить файл определения и генерировать новый библиотечный файл каждый раз, когда Вы переименовываете свой dll.
можно проверить библиотечный файл с помощью dumpbin: dumpbin /exports ws2_32.lib
. Необходимо получить тот же вывод как исходный библиотечный файл.
необходимо будет использовать блок. Загрузите и сохраните запутываемое имя сборки в app.config.
или это или использование тот же подход то использование плагинов. имейте класс в своей реализации блока интерфейс, который Вы ищете из своего приложения в каждом блоке в определенном каталоге. если найдено не желающий это. Вы не должны будете, конечно, запутывать Имя интерфейса.
В противном случае у LIB нет причин для хранения старого имени DLL.