Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Сб фев 08, 2025 01:21

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 131 ]  На страницу Пред.  1 ... 5, 6, 7, 8, 9
Автор Сообщение
 Заголовок сообщения: Re: Блог программиста любителя
СообщениеДобавлено: Вт авг 27, 2024 03:15 
Не в сети
Аватара пользователя

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 340
Откуда: Москва
Благодарил (а): 37 раз.
Поблагодарили: 10 раз.
После перерыва, решил возобновить разработку.

Перерыв был вызван причинами в основном технического порядка, когда проект, над которым я упорно работал, написанный
на java 17, отказавлся компилироваться на java, который использовался в android Ide.

Тут еще и моя ошибка, пытался использовать статические классы на java, думал, что это круто, и переписал под
это свой, в общем то приемлемо сделанный проект.
На самом деле, в отличии от статических переменных, статические классы полное дерьмо, и проект нужно было
возвращать взад, что постоянно откладывал, потом начал потихоньку забывать детали.
В общем, как там это... психические болезни программистов - просто .. как там ее.. ...ариация какая-то.

(В общем, для меня, все разговоры, что стремление к стандартизации не нужно - побоку.)

Схватив свою новорожденную навигационную программу и фотопрограмму, начал наслаждаться жизнью.
Программы прекрасно взаимодействовуют с домашним ftp-сервером, сделанным из древнего ноутбука с простреленным
дисплеем, можно безгеморойно загружать треки в программы и выгружать треки и фотографии после поездки.

Но недавно благорастворение закончилось, навигационная программа начала бешено выжирать
заряд батареи. Просто кэщирование было организованно самым примитивным способом -
тайл карты загружался из интернета и сохранялся на sd карте. Имя тайла - типа (z6x45y2345),
присоединялось к строке, в которой таким же образом были записанны имена предыдущих,
загруженных из интернета тайлов. Прежде, чем загрузить из интернета картинку, осуществлялся
поиск по строке. Если находил, загружался с SD, если нет - с интернету. В конце концов размер строки
стал килобайт 300 наверное!
В общем поправить не трудно, да за два года образовалась полная разруха.
Я забыл, из каких проектов скомпилировал нынешние, находящиеся в эксплуатации apk - файлы.
Реально, их там куча. Это сохраненные промежуточные проекты, и развитие существующих, и оставленные на будущее.

Их можно компилировать и они запустятся, но во всех из них могут быть ощибки и даже не понятно как их использовать.
В общем, надо переписывать заново, к счастью многие фрагменты проектов хорошо проработаны, и
много кусков можно надергать из старых.

Но тут напасть - авторы aide забросили проект и гугол удалил его из play по причине отсутствия обновлений.
(я сперва подумал, присоединились к санкциям, когда разобрался, решил задонатить, гугл плай не пропустил платеж)

В общем, если кому нужен aide, можно сюда
https://4pda.to/forum/index.php?showtopic=319369

там лежит крякнутая версия, в отличии от бесплатной, которая может собрать проект не больше чем из 5 файлов,
в этой можно собрать проект из любого кол-ва файлов. Можно взять у меня apk-файл, скачанный из google play давно.

Вчера удалось собрать android проект из командной строки, думаю развивать это направление

Утилиты командной строки можно скачать с официального
https://developer.android.com/studio?hl=ru
Далее буду описывать, как всем этим пользоваться.

ps. Тяжеленную android studio ставил, проблевался.
Вдобавок отказалась компилировать мои aide-проекты, никаких дел с ней больше иметь не буду, даже по приговору суда.

_________________
Линукс решает, винда глотает.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Блог программиста любителя
СообщениеДобавлено: Пт сен 13, 2024 02:44 
Не в сети
Аватара пользователя

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 340
Откуда: Москва
Благодарил (а): 37 раз.
Поблагодарили: 10 раз.
Вообще, разруха не только у меня. Altlinux, которым без проблем пользовался больше 20 лет,
начал выдавать странности. Из проекта исчезла опера,( уже давно), не запускается avidemux,
нечем редактировать видеофайлы. Исчез gfort, что крайне неприятно. Не с чем стало сравнивать
свой форт. Сходу собрать gfort из исходников не удалось, ковырятся не хотелось.

