Перейти к содержанию
  • 0
la_coste

Включение своих файлов в приложение

Вопросы

Доброго времени суток, уважаемые форумчане!  :)
У меня такой вопросик: можно ли в установочный пакет для android собираемый в delphi xe5 включать свои файлы???
Заранее спасибо)) :)

Поделиться сообщением


Ссылка на сообщение

Рекомендуемые сообщения

  • 0

Да, можно.

В файл проекта dpk добавляем строку

program YouSoft;
{$R 'resource.res' 'resource.rc'} 

в файле resource.rc создаем такое содержимое:

YouRes RCDATA .\Resources\твой_файл.txt

и далее в программе загружать примерно так:

var
  Stream: TResourceStream;
begin
  Stream:= TResourceStream.Create(hInstance, 'YouRes', RT_RCDATA);
  try
    //Работаем с потоком
  finally
    Stream.Free;
  end; 

Как-то так. Удачи!

Поделиться сообщением


Ссылка на сообщение
  • 1

Добрый вечер,
 
Тут есть два способа:

1. Deployment Manager
Специальная настройка проекта, которая позволяет указать, какие файлы нужно включить в состав пакета (Андроид) или бандла (iOS). Суть его работы простая, вы указываете какие файлы с вашего компьютера нужно перенести на устройство (в какое место). А далее работаете с ними из приложения так, как при обычной работе с файлами под Windows.

 

На мобильных платформах нужно учесть специфику возможных местоположений файла. Пакет/Бандл (приложение) не допускает изменения внутренних файлов, потому что подписывается сертификатом. Поэтому теоретически при изменении файлов приложения, вы нарушаете целостность подписи. Именно по этому файлы внутри пакета/бандла доступны только на ЧТЕНИЕ.

 

Однако, мобильные платформы предлагают широкий круг специальных мест для хранения (временные папки, песочницы, документы, карточка памяти и тд) изменяемых файлов (например файл локальной базы данных, или настройки в ini файле и тд).

 

Описание всех вариантов местоположений с описанием путей есть в записе TPath (RTL): http://docwiki.embarcadero.com/RADStudio/XE5/en/Standard_RTL_Path_Functions_across_the_Supported_Target_Platforms
post-1-0-89809400-1389644579_thumb.jpg

Общие действия для использования менеджера развертывания такие:
1. Открываем менеджер развертывания: Системное Меню -> Project -> Deployment.
post-1-0-39721500-1389644579.jpg
2. Выбираем в верхнем выпадающем меню платформу и конфигурацию сборки.
post-1-0-35250300-1389644580_thumb.jpg
3. Нажимаем кнопку добавить файл и выбираем нужный файл.
post-1-0-89626800-1389644580_thumb.jpg post-1-0-90916200-1389644582_thumb.jpg
4. Указываем местоположение файла, куда он должен поместиться после развертывания приложения на устройстве. Тут есть особенность, если файл нужен только на чтение, то пути менять не надо. Если возможна ситуация, когда файл может быт изменен, то файл нужно поместить под iOS в Startup\Documents\ (регистр важен)
post-1-0-87742100-1389644583_thumb.jpg
Под Андроид в assets\internal (регистр важен) - для внутреннего доступа из пакета приложения или assets - для внешнего доступа
post-1-0-42605600-1389644583_thumb.jpg
5. Получаем пути к расположению файлов:
Под iOS:

TPath.Combine(TPath.GetDocumentsPath, 'filename')

Под Андроид:

TPath.Combine(TPath.GetDocumentsPath, 'filename')  { Внутренний доступ}
TPath.Combine(TPath.GetSharedDocumentsPath, 'filename')  { Внешний доступ }

Полезные ссылки

  1. Подробное руководство по добавлению файлов для iOShttp://docwiki.embarcadero.com/RADStudio/XE5/en/Creating_an_iOS_App#Loading_and_Deploying_Files
  2. Подробное руководство по добавлению файлов для Androidhttp://docwiki.embarcadero.com/RADStudio/XE5/en/Creating_an_Android_App#Loading_and_Deploying_Files

Поделиться сообщением


