Как запустить скрипт при загрузке в CM12.1?

9

Большинство вопросов, которые я могу найти в связи с этим, относятся к 2011 году и около того, так что, возможно, неудивительно, что с тех пор все изменилось. Я перепробовал множество вещей, но без результатов.

В нем есть несколько скриптов /system/etc/init.d(которые также отображаются /etc/init.dна моем устройстве). В частности, есть 00bannerскрипт, который должен регистрировать приветственное сообщение. Приветственное сообщение никогда не появляется в logcat.

Я разместил здесь свой собственный сценарий, который в итоге был сведен только к этому:

#!/system/bin/sh
log -t mytest Testing

Ничего. Никогда не появляется в logcat, если не запускается вручную через терминал. Тогда это работает.

Здесь также есть 90userinitфайл, который вызывается, /data/local/userinit.shесли он существует. Я создал его с тем же содержанием, что и выше. Опять же, ничего не появляется в logcat. Что неудивительно, так как если 00bannerне будет работать, то и этого не будет.

Я искал что-нибудь с именем "init.rc", но ничего такого не существует нигде на моем устройстве.

Все мои скрипты имеют 755 разрешений.

Что еще я могу попробовать? (кроме приложений, которые запускают скрипты для меня)

RomanSt
источник
Какой сценарий вы хотите запустить и почему?
незабываемыйПоддержкаMonica
К сожалению, небольшое количество копания, которое я сделал, привело к «Не будет работать на пользовательских roms». По-видимому, у CM есть свой способ ведения дел. Не уверен, что вы хотите возиться с этим. Но, очевидно, вы можете создать свой собственный файл boot.img и добавить к нему свои собственные скрипты. Может быть, это будет работать для тебя.
Jer3my 15.07.15
@ jer3my Я очень рад принять это как реальный ответ и назначить награду, если у вас есть ссылки, которые я нахожу убедительными / авторитетными.
RomanSt
Я отправлю ответ через секунду, также нашел что-то еще, что может помочь вам.
Jer3my
init.rc является частью initramfs, он не включен в boot.img. Вы можете использовать такой инструмент, как unmkbootimg, чтобы извлечь его, отредактировать и перестроить, используя mkbootimg, два инструмента доступны в проекте cm, скажите мне, что вы Использую, я скомпилирую их для вас: D
Лорд-Ральф-Адольф

Ответы:

5

Существует простой способ добавить поддержку init.d для любого корневого Android для версий 4.0 и выше, Google сделал скрипт, который запускается при загрузке, как суперпользовательский скрипт, install-recovery.shон используется для перепрошивки стокового восстановления при каждой загрузке, которую они считают хорошей безопасность для предотвращения пользовательских восстановлений, но он открыл новую дыру, которая может быть использована пользователями для подделки функции init.d. Зависимости : чтобы этот метод работал, нужно следующее

  1. Занят ящик установлен с run-partsсимволической ссылкой на ваш путь, как/system/xbin
  2. Очевидно, вам понадобится рутированный телефон с /systemвозможностью монтирования какrw
  3. Версия ядра не имеет значения.

Метод I: (Самый простой способ!)

  1. Загрузите этот APK (бесплатный, не зеркалируйте, спасибо @Ryuinferno из XDA).
  2. Установите апк как любое обычное приложение.
  3. Запустите приложение.
  4. нажмите на активировать! вот и все, теперь поддерживается setinit.d. вы можете нажать кнопку тестирования или перезагрузить телефон, чтобы увидеть, не завершены ли ваши сценарии init.d
  5. Вы можете удалить приложение, это не повлияет на поддержку init.d

Метод II: (сложность: средняя)

  1. Загрузите этот zip, распакуйте его и поместите init.sh на свою SDCard (в этом примере это может быть с одного /sdcardустройства на другое).

  2. Теперь откройте терминал или используйте adb shellс компьютера и запустите скрипт.
    su
    cp /sdcard/init.sh /data/tmp/init.sh
    chmod 777 /data/tmp/init.sh
    /data/tmp/init.sh

скрипт запустится и попросит вас перезагрузиться дважды, вот и все, что у вас есть официальная поддержка init.d: ​​D

Справка: [MOD] [APK + SCRIPT + ZIP] Включить Init.d для любых телефонов без необходимости в пользовательских ядрах !!!