к счастью в http://forth.org.ru/ Russian FORTH Interest Group

сохранилась ссылка на spf, там оказался бинарник spf4orig который запустился.
В принципе пойдет, только команды надо обязательно
набирать большими буквами, что не очень хорошо.

В общем, можно приступать.
Еще, кажется окончательно разобрался с компилятором командной строки для android проектов.

_________________
Линукс решает, винда глотает.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Блог программиста любителя
СообщениеДобавлено: Пн сен 23, 2024 09:38 
Не в сети

Зарегистрирован: Пт июн 06, 2008 14:21
Сообщения: 137
Откуда: Карелия
Благодарил (а): 1 раз.
Поблагодарили: 5 раз.
В Help написано как убрать заглавные буквы

Особенности SPF
Краткое вступление для тех, кто уже знаком с какой-либо Форт-системой и стандартом ANS'94.

Последнее обновление: $Date: 2008/11/14 20:13:12 $

[Русский] [Английский]

Содержание
Установил SPF4. И где здесь что-куда?
Как запускать и подключать файлы?
REQUIRE
Пути поиска файлов для INCLUDED
Модули
Регистро-зависимость
Ввод чисел
Вещественные числа (числа с плавающей точкой)
Структуры
Где FORGET?
Где NOT?
Где DEFER?
Как одним словом очистить стек?
Комментарии
Строки
Многозадачность
Словари
Локальные и временные переменные
Генерация исполняемых модулей (exe-файлов)
Подключение dll-библиотек
Средства отладки
Оптимизатор
Поддержка ANS
Callback'и
Слово NOTFOUND
Scattered colons
Область видимости
Обработка исключений

Установил SPF4. И где здесь что-куда?
Первое и самое важное - расположение ваших рабочих файлов. В дистрибутиве SPF есть каталог DEVEL, предназначенный для разработчиков (в том числе и вас). Создайте в ней ваш подкаталог, например, ~vasya. И теперь вы можете подключать ваши файлы написав сокращённый путь в виде ~vasya/prog/myprog.f. Это упрощает взаимный доступ к библиотекам и программам. Общепринято библиотеки класть в подкаталог lib, а примеры программ в prog.

В каталоге DEVEL собраны наработки других SP-Forth'еров, с кратким (очень кратким) их обзором вы можете ознакомиться в SPF_DEVEL, либо пройтись по файлам самому.

В каталоге samples/win/spfwc вы найдёте GUI фронтенд для SPF. Просто запустите compile.bat и скопируйте полученный бинарный файл spf4wc.exe в корневой каталог установки (рядом с spf4.exe).


Как запускать и подключать файлы?
В командной строке скормить файл SPF'у можно просто указав путь к нему в параметрах запуска,

spf.exe ~vasya/prog/myprog.f
Заметьте, что путь для включения могут быть как абсолютным, так и относительно каталога devel.

В консоли SPF (в режиме интерпретации) достаточно набрать имя файла:

~vasya/prog/myprog.f
В целях совместимости лучше подключать явно:

S" ~vasya/prog/myprog.f" INCLUDED
Но правильнее всего использовать REQUIRE.


REQUIRE
В SPF есть нестандартное слово REQUIRE ("word" "file" -- ), где word - некоторое слово определённое в библиотеке file. Если слово word присутствует в контекстном словаре, REQUIRE считает, что библиотека уже была подключена и не загружает её. Так избегается двойная загрузка библиотек. Если же найти word не удаётся - библиотека подключается обычным образом (через INCLUDED). Например:

REQUIRE CreateSocket ~ac/lib/win/winsock/sockets.f
REQUIRE ForEach-Word ~pinka/lib/words.f
REQUIRE ENUM ~nn/lib/enum.f
NB: В качестве word выбирайте всегда наиболее уникальное слово из подключаемой библиотеки.


Пути поиска файлов для INCLUDED
S" file.f" INCLUDED будет искать в перечисленных ниже местах в именно таком порядке

короткое имя файла file.f (т.е. в текущем каталоге)
PATH_TO_SPF.EXE/devel/file.f (т.о. удобно использовать чужие наработки),
PATH_TO_SPF.EXE/file.f (так подключаются стандартные либы и другие файлы из поставки SPF).
Если требуется указать больше путей поиска (например использовать форт код разделяемый между системами, или неважно - любой код вне дерева каталогов SPF который не может быть адресован относительно текущего файла), то можно либо переопределить FIND-FULLNAME (который VECT) либо использовать внешнюю либу - ~ygrek/spf/included.f.

TODO: Вынести отдельно

Тогда потребуется только прописать в spf4.ini

~ygrek/spf/included.f
with: my_path\
S" my path with spaces/" with
и все файлы будут искаться в my_path в дополнение к описанному выше алгоритму (my_path может быть как абсолютным так и относительно spf.exe).


Модули
В SPF есть модули, которые позволяют скрывать некоторые внутренние слова библиотек выводя наружу только слова для взаимодействия.

MODULE: vasya-lib
\ внутренние слова
EXPORT
\ слова взаимодействия, видные снаружи, компилируются во внешний словарь.
DEFINITIONS
\ опять внутренние слова
EXPORT
\ ну вы поняли :)
;MODULE
Код MODULE: vasya-lib можно писать много раз - последующие вызовы будут докомпилировать слова в тот же модуль. На самом деле слово определённое через MODULE: это обычный словарь.


Регистро-зависимость
SPF регистрозависим, то есть для него слова CHAR , Char и char - три разных слова. Сделать SPF независимым от регистра слова можно подключив файл lib/ext/caseins.f. По умолчанию, регистро-независимость включается сразу после подключения lib/ext/caseins.f.

Чтобы регистро-независимость временно выключать/включать, используйте переменную CASE-INS:

REQUIRE CASE-INS lib/ext/caseins.f
2 dup * .
CASE-INS OFF \ вернуть обратно режим зависимости от регистра
2 DUP * .
CASE-INS ON \ включить регистро-независимость
2 dup * .



За это сообщение автора F-MAP поблагодарил: vikt
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Блог программиста любителя
СообщениеДобавлено: Ср сен 25, 2024 03:08 
Не в сети
Аватара пользователя

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 340
Откуда: Москва
Благодарил (а): 37 раз.
Поблагодарили: 10 раз.
Спасибо большое!

_________________
Линукс решает, винда глотает.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Блог программиста любителя
СообщениеДобавлено: Сб ноя 16, 2024 20:31 
Не в сети
Аватара пользователя

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 340
Откуда: Москва
Благодарил (а): 37 раз.
Поблагодарили: 10 раз.
Основные средства разработки программ для android.
Android studio - официальное
https://developer.android.com/sdk/index.html
Есть архивы старых sdk
https://developer.android.com/studio/archive?hl=ru
Насколько я помню, в старых версиях была собственная java,
что в принципе может пригодиться.

Следущее, aide - разработка или компиляция програм прямо на android устройствах.
Ныне заброшен, поддерживается энтузиастами.
https://4pda.to/forum/index.php?showtop ... 69&st=4960
Сам я до последнего его использовал.

Разработка android программ из командной строки.
Скачивается там же, где android studio, чуть ниже.
Преимущества:
Эти утилиты входят в состав самой android studio и aide.
Утилиты командной строки, это java программы, соответственно,
можно организовать средство разработки android программ на любом
устройстве, где есть полноценная java. Такие проекты есть.