Ссылка на сообщение
Гость
Эта тема закрыта для публикации ответов.

  • Похожий контент

    • От Pulsarius
      Привет, форумчане! Я уже как-то задавал подобный вопрос, но видимо никто не сталкивался с этим. Может быть сейчас кто-нибудь столкнулся. Эта проблема качует из версии в версию и никто не исправляет это, а может быть я что-то не всё правильно делаю. Конкретнее, я в своём проекте использовал TcxPageControl от DevExpress и TFDConnection, TFDQuery от FireDAC. Теперь я удалил эти элементы из своего проекта, совершенно нигде не использую TcxPageControl и приложение у меня теперь не коннектится напрямую с базой данных. Вручную почистил все #include и #pragma link, но линковщик C++ Builder мне всё равно усердно впихивает cxPageControlRS25.bpl и firedac250.bpl в exe-шник. Если делать Deployment на удалённую машину с динамическими зависимостями от рантаймов, то соответственно туда тоже копируются эти ненужные cxPageControlRS25.bpl и firedac250.bpl. Открыл проект *.cbproj как текст и увидел там эти самые названия. Можно конечно вручную тоже их поудалять, но есть ли какой-то адекватный способ удаления зависимостей от уже ненужных библиотек, что бы вручную не выкосить что-нибудь лишнее? Это я как пример всего две bpl упамянул, а на самом деле там больше, ведь DevExpress и FireDAC там за собой тащат ещё кучу всяких bpl, типа там dxCore.bpl, datadb.bpl и т.п. Вот и происходит такая мусорка в скомпилированном файле и размер соответственно напрасно большой делается. В Visual Studio я с подобным не сталкивался.
    • От x11
      В Deployment есть колонка "Local path" как там отредактировать данные?
      Delphi 10.1
    • От Alesk
      В приложении имеется ~ 160 файлов общим весом ~ 30 мб, которые добавлены в проект через Deployment. Используются они след. образом:
      Tpath.Combine(Tpath.GetDocumentsPath, 'Sample.file'); Проблема в том, что чем больше файлов становится, тем дольше приложение запускается(1 сек заставка, дальше ~ 5 сек черный экран), причем как на слабом железе, так и на мощном. Мб другой способ хранения файлов решит проблему? Если да, то какой?
    • От masmat
      Я конечно понимаю, что эта тема описана много раз, вот даже ссылка на тему на этом сайте.
       
      http://fire-monkey.ru/topic/31-vkliuchenie-svoikh-failov-v-prilozhenie/?hl=%2Bdeployment+%2Bmanager#entry85
       
      Но все равно у меня файл базы SQLLite при разворачивании в отладке из Delphi XE8 не обновляется. Все равно используется старый файл БД.
      Подскажите как это победить. 
      Спасает только если приложение удаляешь из телефона и потом заново устанавливаешь. Но как же тогда быть при публикации в Google Market?
       
      Вот скрин моего Deployment Manager. Все установлено, папка прописана, признак обязательной замены стоит. что не так-то
       
    • От Anasazi
      Добрый день! Подскажите пожалуйста как открыть придеплойенную html'ку в TWebBrowser под ios?
       
      Под андройд работает так:
      WebBrowser1.Navigate('file:слэш слэш'+ TPath.GetDocumentsPath + PathDelim + 'test.html'); под ios пробовал так (не работает):
      WebBrowser1.Navigate('file:слэш слэш'+ TPath.Combine(TPath.GetDocumentsPath, 'test.html'));
    • От Igor
      При установке приложения появляется список "Разрешить этому приложению", в данном списке куча всего казалось бы моему приложению не требуемого, в том числе: "Платные услуги".
      Не могу понять как определить данный список под приложение, чтобы лишнего оно не просило при установке и не пугало пользователей.
       
      Подумал может в deployment где-то это, или в uses надо что-то убрать, но не знаю чего, нагуглить тоже не выходит.
       
      Помогите пожалуйста.
       
      Список:
      Ваше местоположение Сетевой обмен данными Личная информация Память Телефонные вызовы Управление оборудованием Платные услуги (Посылать прямые вызовы на номера телефонов) и ещё под скрыть:
      Инструменты разработки (Проверьте доступ к защищенному хранилищу) - это может в режиме дэбага такое, если нет, то как убрать тоже не пойму.. P.S.:
       
      Из всего перечисленного кажется нужно только: 
      Память, т.к. создаю txt файл и сохраняю в него данные (да и нужно ли для этого такое разрешение?) Возможно ещё, но вряд ли:
      Личная информация, для определения времени на устройстве, но думаю это не то, и время и так определяется.
    • От neohost
      Здравствуйте. В смежной теме нашёл код подключения Res файла с ресурсами
      var Stream: TResourceStream; begin Stream:= TResourceStream.Create(hInstance, 'YouRes', RT_RCDATA); try //Работаем с потоком finally Stream.Free; end; Напрашивается два вопроса
      Что произойдёт при установке программы на андроид устройство? Ресурс останется внутри приложения, или распакуется? Как проиграть mp3/wav файл, упакованный в приложение таким образом без распаковки во внутреннюю память устройства? Интересуюсь с целью понять, можно ли хранить ресурсы внутри программ не распаковывая, как это можно делать в windows программах.
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...