Лорд-Ralf-Adolf
источник
Поскольку zip-файл размещен на XDA, должен быть учебник, которому вы следовали или каким-то образом узнали. Не могли бы вы упомянуть ссылку для этого? Мне нужно искать что-то еще в этом. :)
Повелитель огня
1
@Firelord да, скрипт не мой, он использовался для других целей, я взял его отсюда, чтобы просмотреть отдельный пост> forum.xda-developers.com/… , полное руководство по xposed и nexus 6 >> forum.xda -developers.com/nexus-6/general/…
Лорд-Ральф-Адольф
@Firelord найти новую ссылку ссылки включены в ответ :)
лорд-ralf-Адольф
Спасибо, я, вероятно, дам вам награду, если не появится что-то еще более простое. Но я искренне думал, что добавление сценария оболочки для запуска при загрузке будет самой простой вещью, которую можно когда-либо сделать на чем-то вроде CM. Очевидно, это не так; это сложнее, чем кодировать приложение boot_completed, которое делает то, что я хочу, поэтому я просто сделаю это вместо этого.
RomanSt
@romkyns old cm поддерживает init.d по умолчанию, но с тех пор, как он стал компанией, их пути изменились, хотя проблема init.d связана с новой версией lollipop со строгой политикой selinux / boot_completed - это тоже способ сделать это, и вы сказал, что будет проще
Лорд-Ральф-Адольф
2

Редактировать: я видел конец сообщения, это один из способов, я постараюсь добавить без приложений как можно скорее (не дома, публикации с помощью мобильного телефона), но вы можете использовать это, если что-то другое не работает.

Вы можете попробовать использовать приложение под названием Tasker .

Это стоит 3,29 $ и требует root-доступа, но может запускать сценарии оболочки. Кроме того, у него есть пробная версия, так что вы можете попробовать перед покупкой.

Сначала создайте задание. Перейдите на вкладку «Задача», нажмите «+», введите название задачи. Теперь перейдите снова + знак и введите shellфильтр. Вы найдете вариант Run Shell, выберите его и настройте в соответствии со своими потребностями.

После этого вернитесь на первую вкладку - Профили, нажмите + знак, чтобы создать новый. Выберите Event как тип, зайдите System и выберите Device Boot. Вернитесь, и вам будет предложено выбрать задачу. Теперь выберите предварительно созданное задание, и вы готовы к работе!

AndroidNotSoPowerUser
источник
1

Это требует от вас прошить zip, но затем вы можете поместить свои скрипты в / system / etc / startup, после чего они должны автоматически запуститься с телефона.

http://forum.xda-developers.com/showthread.php?t=2664645

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

Редактировать. После еще нескольких копаний это не CM, по крайней мере, делает свое дело для скриптов. Это ядро. Не все ядра поддерживают init.d для Android. Если вы публикуете, какое устройство вы используете. Я могу найти ядро, которое поддерживает пользовательские скрипты при загрузке для вас.

jer3my
источник
0

У меня также есть та же проблема при выполнении файла сценария в терминале в CM12.1. Решение состоит в том, чтобы скопировать скрипт в /dataпапку и выполнить его. Поэтому я думаю, что CM 12 разрешает выполнение сценария только из определенного места.

Энтаах Лаах
источник
0

Простой способ (рабочий):

  1. Подготовьте ваши команды после загрузки в скрипте, скажем / system / xbin / post-boot (установите exec perm)

  2. Добавьте указанный выше путь к пользовательскому сценарию в конце /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)

Seff
источник
-1

Следующие шаги для запуска скриптов во время загрузки. (Обязательно adb)

  1. корень adb
  2. adb remount
  3. adb pull /init.rc
  4. отредактируйте init.rc добавьте строку для скрипта выполнения, например sh test.sh
  5. adb push init.rc /
  6. adb shell
  7. chmod 755 init.rc
  8. перезагрузка adb

это работает для меня. Я надеюсь, что это поможет вам.

DreamCoder
источник
1
этот метод не должен работать вообще. Содержимое начальных rootfs, таких как init.rc, является частью виртуального диска, который восстанавливается с флэш-памяти вашего устройства при каждой загрузке. Вам необходимо изменить виртуальный диск непосредственно в соответствующем разделе флэш-памяти вашего устройства
делится на ноль
Чем вы можете добавить в /system/etc/init.qcom.wifi.sh
DreamCoder
1
этот метод не будет работать, init.d не может быть запущен! это часть initramfs, они должны быть отредактированы в boot.img, а затем перепрошиты, а для init.qcom.wifi.sh это зависит от конкретного устройства, из него нельзя сделать общее правило
lord-ralf-adolf