Android SDK
https://github.com/AndroidIDEOfficial/a ... es/tag/sdk
https://github.com/AndroidIDEOfficial/a ... /tree/main

Но есть доводы разрабатывать свои средства на коленке, можно собрать
под себя. Например, любители си и ассемблеров могут подключить NDK

https://www.hanshq.net/command-line-android.html

Замечу, что основные вопросы по Aide на 4pda это как раз про NDK.

Далее подробнее.

_________________
Линукс решает, винда глотает.



За это сообщение автора vikt поблагодарил: Total Vacuum
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Блог программиста любителя
СообщениеДобавлено: Пн ноя 18, 2024 22:25 
Не в сети
Аватара пользователя

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 340
Откуда: Москва
Благодарил (а): 37 раз.
Поблагодарили: 10 раз.
Для начала c
https://developer.android.com/sdk/index.html
скачиваем утилиту коммандной строки для своей системы
(linux mac или windows)
Ищем файл вида
commandlinetools-linux-7302050_latest.zip

Дальше разархивируйте согласно инструкции
https://developer.android.com/tools/sdkmanager?hl=ru

Можно не создавать каталог latest
тогда в при вызове утилиты надо указывать параметр
--sdk_root=path_to_SDK

Наберем ( или обернем скриптом )

path_to_sdkmanager/sdkmanager --list [--sdk_root=path_to_SDK] > lists
в файле lists будут пакеты, доступные sdkmanager.

На этом этапе какие либо трудности маловероятны. У меня были какие-то странности, связанные с
java_run time

[spoiler]

работает
java --version
openjdk 17.0.11 2024-04-16 OpenJDK Runtime Environment (Red_Hat-17.0.11.0.9-alt1) (build 17.0.11+9) OpenJDK 64-Bit Server VM (Red_Hat-17.0.11.0.9-alt1) (build 17.0.11+9, mixed mode, sharing)

не работает
java --version
openjdk 17.0.12 2024-07-16
OpenJDK Runtime Environment (Red_Hat-17.0.12.0.7-alt1) (build 17.0.12+7)
OpenJDK 64-Bit Server VM (Red_Hat-17.0.12.0.7-alt1) (build 17.0.12+7, mixed mode, sharing)

Почему то работает с более старой версией java.

то, что не работает, выдает ошибку

./sdkmanager
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/android/sdklib/tool/sdkmanager/SdkManagerCli has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:473)
at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:621)

В общем столкнуться с этой проблемой маловероятно, скорее всего у меня криво встал linux

[/spoiler]

Дальше надо скачать "build-tools" и "platforms;android" используя sdkmanager.
При необходимости также скачивается ndk
На этом этапе трудности маловероятны.
В указаной ранее статье
https://www.hanshq.net/command-line-android.html
показывался способ скачивания пакетов напрямую с сервера, но делать этого не стоит,
скорее всего, статья старая, многое может измениться.
Поэтому лучше использовать sdkmanager.

Пусть android платформа = 28, что соответствует android 9
Соответствия версий api и android

