запуск скрипта при загрузке android
Linux для человеков!
Обзоры
Фотогалереи
Помощь при использовании сайта
Новое из блога
Скрипт в автозапуск Android
Даже не верится, что нашлись люди которые пользуются запуском системных служб через стартовые скрипты в Android.
А у меня в TV-Box Mele A2000 (ICS 4.0) папки init.d не нашлось, а я так надеялся, хотел при запуске шары монтировать. Теперь и не знаю как быть, где там вообще автозапуск храниться.
Боюсь не смогу помочь. Во первых у вас ICS, а во вторых каждый вендор сам решает как устройству грузиться. В мире Android вообще многое сугубо индивидуальное в рамках одного устройства.
А если по данному пути /system/etc/init.d/ нет директории init.d?
Создать и попробовать закинуть в нее скрипт. Разумеется с правами на выполнение.
В следующий раз бери какого нибудь производителя который хоть исходники выкладывает с README внутри.
Как от рута запускать?
не прокатываеть. Any ideas?
Сначала сказал бы где это ты выполняешь, в терминале или при загрузке. И писать кавычки не надо. Если скрипт, то он должен начинаться с
Задача в том чтобы монтировать папки при старте системы.
Работа с cron под Android и добавление shell-скрипта в автозапуск при загрузке устройства
В связи с тем, что мобильные устройства уже давно имеют обширный функционал, то задачи автоматизации можно смело переносить и на них. И, как нельзя лучше, здесь так же хорошо подходит cron для их выполнения. Но если в «обычных» Linux системах настройка cron занимает мало времени, то Android устройство требует более сложной работы по его настройке.
Если тебе интересна тема автоматизации и ты хочешь, чтобы твои shell-скрипты запускались сразу же после загрузки устройства, да еще и могли бы запускаться по таймеру — добро пожаловать под кат!
Предисловие
Я занимаюсь автоматизацией мобильных устройств под Android. И во время выполнения автоматических скриптов происходит множество непредвиденных ситуаций, даже если для тестирования используются одинаковые устройства.
Самые популярные проблемы:
0. Скрипт автоматизации выполняет не то, что ты хотел
1. Мобильное приложение автоматически выгружается
2. Автоматическая перезагрузка телефона
3. Мобильное приложение автоматически не запускается после перезапуска
4. Wi-Fi модуль произвольно отключается, не находит сеть, не подключается к сети
5. Мобильная сеть неожиданно пропала
6. Телефон ушел в спящий режим
7. Отпал прокси или сам сервер или сервер вернул странный ответ
Из-за этого приходится постоянно следить за устройством и отлавливать эти непредвиденные ситуации.
Таким образом, я пришел к тому, что cron с «правильными» скриптами позволит отследить программные сбои и восстановить скрипт автоматизации или запустить его заново. Но как оказалось, хотя Android содержит ядро Linux, но есть особые нюансы, с которыми пришлось разбираться. Итак, давайте приступим к настройке!
Настройка Cron
Настраиваем окружение
Настройка ручного запуска
4. Создадим простой crontab файл:
Теперь у нас есть задание, которое каждую минуту будет добавлять слово text в файл /sdcard/test.txt
Запускаем: и получаем следующий лог:
Конечно, немного удивляет, ведь если мы выполним команду whoami то в результате она вернёт root.
5. Добавим пользователя root, раз crond просит:
Из-за отсутствия данного файла, я понял, что в Android системе он совсем не задействован. Если вы уверены в том, где вы будете хранить свои crontab файлы, то вы можете заменить строку /system/etc/crontabs на нужную вам. Снова выполняем команду
И получаем следующее:
Хотя, если верить логу задача в crond прописалась, но в моем случае файл не создался. Решить проблему можно очень просто:
Ну хочет он, чтобы существовала там директория, кто мы такие, чтобы ему запрещать! Запускаем снова и видим:
Ошибки ушли, и появилась строка crond: child running /system/bin/sh. Наконец-то cron у нас успешно завелся, и можно переходить ко второй части!
Автоматическая загрузка shell-скрипта
В Linux системе есть директория init.d, которая отвечает за автозапуск сразу же после загрузки системы, поэтому попробуем идти по этому пути!
1. Проверяем, существует ли данная директория у вас на устройстве (это /etc/init.d либо /system/etc/init.d — это тот же смонтированный раздел etc ). В моем случае её нет. Ну что, тогда создаем:
Теперь добавим туда какой-нибудь простенький скрипт, например:
Перезагружаем устройство и смотрим, случилось ли чудо… К сожалению, у меня файл не появился.
Исследуем систему дальше и ищем какой-нибудь init файл, который может запускать скрипты после запуска. У меня на устройстве оказался файл в /init.rc. Ну что, попробуем его изменить и перезагрузим устройство:
Но файл опять не создался. Идем смотреть на файл /init.rc и наша запись пропала и файл как бы и не менялся, т.к. дата создания стоит совсем какая-то странная (в моем случае 01 янв. 70 05:00:00).
Продолжаем разбираться, и оказывается что данный файл храниться в boot.img, и каждый раз достается из него. И для того, чтобы изменить функционал файла init.rc нужно выполнить все это.
Но есть более простой способ, который поможет решить данную задачу. Для этого способа мы можем использовать следующий shell-скрипт (скажем спасибо Ryuinferno):
Приступаем к внедрению скрипта! В моем случае он будет называться init.sh.
1. Загружаем файл на sdcard мобильного устройства:
2. Копируем в память мобильного устройства и устанавливаем нужные права:
3. Запускаем на выполнение:
И обращаем внимание на лог, который выводится. Вот мой лог:
Как видим из лога, ошибок нет, поэтому смело перезагружаем устройство! Возможно у кого-то уже все заработало и вы смогли найти файл /data/Test.log, но у меня его нет. Проверим директорию /system/etc/init.d используя команду ls:
Как видим, задачи успешно созданы. Возможно все же придется менять boot.img, но давайте в начале проверим, а где у нас файл install-recovery.sh с помощью команды
Как можем заметить, у нас 2 файла, которые лежат в разных местах. По дате создания мы можем заметить, что скрипт создал файл в директории /system/etc/install-recovery.sh, хотя, возможно, в некоторых случаях он должен создавать его в /system/etc. Давайте переименуем файл в bin и скопируем файл из etc:
Тут u:object_r:system_file:s0 и является контекстов безопасности.
И снова перезагружаем устройство… И вот, наконец-то долгожданный УСПЕХ! Файл /data/Test.log появился!
Раз все работает, идем в /system/etc/init.d и создаем shell-скрипт. А в нем как-раз запустим наш crond на выполнение:
После загрузки проверяем, запустился ли crond:
И на этом могли бы мы уже закончить, но давайте подождем минуту и посмотрим, произошла ли запись в наш файл… Ну как вы уже поняли, опять ни чего не сработало. Дело в том, что данный процесс нужно запустить от супер пользователя. Изменим скрипт в файле 99cronstart:
UPD: Возможно в вашем случае su будет иметь другой путь, тогда воспользуйтесь командой which su и замените путь, на ваш.
Теперь наше Android устройство поддерживает и задачи cron и может содержать shell-скрипты для автоматического запуска!
Ну и напоследок, скрипт, который будет запускать наше приложение, если его нет в процессах и сохранять информацию о том, что находилось на главном экране до запуска нашего приложения:
Как я могу запустить скрипт при загрузке?
Я привык запускать скрипты при загрузке в Linux, но я не уверен, как это сделать в Android. Я бы хотел, чтобы мой SSH-демон запускался, поэтому я всегда смогу подключиться. Как запустить произвольный скрипт при загрузке Android? Было бы предпочтительнее сделать это вне Далвика.
Просматривая мою файловую систему Android, я обнаружил, что у нее действительно есть /etc/init.d/ каталог. Посмотрев туда, я нашел /etc/init.d/20userinit следующие строки:
Разумеется, это именно то , что мне было нужно, я написал на своем компьютере следующий скрипт, а затем перенес его на свое устройство:
/data/init.sh запускается при загрузке, если у вас есть root, вы можете редактировать его как хотите. Быть осторожен 😉
Редактировать: По-видимому, вам может понадобиться вставить отредактированный скрипт в образ загрузки. Информация о том, как это сделать, здесь: http://forum.xda-developers.com/showthread.php?t=443994
Смотри в /etc/ каталог. Обычно он помещается в /system/ раздел, который вы можете смонтировать как RW:
Некоторые вышеупомянутые шаги могут быть заменены на:
а позже перемонтируем RO:
Теперь ваша задача найти исполняемый *rc файл или файл, который вы изменяете для достижения своей цели:
Google о каждом кандидате, чтобы узнать, как этот файл был использован.
Хорошим кандидатом для включения пользовательских скриптов являются строки из:
Например я обнаружил, /etc/mkshrc что используется оболочкой Korn. Я обновляю этот файл для расширения PATH env var, и теперь каждый раз, когда я делаю, у adb shell меня есть символические ссылки Busybox в моем PATH!
Смотрите также трудный путь (если вам не повезло с поиском волшебного файла): https://stackoverflow.com/questions/9768103/make-persistent-changes-to-init-rc
Я перепробовал все эти методы, и ни один из них не помог мне. Однако то, что сработало, было основано на ответе лорда-ральфа-адольфа здесь. Как запустить скрипт при загрузке в CM12.1?
в основном, найдите файл /system/etc/install-recovery.sh и добавьте следующую строку в начале /data/init.sh &
Готово! Теперь вы можете положить все, что вы хотите, /data/init.sh и он будет работать при запуске. Если файл /system/etc/install-recovery.sh не находится в вашей системе, то этот ответ не будет работать для вас. Не беспокойтесь о создании этого.
Простой способ (рабочий):
Подготовьте ваши команды после загрузки в скрипте, скажем / system / xbin / post-boot (установите exec perm)
Добавьте указанный выше путь к пользовательскому сценарию в конце /system/etc/init.qcom.post_boot.sh
echo / system / xbin / post-boot >> /system/etc/init.qcom.post_boot.sh
(Если вы не можете найти qcom post_boot (устройства Qualcomm), поищите сценарии post_boot)
Работа с cron под Android и добавление shell-скрипта в автозапуск при загрузке устройства
В связи с тем, что мобильные устройства уже давно имеют обширный функционал, то задачи автоматизации можно смело переносить и на них. И, как нельзя лучше, здесь так же хорошо подходит cron для их выполнения. Но если в «обычных» Linux системах настройка cron занимает мало времени, то Android устройство требует более сложной работы по его настройке.
Если тебе интересна тема автоматизации и ты хочешь, чтобы твои shell-скрипты запускались сразу же после загрузки устройства, да еще и могли бы запускаться по таймеру — добро пожаловать под кат!
Предисловие
Я занимаюсь автоматизацией мобильных устройств под Android. И во время выполнения автоматических скриптов происходит множество непредвиденных ситуаций, даже если для тестирования используются одинаковые устройства.
Самые популярные проблемы:
0. Скрипт автоматизации выполняет не то, что ты хотел
1. Мобильное приложение автоматически выгружается
2. Автоматическая перезагрузка телефона
3. Мобильное приложение автоматически не запускается после перезапуска
4. Wi-Fi модуль произвольно отключается, не находит сеть, не подключается к сети
5. Мобильная сеть неожиданно пропала
6. Телефон ушел в спящий режим
7. Отпал прокси или сам сервер или сервер вернул странный ответ
Из-за этого приходится постоянно следить за устройством и отлавливать эти непредвиденные ситуации.
Таким образом, я пришел к тому, что cron с «правильными» скриптами позволит отследить программные сбои и восстановить скрипт автоматизации или запустить его заново. Но как оказалось, хотя Android содержит ядро Linux, но есть особые нюансы, с которыми пришлось разбираться. Итак, давайте приступим к настройке!
Настройка Cron
Настраиваем окружение
Настройка ручного запуска
4. Создадим простой crontab файл:
Теперь у нас есть задание, которое каждую минуту будет добавлять слово text в файл /sdcard/test.txt
Запускаем: и получаем следующий лог:
Конечно, немного удивляет, ведь если мы выполним команду whoami то в результате она вернёт root.
5. Добавим пользователя root, раз crond просит:
Из-за отсутствия данного файла, я понял, что в Android системе он совсем не задействован. Если вы уверены в том, где вы будете хранить свои crontab файлы, то вы можете заменить строку /system/etc/crontabs на нужную вам. Снова выполняем команду
И получаем следующее:
Хотя, если верить логу задача в crond прописалась, но в моем случае файл не создался. Решить проблему можно очень просто:
Ну хочет он, чтобы существовала там директория, кто мы такие, чтобы ему запрещать! Запускаем снова и видим:
Ошибки ушли, и появилась строка crond: child running /system/bin/sh. Наконец-то cron у нас успешно завелся, и можно переходить ко второй части!
Автоматическая загрузка shell-скрипта
В Linux системе есть директория init.d, которая отвечает за автозапуск сразу же после загрузки системы, поэтому попробуем идти по этому пути!
1. Проверяем, существует ли данная директория у вас на устройстве (это /etc/init.d либо /system/etc/init.d — это тот же смонтированный раздел etc ). В моем случае её нет. Ну что, тогда создаем:
Теперь добавим туда какой-нибудь простенький скрипт, например:
Перезагружаем устройство и смотрим, случилось ли чудо… К сожалению, у меня файл не появился.
Исследуем систему дальше и ищем какой-нибудь init файл, который может запускать скрипты после запуска. У меня на устройстве оказался файл в /init.rc. Ну что, попробуем его изменить и перезагрузим устройство:
Но файл опять не создался. Идем смотреть на файл /init.rc и наша запись пропала и файл как бы и не менялся, т.к. дата создания стоит совсем какая-то странная (в моем случае 01 янв. 70 05:00:00).
Продолжаем разбираться, и оказывается что данный файл храниться в boot.img, и каждый раз достается из него. И для того, чтобы изменить функционал файла init.rc нужно выполнить все это.
Но есть более простой способ, который поможет решить данную задачу. Для этого способа мы можем использовать следующий shell-скрипт (скажем спасибо Ryuinferno):
Приступаем к внедрению скрипта! В моем случае он будет называться init.sh.
1. Загружаем файл на sdcard мобильного устройства:
2. Копируем в память мобильного устройства и устанавливаем нужные права:
3. Запускаем на выполнение:
И обращаем внимание на лог, который выводится. Вот мой лог:
Как видим из лога, ошибок нет, поэтому смело перезагружаем устройство! Возможно у кого-то уже все заработало и вы смогли найти файл /data/Test.log, но у меня его нет. Проверим директорию /system/etc/init.d используя команду ls:
Как видим, задачи успешно созданы. Возможно все же придется менять boot.img, но давайте в начале проверим, а где у нас файл install-recovery.sh с помощью команды
Как можем заметить, у нас 2 файла, которые лежат в разных местах. По дате создания мы можем заметить, что скрипт создал файл в директории /system/etc/install-recovery.sh, хотя, возможно, в некоторых случаях он должен создавать его в /system/etc. Давайте переименуем файл в bin и скопируем файл из etc:
И снова перезагружаем устройство… И вот, наконец-то долгожданный УСПЕХ! Файл /data/Test.log появился!
Раз все работает, идем в /system/etc/init.d и создаем shell-скрипт. А в нем как-раз запустим наш crond на выполнение:
После загрузки проверяем, запустился ли crond:
И на этом могли бы мы уже закончить, но давайте подождем минуту и посмотрим, произошла ли запись в наш файл… Ну как вы уже поняли, опять ни чего не сработало. Дело в том, что данный процесс нужно запустить от супер пользователя. Изменим скрипт в файле 99cronstart:
Теперь наше Android устройство поддерживает и задачи cron и может содержать shell-скрипты для автоматического запуска!
Ну и напоследок, скрипт, который будет запускать наше приложение, если его нет в процессах и сохранять информацию о том, что находилось на главном экране до запуска нашего приложения:
Запуск скрипта при загрузке android
Нужно наличие папки Init.d изначально, простое создание и запихивание туда твиков не дадут никакого эффекта!
С недавних пор авторы прошивок начали лазить по XDA-Developers и добавлять в свои прошивки разные твики и скрипты взятые оттуда тем самым улучшая что-либо, ниже предложена большая часть твиков, их установки и тому подобное. Я разделил все твики и скрипты на несколько уровней сложности при установке.
Первый уровень. Редактирование Build.prop с помощью Root Explorer, но я рекомендую скидывать Build.prop к себе на компьютер и редактировать оттуда, так как в в файле уже могут находится строки которые вы хотите добавить, а двойное сочетание строк может привести к увеличению времени загрузки телефона, а если там вбиты ещё и разные значения то у вас есть все шансы залипнуть на бутлого.
Всем файлам в папке init.d нужно выставить соответствующие права.
УРОВЕНЬ 1. BUILD.PROP
Еще твики интернета Тут
Затем wipe оба caches и reboot.
Дополнения от пользователей Ⅳ представлены ниже, всю информацию о них спрашивать у тех кто её выложил!
2. Распаковываем его в init.d, в Root Explorer выставляем права «777» т.е. все галки
3.Ребутимся
# Move dalvik-cache to /cache
busybox chown 1000:1000 /cache/dalvik-cache
busybox chmod 0771 /cache/dalvik-cache
Почему HTC по сравнению с Motorola показывает такие большие результаты в Quadrant?
Точно работает на моторолах, на других аппаратах не проверял.
а) Увеличение очков в quadrant на 600, возможно производительность вырастит где-нибудь ещё.
Спойлер (+/-)
Я все делал прямо в телефоне, через root explorer
Но вы можете выгрузить /system/build.prop и поменять заветные свойства на компьютере, если не уверены в своих силах.
6) Меняем false на true
7) Сохраняем файл обратно
8) Монтируем систему обратно в ro
9) Перезагружаем телефон
Не удается найти некоторые приложения в маркете, что делать?
Должно работать на любом аппарате.
Не находит некоторые приложения на рынке, хотя эти приложения совместимы с аппаратом. Это обычно бывает из-за того, что прошивка неофициальная (или стоковая 2.3). Для того, чтоб маркет «увидел» программы, которые «видел» раньше на стоковых прошивках, нужно изменить некоторые строки в /system/build.prop для того, чтоб маркет принимал вашу прошивку за стоковую
Например, у вас установлен CyanogenMod 7 RC1.5 (Android 2.3.5). Открываем каким-либо проводником с рут доступом файл /system/build.prop и ищем строки
Код
ro.build.description=umts_jordan-user 2.3.5 JOREM_U3_3.4.2-179-4 1315058180 release-keys
ro.build.fingerprint=MOTO/MB525_JOREM_U3/umts_jordan/jordan:2.3.5/3.4.2-179-4/1315058180:user/release-keys
Меняем их на следующие:
Сохраняем изменённый файл и проверяем права (должны быть rw-r—r—), делаем вайп кешей.
Попробуйте установить время вручную на 11:55 и пусть оно перйдёт за полночь. Проверьте маркет снова. Если вы все еще не видите приложений, то есть два варианта:
1. нужно сохранить данные программ с помощью титаним бекап и сделать полный вайп, затем восстановить данные.
2. Если у вас кастомная прошивка, которая устанавливается через CWM, то нужно поправить файл /system/build.prop в исходнике прошивки, удалить файлы подписи (файлы CERT.RSA, CERT.SF и MANIFEST.MF, лежащие в папке [ваша прошивка].zip/META-INF/) и перепрошить телефон снова, без полного вайпа (только вайп кешей).В этом случае потерь данных можно избежать.
Как улучшить работу GPS?
должно работать на всех аппаратах
Подредактировал файл /etc/location.cfg следующим образом:
От себя могу добавить скрипт переноса дальвик кэша в /cache 🙂 (для увеличения места под установку пользовательских приложений), вот он:
—————————————————————————-
#!/system/bin/sh
#
# Move dalvik-cache to /cache
busybox chown 1000:1000 /cache/dalvik-cache
busybox chmod 0771 /cache/dalvik-cache
вот еще скриптики для init.d(правда я их не пробовал, но должно работать):
Данный скрипт ставит частоту при выключенном экране(известный всем профиль Screen Off из SetCPU) и при включенном(рабочее состояние).
Как поставить и редактировать:
сами скрипты:cpuclock.rar ( 1,54 КБ )
Задумка создать такую тему интересная, но я считаю что шапка должна разбиваться на версии ядер и андроида!
Во первых все твики и скрипты которые мы все юзаем не на всех аппаратах работают!
Так вот, если в ядре нет поддержки какой либо функции, то до одного места те скрипты и твики, они ничего давать не будут.
Вот к примеру скрипт cpuclock от Р500 что выложен выше, так же может не корректно работать на разных версиях того же 32/35 ядра, так как там вбиты все доступные частоты для разгона, а каждый ромодел может добавить свои или переделать, потому этот скрипт не заработает на ГТ540, тем более на других телефонах.
Я это все веду к тому что здесь каждый твик и скрипт индивидуальный для каждого телефона и для каждого ядра! А в наше время уже столько ковырятелей развелось, что можно утонуть в море Ядер и Прошивок!
И не забываем, что скрипты без включения поддержки в рамдиске не будут работать на простых ядрах!
А еще стоит добавить ссылку на Бузибокс который очень необходим для всех этих манипуляций!
Кому надо вот зип: zip.zip ( 220,77 КБ )
(говорят некачается)
вот другой zip.rar ( 107,09 КБ )