[spoiler]
Имя. Версия Уровень API Выпущено Код версии сборки
К 10.0 29 Авг 2020 BuildVersionCodes.Q
Круговая 9.0 28 Авг-2018 BuildVersionCodes.P
Oreo 8.1 27 Дек 2017 BuildVersionCodes.OMr1
Oreo 8.0 26 Авг 2017 BuildVersionCodes.O
Nougat 7.1 25 Декабрь 2016 г. BuildVersionCodes.NMr1
Nougat 7.0 24 Август 2016 г. BuildVersionCodes.N
Marshmallow 6,0 23 Август 2015 г. BuildVersionCodes.M
Lollipop 5.1 22 Мар 2015 г. BuildVersionCodes.LollipopMr1
Lollipop 5,0 21 Ноя 2014 BuildVersionCodes.Lollipop
Kitkat Watch 4.4W 20 Июн 2014 BuildVersionCodes.KitKatWatch
Kitkat 4.4. 19 Октябрь 2013 г. BuildVersionCodes.KitKat
Желе-боб 4.3 18 Июл 2013 BuildVersionCodes.JellyBeanMr2
Желе-боб 4.2-4.2.2 17 Ноябрь 2012 г. BuildVersionCodes.JellyBeanMr1
Желе-боб 4.1-4.1.1 16 Июнь 2012 г. BuildVersionCodes.JellyBean
Ice Cream Sandwich 4.0.3-4.0.4 15 Декабрь 2011 г. BuildVersionCodes.IceCreamSandwichMr1
Ice Cream Sandwich 4.0-4.0.2 14 Окт 2011 BuildVersionCodes.IceCreamSandwich
Соты 3.2 13 Июнь 2011 г. BuildVersionCodes.HoneyCombMr2
Соты 3.1.x 12 Май 2011 г. BuildVersionCodes.HoneyCombMr1
Соты 3.0.x 11 Февраль 2011 г. BuildVersionCodes.HoneyComb
Пряник 2.3.3-2.3.4 10 Февраль 2011 г. BuildVersionCodes.GingerBreadMr1
Пряник 2.3-2.3.2 9 Ноя 2010 BuildVersionCodes.GingerBread
Froyo 2.2.x 8 Июнь 2010 г. BuildVersionCodes.Froyo
Eclair 2.1.x 7 янв 2010 BuildVersionCodes.EclairMr1
Eclair 2.0.1 6 Декабрь 2009 г. BuildVersionCodes.Eclair01
Eclair 2.0 5 Ноябрь 2009 г. BuildVersionCodes.Eclair
Кольцо 1,6 4 Сентябрь 2009 г. BuildVersionCodes.Donut
Кекс 1.5 3 Май 2009 г. BuildVersionCodes.Cupcake
База 1,1 2 Февраль 2009 г. BuildVersionCodes.Base11
База 1.0 1 Октябрь 2008 г. BuildVersionCodes.Base

https://learn.microsoft.com/ru-ru/previ ... api-levels
[/spoiler]



path_to_sdkmanager/sdkmanager --sdk_root=path_to_SDK "platform-tools" "platforms;android-28" "build-tools;30.0.2"

если нужно ndk, то добавляем, например "ndk;26.2.11394342"
подробнее про ndk тут
https://developer.android.com/tools/sdkmanager?hl=ru

Если все прошло успешно, то пора скомпилировать первую программу.

_________________
Линукс решает, винда глотает.



За это сообщение автора vikt поблагодарили - 2: Sotnik, zma
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Блог программиста любителя
СообщениеДобавлено: Ср янв 29, 2025 02:31 
Не в сети
Аватара пользователя

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 340
Откуда: Москва
Благодарил (а): 37 раз.
Поблагодарили: 10 раз.
К предыдущему
Код:
Чтобы установить CMake или NDK, используйте следующий синтаксис:

sdkmanager --install
           ["ndk;major.minor.build[suffix]" | "cmake;major.minor.micro.build"]
           [--channel=channel_id] // NDK channels: 0 (stable), 1 (beta), or 3 (canary)


Чтобы устанавливать обычные пакеты параметр --install не обязателен

Проект HelloWord , который генерирует aide, можно скачать здесь
https://disk.yandex.ru/d/5ufypLUFOOWTcQ

Тут
package="com.mycompany.myapp"

Лучше избегать называть начала пакетов с "com" , как здесь,
а предпочитать то, что ближе по алфавиту, чем "com" .
Cам android имеет кучу приложений, которые начинаются с "com",
и найти свое среди них будет трудно.

java класс MainActivity.java

Код:
package com.mycompany.myapp;

import android.app.*;
import android.os.*;
public class MainActivity extends Activity
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

Имя пакета (package) тут com.mycompany.myapp
соответственно файл MainActivity.java должен находиться в каталоге
com/mycompany/myapp
В aide java классы находятся в каталоге java, поэтому путь будет выглядить так
java/com/mycompany/myapp

В каталоге res хранятся файлы ресурсов
описание окон находится в каталоге res/layout
Каждому окну соответствует свой xml файл,
имена файлов тут должны почему то состоять из строчных букв.
У нас один файл
main.xml.
Код:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center">

    <TextView
        android:text="@string/hello_world"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>


В MainActivity.java ссылка на этот скомпилированный файл выглядит так

setContentView(R.layout.main);

Еще в каталоге res находятся подкаталоги res/values и res/values-v21

В следующих каталогах находятся иконки приложения для разных размеров экрана
Файлы называются ic_launcher.png имеют свой размер и располагаются в нижеследущих
каталогах
Код:
   каталог       размер картинки
drawable-hdpi       72x72
drawable-xhdpi       96x96
drawable-mdpi        48x48
drawable-xxhdpi     144x144


Можно еще создать каталог assets, содержимое этого каталога с файлами и подкаталогами
компилятор просто переписывает в apk-файл.
Есть методы чтения данных оттуда.

И наконец важнейший файл AndroidManifest.xml
Код:
<?xml version="1.0" encoding="utf-8"?>
<manifest
   xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.mycompany.myapp"
   android:versionCode="1"
   android:versionName="1.0">

   <uses-sdk
      android:minSdkVersion="14"
      android:targetSdkVersion="29"/>

   <application
      android:allowBackup="true"
      android:icon="@drawable/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme"
      android:resizeableActivity="true">

      <activity
         android:name=".MainActivity"
         android:label="@string/app_name">

         <intent-filter>

            <action
               android:name="android.intent.action.MAIN"/>

            <category
               android:name="android.intent.category.LAUNCHER"/>

         </intent-filter>

      </activity>

   </application>

</manifest>

_________________
Линукс решает, винда глотает.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Блог программиста любителя
СообщениеДобавлено: Пт янв 31, 2025 21:20 
Не в сети
Аватара пользователя

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 340
Откуда: Москва
Благодарил (а): 37 раз.
Поблагодарили: 10 раз.
Исходники лучше собрать в отдельный каталог, например main
Код:
        main/
            assets      -  тут файлы и каталоги, которые просто переписываются в apk-файл
                            Каталог assets необязателен.
            res         -  файл ресурсов
            java        -  java программы
            AndroidManifest.xml - файл  манифеста

Результаты компиляции можно помещать в каталог, например build
Код:
  build/     - файлы, получающиеся  в процессе компиляции
        res     - тут файл R.java, получающийся в процессе компиляции ресурсов
        classes - тут class файлы, после компиляции программы на java
        dex     - тут скомпилированные class-файлы в формат андроид
        dest  - apk файлы

Перед компиляцией желательно очистить подкаталоги в build от старого содержимого
Первым делом необходимо собрать файл R.java из ресурсов в каталоге main/res .

Скрипт для сборки будет выглядить примерно так.
Код:
определим переменные
BUILD_TOOLS=./buid-tools/30.0.0 #путь к ранее скачанной утилите, где находятся
                                #исполняемые файлы   aapt, dx, apksigner и др.
PLATFORM=./platforms/android-33  #путь к ранее скачанной утилите, где находится
                                 # android.jar 
main=path_to_main         # путь к каталогу main
build_dest=path_to_build  # путь к каталогу build 

  (30.0.0 и android-33 заменить на нужные значения)

сама команда
$BUILD_TOOLS/aapt package -f -m -J $build_dest/res  \
   -S $main/res  \
   -M  $main/AndroidManifest.xml \
   -I $PLATFORM/android.jar 

После выполнения команды в каталоге build/res должен появится файл R.java

_________________
Линукс решает, винда глотает.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Блог программиста любителя
СообщениеДобавлено: Вт фев 04, 2025 01:56 
Не в сети
Аватара пользователя

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 340
Откуда: Москва
Благодарил (а): 37 раз.
Поблагодарили: 10 раз.
На самом деле файл R.java появится в каталоге build/res/com/mycompany/myapp/R.java , добавится package.

Компиляция
Код:
mypkg=com/mycompany/myapp
main=path_to_main         # путь к каталогу main
java_files=$main.java$mypkg   # main+package
build_dest==path_to_build  # путь к каталогу build 
PLATFORM=PLATFORM=./platforms/android-33

javac -source 1.8 -target 1.8 \
  -bootclasspath "${JAVA_HOME}/jre/rt.jar"  \
-classpath "${PLATFORM}/android.jar" -d $build_dest/classes \
  $build_dest/res/$mypkg/R.java   $java_files
 

Здесь
-source 1.8 -target 1.8 - насколько я понимаю, для совместимости с java 8, используемой android.

Забирает только что собранный R.java и java файлы из каталога main/java и помещает результат (файлы class) в
каталог build

Если все прошло без ошибок, дальше проблем быть не должно.

_________________
Линукс решает, винда глотает.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Блог программиста любителя
СообщениеДобавлено: Ср фев 05, 2025 00:49 
Не в сети
Аватара пользователя

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 340
Откуда: Москва
Благодарил (а): 37 раз.
Поблагодарили: 10 раз.
Внимание!!! Вместо $java_files в предыдущем примере надо писать $java_files/*java

Утилита dx преобразует только что полученные файлы class в android формат
и записывает результат в build/dex

Код:
$BUILD_TOOLS/dx --dex --output=$build_dest/dex/classes.dex $build_dest/classes/

Опять вызывается утилита aapt, чтобы упаковать файлы ресурсов XML, полученные dex файлы,
файлы в каталоге assets и манифест в apk файл.
Он пока еще не выравнен и не подписан.
Код:
apk_name=myapp
$BUILD_TOOLS/aapt package -f -M $main/AndroidManifest.xml \
-S $main/res/  -I "${PLATFORM}/android.jar" \
        -A $main/assets  \
        -F  $build_dest/apk/$apk_name.not_aligned.unsigned.apk $build_dest/dex/

Выравниваем
Код:
"${BUILD_TOOLS}/zipalign" \
-f 4 $build_dest/apk/$apk_name.not_aligned.unsigned.apk $build_dest/apk/$apk_name.aligned.apk       

И подписываем
Код:
$BUILD_TOOLS/apksigner sign --ks keystore.jks \
        --ks-key-alias androidkey --ks-pass pass:android \
              --key-pass pass:android --out $build_dest/apk/$apk_name.apk \
              $build_dest/apk/$apk_name.aligned.apk

Далее про генерацию ключей для подписки файла

_________________
Линукс решает, винда глотает.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Блог программиста любителя
СообщениеДобавлено: Ср фев 05, 2025 01:20 
Не в сети
Аватара пользователя

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 340
Откуда: Москва
Благодарил (а): 37 раз.
Поблагодарили: 10 раз.
WARNING!!!
Предыдущий пример не будет работать с build-tools поздних версий,
в частности build-tools 34.0.0 и android-33
Там нет утилиты dx Вместо нее утилита d8 с другими параметрами.
Помучавшись, удалось скомпилировать проект, но пока на телефон не устанавливал.
Решил отложить разбирательство с d8 и пока пользоваться более старыми версиями.

Поэтому скачиваем старые пакеты

sdkmanager --sdk_root=path_to_SDK "platforms;android-28"
sdkmanager --sdk_root=path_to_SDK "build-tools;30.0.2"

Временно отказавшись от новейших средств, в плане эффективности вряд ли чего то потеряем

_________________
Линукс решает, винда глотает.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 131 ]  На страницу Пред.  1 ... 5, 6, 7, 8, 9

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB