Почему usbutil выдает ошибку

Здесь собраны решения проблем, которые возникают с IDE Eclipse, Android Studio, и другие вопросы программирования под Android. Все непонятные термины и сокращения ищите в статье «Словарик Android» [7].

[131228]

Q001. Что такое API Level, API number (API 3, API4, API 7, и т. д.)?

API переводится как интерфейс программирования, в данном контексте это относится к операционной системе Android, к вызову встроенных в систему подпрограмм и функций. Цифра соответствует определенной версии сборки OS Android, см. таблицу. [1].

Q002. Для чего нужен Google USB Driver?

Google USB Driver относится к набору инструментария для автоматизации тестируемых приложений (программ) на телефон/устройство с операционной системой Android. Нужен только для операционной системы Windows, см. [2, 3, 4].

Q003. Что такое Android WebDriver?

Программное обеспечение, которое позволяет запускать автоматизированные сквозные тесты. Эти тесты помогут убедиться, что ваш сайт работает корректно в браузере Android.

Q004. Что такое Activity?

Это слово в контексте программирования Android можно перевести как «видимая деятельность программы». Это основной компонент приложения (программы) для Android, свойства и методы которого определяют работу (поведение) и внешний вид программы. Каждое отдельное окно приложения представлено отдельным компонентом Activity.

Q005. Что такое Gradle?

Специальный плагин для Android Studio, позволяющий автоматизировать сборку приложений на Java. Именно с ним больше всего головной боли у разработчиков при переходе на разные версии Android Studio и JDK, особенно при импорте Android-приложений, созданных в среде разработки Eclipse.

Q006. Проблема с запуском виртуального устройства при отладке.

Я создал виртуальное устройство (AVD) для эмулятора Android Studio, на котором пытаюсь отладить свою программу. Но почему-то не могу запустить в эмуляторе мою AVD (на экране постоянно висит в центре экрана переливающаяся надпись ANDROID). Когда пытаюсь запустить свою программу, то в логе Atmel Studio вижу сообщение об ошибке «Adb Transfer Protocol Error», «No such file or directory». В чем проблема?

При использовании эмулятора Android Studio нужно иметь в виду, что он чрезвычайно прожорлив в плане расхода памяти и ресурсов процессора компьютера. Так что скорее всего, Вы создали AVD слишком мощное, и поэтому оно запускается в эмуляторе слишком долго. Когда в такой ситуации Вы пытаетесь запустить отладку, то скорее всего получите сообщение наподобие следующего:

Waiting for device.
"C:Program FilesAndroidandroid-studiosdktoolsemulator.exe" -avd AVD-GT-N7000 -netspeed full 
-netdelay none
Device connected: emulator-5554 Device is online: emulator-5554 Target device: AVD-GT-N7000 [emulator-5554] Uploading file local path: C:Documents and SettingsUserAndroidStudioProjectsMyApplicationProjectMyApplication
buildapkMyApplication-debug-unaligned.apk 
remote path: /data/local/tmp/com.example.myapplication
Adb Transfer Protocol Error.
No such file or directory

Это означает, что отлаживаемое приложение не может загрузиться в эмулятор, так как эмулятор еще не запустился. Чтобы решить проблему с отладкой, у Вас есть следующие варианты:

1. Перед запуском отладки нужно дождаться полной загрузки AVD в эмуляторе, и только потом запускать отладку. Наберитесь терпения, первая загрузка новой машины может занимать до 10 минут и более, в зависимости от её свойств и мощности Вашего компьютера. Чтобы ускорить загрузку эмулятора, используйте снапшоты для AVD (при создании AVD поставьте галочку Snapshot).
2. Создать другую AVD, требующую меньше ресурсов (выбрать модель смартфона с меньшим разрешением экрана и с меньшим API level).
3. Запустить отладку на виртуальной машине, см. [4].
4. Установить Google USB Driver и отлаживаться на реальном устройстве с операционной системой Android.

Q007. Случайно закрыт визуальный редактор формы…

Я редактирую разметку окна программы (форму) — файл activity_main.xml, и случайно закрыл окно просмотра внешнего вида формы (окошко, где показано окно моей программы). Как мне снова открыть просмотр формы? Как переключаться между текстовым редактированием формы (как XML-файла) и графическим редактированием (когда можно визуально редактировать форму, мышкой перетаскивать компоненты и менять их свойства)?
Для просмотра редактируемой формы выберите в меню View -> Tool Windows -> Preview. Для переключения между текстовым и визуальным вариантами редактирования формы служат нижние табы окна редактора — Design (визуальное редактирование формы) и Text (редактирование формы как XML-текста).

Q008. Почему не работает просмотр иерархии (Hierarchy View)…

… в программе Android Debug Monitor, когда я подключаюсь через USB (или Wi-Fi) к отлаживаемому устройству?

[2014-01-01 15:59:08 - hierarchyviewer]Unable to get view server version from device 0019a2fe5212ce
[2014-01-01 15:59:08 - hierarchyviewer]Unable to get view server protocol version from device 0019a2fe5212ce
[2014-01-01 15:59:08 - ViewServerDevice]Unable to debug device: samsung-gt_n7000-0019a2fe5212ce
[2014-01-01 15:59:08 - hierarchyviewer]Missing forwarded port for 0019a2fe5212ce
[2014-01-01 15:59:08 - hierarchyviewer]Unable to get the focused window from device 0019a2fe5212ce

Почти никакие телефоны и смартфоны общего производства не позволят HierarchyViewer получать доступ к ним. Обычно специальные телефоны разработчика и эмуляторы оснащены функциями, работающими с HierarchyViewer. Есть обходной способ решения проблемы, если использовать класс ViewServer в разрабатываемом приложении (см. ViewServer Local server for Android’s HierarchyViewer site:github.com).

Q009. Что такое R (R.java)?

R.java — автоматически генерируемый (средой разработки Eclipse) Java-код, который определяет специальный Java-класс ресурсов приложения R. Этот файл пересоздается, когда Вы делаете очистку или компиляцию проекта. В классе R содержатся значения идентификаторов ресурсов, которые были определены в визуальном редакторе или в соответствующем XML-файле ресурсов.

Q010. Как посмотреть последние сообщения ядра (dmesg) …

… при загрузке или установке новых устройств? Другими словами, есть ли на Android аналог dmesg?

На Андроид файл /proc/kmsg является аналогом dmesg в Linux, однако для просмотра файла /proc/kmsg (например, командой cat /proc/kmsg) нужны права root. Есть также файл /proc/last_kmesg, для его просмотра права root не нужны.

Q011. Что такое Android rooted device? Какие преимущества это дает, какие недостатки?

Пользователь root — это специальный аккаунт в UNIX системах (к которым относится также и Android), который позволяет выполнять все операции в системе без ограничений. Пользователь с правами root получает доступ ко всем системным и аппаратным ресурсам и данным, с возможностью их редактирования и удаления. Подробнее см. [5].

[140126]

Q012. Path variable name cannot contain character.

При попытке создать новую переменную окружения проекта (свойства проекта -> Resource -> Linked Resources -> Path Variables -> New…) выдается ошибка, что имя переменной не может содержать недопустимый символ. В данном случае это точка.

Eclipse-project-properties-add-PATH-variable-error

Удалите точку из имени, и переменная создастся нормально.

Q013. LINK : fatal error LNK1104: не удается открыть файл «kernel32.lib».

Проблему можно решить так: C/C++ Build -> Settings -> Linker (link) -> Libraries -> Additional Libpath (/libpath) -> нажать на кнопочку с зеленым плюсиком -> указать папку c:Program FilesMicrosoft Visual Studio .NET 2003Vc7lib.

Или так: C/C++ General -> Paths and Symbols -> Libraries -> Add… -> File system… -> c:Program FilesMicrosoft Visual Studio .NET 2003Vc7libkernel32.lib.

Q014. LINK : fatal error LNK1104: не удается открыть файл «C:Program.obj».

Ошибка скорее всего в том, что в конфигурации проекта добавлен путь до библиотеки, содержащий двойные кавычки, например «c:Program FilesMicrosoft Visual Studio .NET 2003Vc7libkernel32.lib». Пути до линкуемых библиотек настраиваются в свойствах проекта C/C++ Build -> Settings -> Linker (link) -> Libraries -> Additional Libpath (/libpath), C/C++ Build -> Settings -> Linker (link) -> Libraries -> Libraries, C/C++ General -> Paths and Symbols -> Libraries -> Add… -> File system…

Уберите кавычки из пути, и ошибка LNK1104 исчезнет (поменяйте «c:Program FilesMicrosoft Visual Studio .NET 2003Vc7libkernel32.lib» на c:Program FilesMicrosoft Visual Studio .NET 2003Vc7libkernel32.lib).

Q015. «Dx trouble writing output: already prepared».

Не запускается в эмуляторе приложение Android с ошибкой. Пример вывода в консоли сообщений об ошибке:

[2014-01-26 16:14:43 - HelloWorldAndroid] Dx trouble writing output: already prepared
[2014-01-26 16:14:44 - Dex Loader] Unable to execute dex: java.nio.BufferOverflowException.
Check the Eclipse log for stack trace. [2014-01-26 16:14:44 - HelloWorldAndroid] Conversion to Dalvik format failed: Unable to execute
dex: java.nio.BufferOverflowException. Check the Eclipse log for stack trace.

Решение проблемы: закройте Eclipse. Зайдите в каталог Android SDK (c:Program FilesAndroidandroid-studiosdktools), выполните команду android sdk. Запустится SDK Manager. Удалите Android SDK Build-tools 19, и установите Android SDK Build-tools 18.1.1. Снова запустите Eclipse, и выполните отладку в эмуляторе, проблема исчезнет.

Q016. Как запустить SDK Manager на Windows?

Вот возможные способы:

• Из Eclipse (с установленным плагином ADT) выполните команду меню Window -> Android SDK Manager.
• Перейдите в папку tools пакета Android SDK (полный путь может быть наподобие c:Program FilesAndroidandroid-studiosdktools) и выполните команду android.bat sdk.

Android-SDK-Manager

[140204]

Q017. Приложение (файл .apk) не устанавливается …

… с сообщением «Ошибка разбора данных», «Сбой разбора пакета». Команда ant debug install для этого приложения завершается с сообщением [INSTALL_FAILED_OLDER_SDK].

Проверьте, на какой уровень API скомпилировано приложение. Уровень API Android (API Level [1]) на сегодняшний день может меняться от 1 до 19, что соответствует версии Android от Android 1.0 до Android 4.4. Если приложение рассчитано на более современную версию (более высокий уровень API), чем установленная система на Вашем устройстве Android, то программа не установится и не запустится. Версию системы устройства можно узнать через Настройки -> Об устройстве -> Версия Android (версия обычно состоит из нескольких цифр и точек, наподобие 4.1.2). Уровень API, соответствующий версии, можно узнать из таблицы [1].

[140221]

Q018. Добавление обработчика события для визуального компонента.

Я привык, когда двойным кликом на элементе в визуальном редакторе автоматически создается обработчик события для элемента, но в Eclipse этого не происходит. Как добавить обработчик события на визуальном объекте (обработчик события клика на кнопке)? Процесс по шагам на примере кнопки:

1. Откройте визуальный редактор формы Вашего приложения, для чего сделайте двойной щелчок на XML-файле описания внешнего вида интерфейса Вашей программы (этот файл находится в Project Explorer -> Имя проекта -> res -> layout -> activity_blabla.xml). Переключитесь на графический вид просмотра формы (закладка Graphical Layout).

2. В визуальном редакторе бросьте на форму кнопку. Выберите её, и в редакторе свойств Properties дайте более подходящее Id и введите нужный текст, отображаемый на кнопке. К примеру, Id по умолчанию будет @+id/button1, Вы можете задать что-то типа @+id/MyButtonId.

3. Разрешите Вашему классу Activity прослушивать события кликов на визуальных компонентах реализацией OnClickListener. Для этого откройте файл ИмяПроектаActivity.java (Project Explorer -> Имяпроекта -> src -> имяпакета), и расширьте определение класса Activity:

public class MyAppActivity extends Activity implements OnClickListener {
   ..
}

4. В классе Activity задайте глобальную переменную, которая будет олицетворять Вашу кнопку.

public class MyAppActivity extends Activity implements OnClickListener {
   private Button myButton;
   ..
}

Примечание: если система будет ругаться на то, что не может найти определение Button, то перед объявлением класса добавьте строчку:

import android.widget.Button;

5. В коде onCreate класса Activity добавьте инициализацию переменной myButton.

        myButton = (Button) findViewById(R.id.MyButtonId);

Понятно, что в параметре должно быть передано значение, которое Вы назначили в качестве Id кнопки.

6. Сразу после инициализации переменной добавьте создание прослушивателя события клика с помощью вызова setOnClickListener:

        myButton = (Button) findViewById(R.id.MyButtonId);
        myButton.setOnClickListener(this);

По аналогии можно добавить прослушивание и для других кнопок (конечно же, для них должны быть созданы экземпляры переменных, и сделана инициализация):

        myButtonA.setOnClickListener(this);
        myButtonB.setOnClickListener(this);
         ..

7. Теперь нужно создать обработчик события клика onClick на внешнем виде формы (View). Для этого добавьте в класс Activity определение нового метода onClick:

    // Реализация обработчика события для OnClickListner.
    // Функция onClick будет вызываться всякий раз, когда
    // будет сделан клик на интерфейсе программы.
    @Override
    public void onClick(View v) {
        // Параметр v означает вид, на котором сделан клик.
        // Функция getId() возвращает идентификатор этого вида.
        if(v.getId() == R.id.myButtonId)
        {
            // тут код для действий по кнопке myButton;
            ..
        }
        else if(v.getId() == R.id.myButtonIdA)
        {
            // тут код для действий по кнопке myButtonA;
            ..
        }
        // и так далее, для всех визуальных элементов, принимающих клик.
    }

Вот полный пример листинга кода Activity:

package com.myApp;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class FirstActivity extends Activity implements OnClickListener {
   // Декларирование элементов UI.
   private TextView changingTextView;
   private Button firstButton;
   private Button secondButton;
   /** Вызывается, когда activity создается впервые. */
   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main); // Наш единственный дизайн для этого приложения
                                     // размещен в файле main.xml.
      // Инициализация компонентов визуального интерфейса.
      changingTextView = (TextView) findViewById(R.id.changingTextView);
      firstButton = (Button) findViewById(R.id.leftButton);
      // Когда мы создаем кнопку, и нам нужно обрабатывать с нее события,
      // то нужно установить для неё прослушиватель (listener).
      // Вызов в качестве аргумента this означает, что события будут передаваться
      // родительскому экземпляру класса, в данном случае это наша Activity.
      firstButton.setOnClickListener(this);
      secondButton = (Button) findViewById(R.id.rightButton);
      secondButton.setOnClickListener(this);
   }
   // Реализация с OnClickListner: onClick будет вызван всякий раз, когда происходит
   // клик в каком-то месте вида программы.
   @Override
   public void onClick(View v) 
   {  // Параметр v означает вид (визуальный элемент), на котором сделан клик. 
      // Функция getId() возвращает идентификатор этого вида. По его значению
      // можно декодировать, какая кнопка нажата.
      if(v.getId() == R.id.leftButton)
      {
         // setText() устанавливает значение строки в TextView
         changingTextView.setText("Вы кликнули кнопку слева");
      }
      else if(v.getId() == R.id.rightButton)
      {
         changingTextView.setText("Вы кликнули кнопку справа");
      }
   }
}

Q019. Откуда возникают ошибки, связанные с вычислением переменных среды Eclipse …

… наподобие «Specified Java project ‘null’ does not exist.», «Variable references empty selection: ${project_name}»?

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

Q020. Как в Eclibse убрать красные маркеры ошибок из модуля C/C++? Почему при безошибочной компиляции ошибки все равно высвечиваются?

Почему проект Eclipse с native-кодом компилируется нормально, но в редакторе исходный код подсвечен с ошибками (не найдены некоторые заголовочные файлы и стандартные идентификаторы? Когда подключаете внешние файлы в native-коде (заголовки с расширением *.h), то должны делаться доступными определяемые в их теле новые символы. При этом несмотря на то, что компиляция кода проходит нормально, редактор кода все равно новые символы не видит. «Ошибочный» символ подчеркивается красным, и при наведении на него курсора высвечивается хинт, что символ «could not be resolved».

Нераспознанные символы в редакторе кода появляются потому, что плагин CDT не может найти подходящие заголовочные файлы. Чтобы редактор кода нормально видел подключенные символы, необходимо настроить (добавить) пути поиска файлов include в плагине CDT. Откройте свойства проекта, перейдите в раздел C/C++ General -> Path and Symbols -> на закладке Includes добавьте директории, где нужно искать заголовочные файлы. Вот пример добавленных путей поиска:

${ANDROID_NDK}/platforms/android-16/arch-arm/usr/include
${ANDROID_NDK}/toolchains/arm-linux-androideabi-4.8/prebuilt/windows/lib/gcc/arm-linux-androideabi/4.8/include

При добавлении путей учитывайте API Level целевой системы, для которой будет компилироваться приложение. В этом примере учтен API Level 16 (в составе пути имеется папка android-16).

Если после добавления путей все равно появляются «нераспознанные» символы, щелкните правой кнопкой мыши на имени проекта и выберите в контекстном меню Index -> Reresolve Unresolved Includes. Пункт меню Index -> Search for Unresolved Includes поможет Вам найти заголовочные файлы, которые не может подключить редактор.

Q021. Как управлять фокусом визуальных компонентов GUI?

Я расставил на форме несколько полей ввода, и мне нужно, чтобы определенное из этих полей после запуска программы получало фокус (стало текущим). Как это сделать?

Достаточно вызвать метод requestFocus. Пример куска кода из обработчика создания Activity onCreate:

myEdit1 = (EditText) findViewById(R.id.edit1);
myEdit2 = (EditText) findViewById(R.id.edit2);
myEdit2.requestFocus();

[140221]

Q022. Почему при отладке не срабатывают точки останова?

Breakpoint-ы не действуют потому, что Вы вероятно вместо отладки просто запустили приложение на устройстве, т. е. выполнили Run -> Run (Ctrl+F11). Чтобы точки останова срабатывали и была возможна пошаговая отладка, воспользуйтесь Run -> Debug (F11).

Другие причины проблемы отладки в Eclipse и способы решения:

1. Попробуйте принудительно разрешить отладку добавлением атрибута android:debuggable=»true» в тег < application > файла AndroidManifest.xml. Вообще-то с этой задачей должен автоматически справляться плагин ADT, однако это почему-то не всегда происходит.

2. Проверьте состояние кнопки «Skip all breakpoints» (пропустить все точки останова), которая находится на панели инструментов перспективы Debug (кнопка должна быть отжата). На всякий случай понажимайте на эту кнопку, и убедитесь, что все Ваши точки останова разрешены. Если перспектива Debug не открывается или не работает, то это означает, что Ваше отлаживаемое устройство некорректно подключено. Откройте перспективу DDMS и убедитесь, что Ваше устройство и работающее приложение перечислено в окне Devices, и доступно для отладки.

3. Если Вы пользуетесь для отладки эмулятором (виртуальным устройством, не реальным Android), то проблему старта отладки может вызывать долгий запуск эмулятора (эмулятор для запуска может требовать слишком много ресурсов, что конечно зависит от настроек виртуального устройства). Можно попробовать увеличить таймаут сессии ожидания adb от 3000 до 60000 мс и более.

Q023. Что такое Package name (имя пакета)?

Имя пакета предоставляет уникальный текстовый идентификатор для приложения. Это также имя по умолчанию для процесса приложения (см. манифесте приложения атрибут process элемента < application >) и по умолчанию свойство task affinity для (см. манифесте приложения атрибут taskAffinity элемента < activity >).

Имя пакета для приложения указывается в полном соответствии стилю языка Java, имя должно быть уникальным. Имя может содержать буквы верхнего и нижнего регистра (от ‘A’ до ‘Z’), цифры и подчеркивания (‘_’). Однако индивидуальные части имени пакета должны начинаться с буквы.

Во избежание конфликтов с другими разработчиками Вы должны использовать принцип организации имен наподобие доменного, но с указанием частей имени в обратном порядке. Например, приложения, опубликованные Google, будут иметь имя пакета, начинающееся на com.google. Также не нужно использовать для публикации пространство имен com.example.

Внимание: если Вы опубликовали Ваше приложение, то нельзя менять имя пакета, поскольку оно идентифицирует приложение. Если Вы поменяете имя пакета, то это будет означать, что получится другое приложение, и пользователи предыдущей версии не смогут получить обновление до новой версии.

Q024. Как в Eclipse сделать копию проекта? Как открыть готовый проект?

[Способ 1]

Чтобы сделать копию проекта, сделайте копию его корневой папки (той папки, где находятся файлы AndroidManifest.xml и project.properties), и затем переименуйте её. Копия проекта готова, теперь необходимо импортировать её в дерево проектов Eclipse.

Чтобы открыть копию проекта или любого готового проекта (который скачали из Интернета, к примеру), используйте меню File -> Import, далее выберите General -> Existing Projects into Workspace. Затем кликните Next и выберите корневую папку (root directory) проекта. Нажмите Finish, и через несколько секунд импорт завершится. Все, проект открыт.

[Способ 2]

• В дереве Package Explorer выделите мышью проект, который хотите скопировать (щелчком левой кнопки мыши на корневой папке проекта), нажмите Ctrl+C и Ctrl+V. Появится окно, в котором нужно задать новое имя проекта.

Eclipse-copy-project-set-new-name

После подтверждения нового имени через несколько секунд в дереве проектов появится новый проект — копия имеющегося проекта под новым именем.

• Щелкните правой кнопкой на новой корневой папке проекта, и выберите в контекстном меню Android Tools -> Rename Application Package. Откроется окно, где нужно указать новое имя пакета, укажите имя и нажмите OK. Затем запустится мастер переименования имени пакета в различных исходных файлах проекта, в этом окне просто нажмите Finish.

• В дереве Package Explorer раскройте папку src проекта, щелкните правой кнопкой на имени пакета и выберите в контекстном меню Refactor -> Rename…, укажите новое имя пакета, щелкните OK.

• Выполните очистку проекта, для этого выберите в меню Project -> Clean…

• Если необходимо, то в атрибуте package поменяйте имя пакета приложения (файл AndroidManifest.xml):

< manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.newpackagename"
    android:versionCode="1"
    android:versionName="1.0" >
    
    ...
< /manifest > 

• Если необходимо, то поменяйте имя приложения в файле values/strings.xml, имя приложения задается строкой app_name:

< ?xml version="1.0" encoding="utf-8"? >
< resources >
    < string name="app_name">MyAppName< /string >
    < string name="action_settings">Settings< /string >
    < string name="hello_world">Hello world!< /string >
< /resources >

Q025. Как импортировать в Eclipse проект из Android NDK samples?

Меню File -> New -> Project… -> Android -> Android Project from Existing Code, далее в поле ввода Root Directory выберите папку проекта из каталога NDK samples (например, это может быть папка c:android-ndk-r9csamplesTeapot). Если Вы предварительно сделали копию папки проекта NDK, то ставить галочку Copy projects into workspace необязательно. Нажмите Finish, и через несколько секунд импорт завершится.

[140223]

Q026. Java Build Path: не могу добавить библиотеку .JAR к проекту.

Почему когда я пытаюсь добавить к проекту библиотеку guava-16.0.1.jar, копию файла которой я поместил в каталог libs, то не могу это сделать через стандартный диалог свойств проекта Properties? Захожу в раздел Java Build Path, перехожу на закладку Libraries, жму кнопку Add JARs…, в браузере файла перехожу в папку libs, но почему-то там не виден файл guava-16.0.1.jar (скопированный туда через Проводник).

Причина в том, что среда Eclipse не синхронизировалась с файловой системой, поэтому файл guava-16.0.1.jar не виден. Чтобы исправить это, после копирования файла guava-16.0.1.jar в папку libs поставьте курсор на имя проекта и нажмите F5 (обновить), и только потом заходите в свойства проекта, чтобы добавить guava-16.0.1.jar в Java Build Path.

Если Вы иногда редактируете файлы вне среды Eclipse, то можете установить автообновление (auto-refresh) через меню Window -> Preferences, перейдите в раздел General -> Workspace, и поставьте 2 галочки «Refresh using native hooks or polling» и «Refresh on access».

[140301]

Q027. Android requires compiler compliance level 5.0 or 6.0. Found ‘1.7’ instead. Please use Android Tools > Fix Project Properties

Щелкните правой кнопкой на имени проекта и выберите Android Tools -> Fix Project Properties.

Q028. Type ‘int32_t’ could not be resolved

В том файле, где возникает ошибка добавьте включение заголовочного файла:

Общее правило для поиска заголовочного файла, который нужно подключить: среди заголовочных файлов NDK выбранной платформы (к примеру для платформы API Level 16 это будет папка c:android-ndk-r9cplatformsandroid-16arch-armusr) найдите файл с расширением *.h, где определен нужный тип.

[140302]

Q029. Member declaration not found

У меня эта странная ошибка возникала, если использовался тип возврата функции в виде операции взятия адреса (несмотря на то, что метод класса GraphicsService::getHeight был одинаково объявлен и в заголовке, и в основном модуле), пример:

const int32_t& GraphicsService::getHeight()
{
    return mHeight;
}

Ошибка исчезла, когда переопределил тип возврата метода без &:

const int32_t GraphicsService::getHeight()
{
    return mHeight;
}

Q030. Предупреждение «Not targeting the latest versions of Android…»

Иногда при смене настроек android:targetSdkVersion появляется предупреждение «Not targeting the latest versions of Android; compatibility modes apply. Consider testing and updating this version. Consult the android.os.Build.VERSION_CODES javadoc for details.AndroidManifest.xml /ИмяПроекта line 6 Android Lint Problem».

Предупреждение генерирует система Android Lint. Она сообщает о том, что режим совместимости будет применен к тем функциям, которые возможно стали недоступны в более свежих версиях, чем указано в targetSdkVersion.

Объяснение проблемы следующее: когда Ваше приложение работает на версии Android более свежей, чем задано в Вашем targetSdkVersion, различные режимы совместимости будут выключены. Такое поведение гарантирует, что Ваше приложение будет работать, однако это может выглядеть неуместным. Например, если targetSdkVersion указано меньше 14, то Ваше приложение может получить в интерфейсе пользователя кнопку настройки опций.

Чтобы исправить эту проблему, установите значение targetSdkVersion в самое высокое доступное значение. Затем протестируйте приложение, чтобы убедиться, что все возможности работают корректно. Можно проконсультироваться по теме проблем совместимости и узнать, какие произошли изменения при переходе по версиям по ссылке http://developer.android.com/reference/android/os/Build.VERSION_CODES.html. При исправлении этого предупреждения путем увеличения версии android:maxSdkVersion нужно помнить о том, что если к примеру установлено android:maxSdkVersion=»17″, и пользователь обновил свою систему Android на версию больше, чем 17, то Ваше приложение будет автоматически удалено, потому что оно будет относиться к неподдерживаемой версии.

См. также:

Android Min SDK Version vs. Target SDK Version
Difference between «Build Target SDK» in Eclipse and android:targetSdkVersion in AndroidManifest.xml?

Q031. Type ‘EGL_DEFAULT_DISPLAY’ could not be resolved

Эта ошибка возникает потому, что в Eclipse не задано макроопределение __ ANDROID__, что приводит к не заданному EGLNativeDisplayType в EGL/eglplatform.h, что в результате приводит к ошибке, что не определено EGL_DEFAULT_DISPLAY.

Чтобы исправить ошибку, зайдите в свойства проекта, перейдите в раздел C/C++ General -> Paths and Symbols, и на закладке Symbols кликните на GNU C, затем на кнопке «Add», и введите __ANDROID__ в поле имени «Name». Поставьте галочки «Add to all configurations» и «Add to all languages», и нажмите OK.

Q032. Как определить версию Android SDK, которая установлена на компьютере?

Перейдите в папку, где у Вас установлен Android SDK, открыв путь %ProgramFiles%AndroidAndroid-sdkplatforms (если SDK был установлен вместе с Android Studio, то это может быть путь наподобие %ProgramFiles%Androidandroid-studiosdkplatforms). В папке platforms вы найдете подпапки от android-3 до android-19, это и есть установленные SDK для различных версий платформ Android.

Можно также узнать установленные версии SDK, запустив SDK Manager (см. вопрос Q016). Когда SDK Manager запустится, в разделе Installed packages Вы можете найти информацию об SDK. Кроме того, в среде Eclipse можно открыть окно Help -> Install New Software…, и открыть ссылку What is already installed? в правой нижней части окна. То же самое окно можно открыть через Help -> About Eclipse -> Installation Details.

В проекте Eclipse строка Build.VERSION.RELEASE даст Вам строку, удобочитаемую для пользователя, которая предоставит информацию о версии (например 1.5, 1.6, 2.0), в то время как Build.VERSION.SDK_INT даст числовое значение из Build.VERSION_CODES, которое удобнее использовать программно — например для сравнения версий.

Q033. Ошибка NDKHelper.java: PROPERTY_OUTPUT_FRAMES_PER_BUFFER cannot be resolved or is not a field

Зайдите в свойства проекта, затем в раздел Android, и в окне Project Build Target поставьте галочку на API Level уровня 17 (Android 4.2.2), нажмите OK.

В общем случае все проблемы, связанные с проверкой в условных операторах переменной SDK_INT (или android.os.Build.VERSION.SDK_INT) решаются увеличением версии API Level в свойствах проекта. Причем вовсе необязательно, что программа, скомпилированная на высоком уровне API Level, не будет работать на младших устройствах Android — все зависит от вызовов API, которая делает программа. Для этого программа должна во время выполнения проверять значение текущего API Level, и в соответствии с уровнем API предпринимать нужные действия.

Q034. Error retrieving parent for item: No resource found that matches the given name …

Это ошибка системы Android AAPT. Ошибка исчезнет, если в файле AndroidManifest.xml увеличите значение атрибута android:minSdkVersion.

[140309]

Q035. Как в приложении Eclipse писать и использовать код не на Java, а на C/C++?

NDK -> создание на C библиотеки, размещение в ней функций -> Объявление этих функций (public native …) в классе MyActivity приложения -> Загрузка созданной библиотеки по имени в классе MyActivity (System.loadLibrary(«mylib»)) -> Вызов функций из кода Java.

Подробнее хорошо написано в книге «Android NDK. Разработка приложений под Android на C/C++», автор Сильвен Ретабоуил.

Q036. Ошибка «Cannot run program «ndk-build»: Launching failed»

Как исправить: свойства проекта -> слева выберите раздел C/C++ Build -> на закладке Builder settings введите полный путь до утилиты ndk-build:

${ANDROID_NDK}ndk-build.cmd

Q037. Различные проблемы с запуском javah.exe и методы их решения.

1. Корректно указывайте имя для Activity в командной строке. Имя должно составляться таким образом:
com.имя_проекта_в_нижнем_регистре.имя_Activity, например:

«%JAVA_HOME%binjavah.exe» -classpath binclasses;»%ANDROID_SDK%platformsandroid-16android.jar» -d jni com.myproject.MainActivity

В этом примере MainActivity можно узнать из файла MainActivity.java, который находится в корне проекта. См. в этом файле строку объявления класса Activity наподобие:

public class MainActivity extends Activity

2. В опциях javah.exe все пути с пробелами должны быть указаны в кавычках, например:

«%JAVA_HOME%binjavah.exe» -classpath binclasses;»%ANDROID_SDK%platformsandroid-16android.jar» -d jni com.myproject.MainActivity

В этом примере переменная окружения %ANDROID_SDK% содержит пробелы, поэтому для формирования пути с участием этой переменной нужно использовать двойные кавычки.

3. Ошибка «Error: no classes specified» или «Could not find class file for ‘com.myproject.MainActivity’». Вы не указали в опции -classpath, где находятся классы Вашего приложения. Обычно это папка имя_проектаbinclasses. Вот пример содержимого опции:

«%JAVA_HOME%binjavah.exe» -classpath binclasses -d jni com.myproject.MainActivity

4. Ошибка «Error: cannot access android.app.Activity», «class file for android.app.Activity not found». В пути опции -classpath через точку с запятой нужно добавить путь до файла android.jar, относящегося к целевой платформе, для которой Вы компилируете приложение. Например, если Вы делаете приложение для Android 4.1.2 (API Level 16), то это будет файл %ANDROID_SDK%platformsandroid-16android.jar. Переменная окружения %ANDROID_SDK% указывает на каталог, где находится SDK (к примеру, это может быть папка c:Program FilesAndroidandroid-studiosdk). Вот пример командной строки строки javah.exe с указанием целевого android.jar:

C:Program FilesAndroidworkspaceMyProject>»%JAVA_HOME%binjavah.exe» -verbose -classpath binclasses;»%ANDROID_SDK%platformsandroid-16android.jar» -d jni com.myproject.MainActivity

Q038. Как в Eclipse настроить запуск javah.exe для генерации заголовочного файла моего модуля на C/C++?

Процесс по шагам:

a) Run -> External Tools -> External Tools Configurations…, откроется окно для настройки конфигураций запуска внешнего инструментария компиляции.

b) Слева щелкните на раздел Program, добавьте новую конфигурацию кнопкой New launch configuration. В поле Name укажите любое произвольное имя, например MyProject javah.

c) В поле Location: укажите полный путь для запуска утилиты javah.exe. Не стесняйтесь пользоваться кнопкой Variables…, которая позволяет использовать изначально настроенные переменные. В этом примере используется env_var для распаковки пути до места расположения каталога JDK через переменную окружения JAVA_HOME. Пример пути до javah.exe:
${env_var:JAVA_HOME}binjavah.exe

d) В поле Working Directory: укажите путь до рабочей директории. Обычно это папка bin, расположенная в корневом каталоге проекта. Пример указания рабочего каталога:
${workspace_loc:/MyProject/bin}

e) В поле Arguments: укажите аргументы для запуска утилиты javah.exe. Здесь должны быть указаны опция -classes (пути, где расположены классы проекта), опция -d (задает рабочий каталог), и имя для Activity приложения. Пример указания аргументов javah.exe:
-classpath «${workspace_loc}»/MyProject/bin/classes;»${env_var:ANDROID_SDK}»platformsandroid-16android.jar -d «${workspace_loc:/MyProject/jni}» com.myproject.MainActivity

f) Перейдите на закладку Refresh, поставьте галочку Refresh resources upon completion, выберите радиокнопку Specific resources и через кнопку Specify Resources… укажите на каталог jni, где будет размещаться модуль C/C++, для которого javah.exe должна генерировать заголовок.

Q039. Где меняются настройки, связанные с платформой (API Level) компилируемого приложения?

Настройки меняются во многих местах:

1. Имя проекта -> Properties -> Android -> поставьте галочку на выбранную версию Android (например Android 4.1.2, API Level 16).
2. Имя проекта -> Properties -> C/C++ General -> Paths and Symbols -> Includes -> настройте пути поиска заголовочных файлов Android NDK. Пример настроенных путей для Assembly, GNU C, GNU C++:
${ANDROID_NDK}/toolchains/arm-linux-androideabi-4.8/prebuilt/windows/lib/gcc/arm-linux-androideabi/4.8/include
${ANDROID_NDK}/sources/android/native_app_glue
${ANDROID_NDK}/platforms/android-16/arch-arm/usr/include
3. AndroidManifest.xml -> android:minSdkVersion=»16″, android:targetSdkVersion=»16″. В этом примере настроено использование SDK для API Level 16.

[140315]

Q040. Java: что такое Direct Subclass, Indirect Subclass?

Часто в документации по программированию Android встречаешь списки типа «Known Direct Subclasses», «Known Indirect Subclasses», однако что это на самом деле значит?

Direct Subclass — класс, который является прямым, непосредственным производным от какого-то класса.
Indirect Subclass — класс, который является наследником какого-то класса через цепочку промежуточных наследников.

Например, есть следующая иерархия наследования классов (для Java-класса TextView):

java.lang.Object -> android.view.View -> android.widget.TextView

Здесь класс TextView является прямым наследником (Direct Subclass) от класса View, и непрямым наследником (Indirect Subclass) класса Object.

Q041. Java: как получить размеры экрана устройства Android?

Пример кода (размеры экрана присваиваются переменным width и height):

public class MainActivity extends Activity
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Display display = getWindowManager().getDefaultDisplay();
        Point size = new Point();
        display.getSize(size);
        int width = size.x;
        int height = size.y;
        ... 
    }

Q042. Java: как получить строку String из ресурса R?

Используйте getString(идентификатор_строки). Пример:

Файл XML, сохраненный в res/values/strings.xml:

< ?xml version="1.0" encoding="utf-8"? >
< resources >
    < string name="hello" >Hello!< /string >
< /resources >

Этот XML файл применяется в строке TextView (здесь приведен фрагмент файла activity_main.xml):

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

Вот так приложение может получить строку:

String string = getString(R.string.hello);

Для получения строки можно использовать либо getString(int), либо getText(int). Функция getText(int) возвратит вместе с текстом стили и форматирование, которые применены к строке.

Q043. Java: как добавить к String строку?

. Предположим, есть строка «Это строка 1», как добавить к этой строке другую строку «Это строка 2»?

Для этой цели можно использовать класс StringBuilder. Пример:

StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("Это строка 1"); stringBuilder.append("n"); stringBuilder.append("Это строка 2"); stringBuilder.append("n");
String finalString = stringBuilder.toString();

Кроме StringBuilder можно также использовать StringBuffer. Оба этих класса используют для динамической манипуляции строками. Однако нужно помнить, что StringBuffer является thread-safe (можно безопасно использовать в многопоточной среде), а StringBuilder не thread-safe (можно безопасно использовать только в одном потоке). Поэтому в одном потоке используйте StringBuilder, поскольку он работает быстрее, чем StringBuffer.

Q044. Java: как преобразовать CharSequence в String?

Используйте метод toString, который есть у всех классов (в том числе и у класса CharSequence).

Q045. Java: как программно работать с визуальными компонентами интерфейса приложения? Что означает @+id?

Этот вопрос частично пересекается с вопросом Q042, где рассматривалось получение строки из ресурсов, а также с вопросом Q009, где объяснялось назначение файла класса ресурсов R.

Все ресурсы приложения Android (к ресурсам относятся все визуальные компоненты приложения, кнопки, галочки, слайдеры, метки, строки и т. п.) конфигурируются с помощью файлов XML, которые размещены в папке res (и распределены по подпапкам layout, menu). Из всех файлов XML, где описаны ресурсы, система Eclipse автоматически генерирует файл R, это файл класса ресурсов приложения, при этом каждый ресурс получает уникальный числовой идентификатор id. Получить доступ к ресурсу (запросить значение строки, создать объект класса, который соответствует контролу ресурса) можно с помощью этого id и соответствующих функций, которые принимают id в качестве параметра. Пример получения строки из ресурса уже был рассмотрен в вопросе Q042.

По такому же принципу, как было показано в вопросе Q042, работают со всеми ресурсами: создается объект, который соответствует ресурсу, и уже работают с методами этого объекта.

Теперь по поводу того, что же такое «@+id». С цифровыми идентификаторами, которые присвоены каждому ресурсу в файле R, конечно же работать неудобно. Поэтому каждому цифровому id поставлено в соответствие символическое имя, которое редактируется в свойстве Id, и задается в виде текста «@+id/текстовое_имя_ресурса». Плюсик означает, что должен быть создан новый ID, которому система сама назначит цифровое значение, поставленное в соответствие символическому имени ресурса «текстовое_имя_ресурса» (это соответствие автоматически генерируется и хранится в файле R).

Когда в визуальном редакторе Eclipse редактируют будущий вид приложения, то добавляют туда разные контролы (контролы это кнопки, текстовые метки, галочки и т. п.). После добавления каждого контрола в свойстве Id для удобства задают текстовый идентификатор @+id. Рассмотрим пример программной работы с интерфейсом приложения на метке TextView. Ресурсом TextView (текстовая метка) размещен визуальным редактором на экране разрабатываемого приложения, и в свойстве Id задано имя mylabel, что показано на скриншоте:

Eclipse-visual-edit-activity main-xml

Имя идентификатора, которое через слеш добавляется к @+d, потом попадает в файл activity_main.xml. Для нашего примера с меткой TextView (показан фрагмент файла activity_main.xml):

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

Далее по имени mylabel можно программно работать с контролом TextView:

//Получим размеры экрана устройства Android.
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;
//Загрузим контрол TextView из ресурсов и установим
// его размер во весь экран. 
TextView text = (TextView)findViewById(R.id.mylabel);
text.setWidth(width);
text.setHeight(height);
//Вставка своего текста в TextView
text.setText(R.string.str1);
//Добавление текста к TextView
consoletxtval = text.getText().toString();
StringBuilder stringBuilder = new StringBuilder(consoletxtval);
stringBuilder.append("n");
stringBuilder.append(getString(R.string.str2));
consoletxtval = stringBuilder.toString(); 
text.setText(consoletxtval);

[140323]

Q046. Java: как выводить сообщения в LogCat?

LogCat это системный лог сообщений. Разработчик может выводить туда свои сообщения с помощью статического класса android.util.Log. Сделайте импорт android.util.Log, и далее пользуйтесь его методами без создания экземпляра класса (поскольку класс статический).

LogCat поддерживает разные уровни вывода сообщений:

V — Verbose (подробно, самый низкий приоритет)
D — Debug
I — Info
W — Warning
E — Error
F — Fatal
S — Silent (самый высокий приоритет, на котором ничто никогда не распечатывается)

Благодаря наличию уровней сообщений их можно грубо отфильтровать по уровню. Например, вот так это делается в консоли LogCat в среде Eclipse:

Eclipse-LogCat-select-message-level

Когда Вы запускаете свое приложение в режиме отладки из Eclipse, то Вы можете увидеть множество сообщений, которые появляются в окне консоли LogCat: как сообщения, отправленные Вашим приложением, так и сообщения системы и других приложений, которые работают в этот момент на Вашем устройстве.

Чтобы вывести что-то в лог, сначала определитесь, насколько критичным должно быть выводимое сообщение (должно ли оно быть в категории отладочной информации (d, Debug), или это должно быть просто информационное сообщение (i, Info), или это должно быть предупреждение (w, Warning) или это должно быть сообщение об ошибке (e, Error)? После этого используйте для вывода подходящий метод:

Log.d("myApp", "my debug message");
Log.i("myApp", "my informational message");
Log.w("myApp", "my warning message");
Log.e("myApp", "my error message");

Первый параметр myApp предоставляет текстовую метку, которая позволяет дополнительно отфильтровать сообщения в логе. Это может оказаться полезным, когда сообщений слишком много, и найти нужное сообщение будет проще, если заранее знать её метку. В консоли LogCat Eclipse такой фильтр можно создать кнопкой с зеленым плюсиком «Add new logcat filter».

Примечание: после отладочного запуска приложения в Eclipse один такой фильтр создается автоматически по имени пакета приложения. В этот фильтр попадут сообщения, которые система Android сама сгенерирует в ответ на события, относящиеся к Вашему приложению.

Q047. C/C++: как выводить сообщения в LogCat?

Для native-кода NDK предоставляет библиотеку, аналогичную Java-классу android.util.Log. Чтобы воспользоваться её возможностями, подключите заголовочный файл log.h

#include < android/log.h >

и в файл Android.mk добавьте строку

LOCAL_LDLIBS := -landroid -llog

После этого для вывода в LogCat можете использовать функции __android_log_vprintf и __android_log_printf. Однако эти функции напрямую вызывать достаточно неудобно, поэтому есть смысл создать для них специальный класс Log:

/*
 * Log.hpp
 */
#ifndef LOG_HPP_ #define LOG_HPP_
namespace packt { class Log { public: static void error (const char* pMessage, ...); static void warn (const char* pMessage, ...); static void info (const char* pMessage, ...); static void debug (const char* pMessage, ...); }; }
#ifndef NDEBUG #define packt_Log_debug(...) packt::Log::debug(__VA_ARGS__) #else #define packt_Log_debug(...) #endif
#endif /* LOG_HPP_ */
/*
 * Log.cpp
 */
#include "Log.hpp"
#include < stdarg.h >
#include < android/log.h >
namespace mypack { void Log::info(const char* pMessage, ...) { va_list lVarArgs; va_start (lVarArgs, pMessage); __android_log_vprint(ANDROID_LOG_INFO, "PACKT", pMessage, lVarArgs); __android_log_print(ANDROID_LOG_INFO, "PACKT", "n"); va_end(lVarArgs); }
void Log::error(const char* pMessage, ...) { va_list lVarArgs; va_start(lVarArgs, pMessage); __android_log_vprint(ANDROID_LOG_ERROR, "PACKT", pMessage, lVarArgs); __android_log_print(ANDROID_LOG_ERROR, "PACKT", "n"); va_end(lVarArgs); }
void Log::warn(const char* pMessage, ...) { va_list lVarArgs; va_start(lVarArgs, pMessage); __android_log_vprint(ANDROID_LOG_WARN, "PACKT", pMessage, lVarArgs); __android_log_print(ANDROID_LOG_WARN, "PACKT", "n"); va_end(lVarArgs); }
void Log::debug(const char* pMessage, ...) { va_list lVarArgs; va_start(lVarArgs, pMessage); __android_log_vprint(ANDROID_LOG_DEBUG, "PACKT", pMessage, lVarArgs); __android_log_print(ANDROID_LOG_DEBUG, "PACKT", "n"); va_end(lVarArgs); } }

[140324]

Q048. Как сделать сделать полноэкранное приложение?

Для игр часто нужно создать программу, которая работает в полный экран, даже без отображения заголовка оповещений (notification bar). Есть несколько способов решения этой задачи.

[Программное отображение в полный экран]

Вот код, который позволяет загружать Activity в полный экран.

import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;
public class ActivityName extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // remove title requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.main); } }

[Отображение в полный экран, заданное в AndroidManifest.xml]

< activity android:name=".ActivityName"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
< /activity >

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

Q049. Запуск MediaPlayer для воспроизведения звука приводит к ошибкам «prepareAsync called in state 1», «start called in state 1».

Причина в том, что на момент вызова метода start() экземпляр MediaPlayer еще не готов к воспроизведению. Запускать воспроизведение можно только при полной готовности MediaPlayer.

Отслеживание готовности можно в обработчике события setOnPreparedListener класса MediaPlayer:

   //Объект проигрывателя, который будет проигрывать звук на кнопке.
   MediaPlayer mp = MediaPlayer.create(this, R.raw.girlfart01);
   //Звук будет проигрываться только 1 раз:
   mp.setLooping(false);
   //Установка обработчика события на момент готовности проигрывателя:
   mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener()
   {
      public void onPrepared(MediaPlayer player)
      {
         //При готовности к проигрыванию запуск вывода звука:
         player.start();
      }
   });

Подробнее про воспроизведение звука с помощью MediaPlayer см. статью «MediaPlayer: проигрывание звука».

[140415]

Q050. Как рисовать на экране приложения графику и текст?

Текст и графика рисуются с помощью объектов Canvas и Paint. Пример рисования текста:

Paint paint = new Paint(); 
canvas.drawPaint(paint); 
paint.setColor(Color.BLACK); 
paint.setTextSize(16); 
canvas.drawText("Мой текст", x, y, paint);

Пример рисования линий:

canvas.drawLine(0, 0, 20, 20, paint);
canvas.drawLine(20, 0, 0, 20, paint);

[140418]

Q051. Как вывести многострочный текст с прокруткой?

Для этого можно использовать классы TextView и EditText.

[Использование TextView]

1. Добавьте на форму программы виджет TextView. Это можно сделать в графическом редакторе формы, выбрав виджет в разделе Form widgets. После добавления виджета в файле activity_main.xml добавятся строки:

        < TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

Здесь важно запомнить значение идентификатора виджета android:id (в нашем примере идентификатор textView1), он нам понадобится в дальнейшем для подключения к виджету в программе. Атрибут android:text можно убрать, так как начальный текст нам не нужен.

Чтобы окно с текстом занимало всю доступную область, добавьте также атрибуты:

        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"

2. Добавьте в класс Activity приложения глобальную переменную с типом TextView:

В обработчике onCreate Activity добавьте инициализацию переменной:

txtconsole = (TextView)findViewById(R.id.textView1);

3. Чтобы добавить текст в поле редактирования, вызовите метод append:

txtconsole.append("Это мой текстrn");

В этом примере в конец текста добавлены символы CR и LF, чтобы следующий текст отображался с новой строки. Тест будет добавляться, пока не дойдет до заполнения формы и не будет теряться снизу, чтобы этого не было, нужно добавить вертикальную полосу прокрутки.

4. Чтобы добавить справа вертикальную полосу прокрутки, в секцию TextView файла activity_main.xml добавьте атрибут android:scrollbars=»vertical»:

        < TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:scrollbars="vertical" />

Также добавьте в обработчике onCreate создание пустого метода для прокрутки (без этого полоса прокрутки не появится).

...
txtconsole = (TextView)findViewById(R.id.textView1);
txtconsole.setMovementMethod(new ScrollingMovementMethod());

5. Чтобы было проще добавлять текст в TextView, и сразу его прокручивать в конец при добавлении нового текста, целесообразно написать для этого отдельную процедуру:

private void appendTextAndScroll(String text)
{
   if(txtconsole != null)
   {
      txtconsole.append(text + "n");
      final Layout layout = txtconsole.getLayout();
      if(layout != null)
      {
         int scrollDelta = layout.getLineBottom(txtconsole.getLineCount() - 1) 
                         - txtconsole.getScrollY() - txtconsole.getHeight();
         if(scrollDelta > 0)
            txtconsole.scrollBy(0, scrollDelta);
      }
   }
}

Теперь добавлять текст нужно так:

   appendTextAndScroll("Это мой текст");

[Использование EditText]

1. Добавьте на форму программы виджет Plain Text. Это можно сделать в графическом редакторе формы, выбрав виджет в разделе Text Fields (он помечен меткой abc). После добавления виджета в файле activity_main.xml добавятся строки:

        < EditText
            android:id="@+id/editText1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10" >
        < /EditText >

Здесь важно запомнить значение идентификатора виджета android:id (в нашем примере идентификатор editText1), он нам понадобится в дальнейшем для подключения к виджету в программе.

2. Добавьте в класс Activity приложения глобальную переменную с типом EditText:

В обработчике onCreate Activity добавьте инициализацию переменной:

txtconsole = (EditText)findViewById(R.id.editText1);

3. Чтобы добавить текст в поле редактирования, вызовите метод append:

txtconsole.append("Это мой текстrn");

В этом примере в конец текста добавлены символы CR и LF, чтобы следующий текст отображался с новой строки.

4. Чтобы добавить справа вертикальную полосу прокрутки, в секцию EditText файла activity_main.xml добавьте атрибут android:scrollbars=»vertical»:

        < EditText
            android:id="@+id/editText1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:scrollbars="vertical" >
        < /EditText >

5. Чтобы запретить редактирование текста, добавьте также атрибут android:editable=»false»:

        < EditText
            android:id="@+id/editText1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:scrollbars="vertical"
            android:editable="false" >
        < /EditText >

Чтобы окно с текстом занимало всю доступную область, добавьте также атрибуты:

        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"

[140421]

Q052. Java: как преобразовать число в строку? Строку в число? Число в шестнадцатеричный формат?

[Преобразование числа в строку]

Используйте String.valueOf или Integer.toString, Float.toString и т. п. Примеры:

int intVal=5;
float floatVal=14.76;
//Использование String.valueOf: myTextView.setText(String.valueOf(intVal)); myTextView.append(String.valueOf(floatVal)); //Использование Integer.toString: myTextView.setText(Integer.toString(intVal)); myTextView.append(Float.toString(floatVal));

[Преобразование числа в HEX строку]

int intval = 1234;
String txt = Integer.toHexString(intval);  // в txt получится "4D2"

[Преобразование строки в число]

Используйте метод parseInt, входящий в состав классов Integer, Float и т. п. Пример:

int intVal;
float floatVal;
String stringInt = "5";
String stringFloat = "14.76";
try { intVal = Integer.parseInt(stringInt); floatVal = Float.parseInt(stringFloat); } catch(NumberFormatException nfe) { System.out.println("Ошибка преобразования: " + nfe); }

Q053. Java: как правильно задать байтовый массив?

Старый метод наподобие char txtbuf[80] в Java не работает. Массивы нужно задавать с помощью оператора new:

char txtbuf[] = new char[80];
byte buffer[] = new byte[4];

Q054. Java: куда пропала директива #define?

Директива #define теперь не работает, потому что прекомпилятор как таковой отсутствует. Константы на Java нужно задавать так же, как и обычные переменные, но только с добавлением ключевого слова final (оно означает, что константе можно присвоить значение только 1 раз).

//Стандартный синтаксис #define на языке C/C++:
#define USB_TYPE_VENDOR (0x02 << 5)
#define USB_RECIP_DEVICE 0x00
#define USB_ENDPOINT_IN 0x80
#define USB_ENDPOINT_OUT 0x00
//Те же самые константы на Java нужно задавать так:
public class MainActivity extends Activity
{
   private static final int USB_TYPE_VENDOR  = (0x02 << 5); 
   private static final int USB_RECIP_DEVICE = 0x00;
   private static final int USB_ENDPOINT_IN  = 0x80;
   private static final int USB_ENDPOINT_OUT = 0x00;
   ...

Q055. Eclipse: ошибка «Unable to resolve target»

Такая ошибка может возникнуть после импорта готового проекта в текущий воркспейс. После импорта проекта в Eclipse любые глюки не редкость, так что удивляться не нужно (кстати говоря, многие глюки устраняются просто перезапуском Eclipse).

Когда в свойствах старого проекта (файл project.properties) указан target на версию, которая не поддерживается текущей установкой Eclipse, то попытка очистки (Project -> Clean…) может вызвать такую ошибку. Исправить ошибку можно, если поменять версию target. Там нужно указать число API Level, например:

# Project target.
target=android-19

Q056. Можно ли выводить в TextView форматированный текст (bold, italiс и т. п.)?

В виджете TextView Android есть недокументированная возможность выводить тест в формате HTML, т. е. текст можно делать подчеркнутым, толстым, и даже вставлять в TextView ссылки. Это делается с помощью класса Html и его метода fromHtml. Пример вывода форматированного текста:

String s = "< b >Жирный< /b >, < i >наклонный< /i >, и даже < u >подчеркнутый< /u > текст!"
TextView tv = (TextView)findViewById(R.id.THE_TEXTVIEW_ID);
tv.setText(Html.fromHtml(s));

Такая возможность появилась начиная с Android 2.1, поддерживаются также теги: a href=»/…», b, big, blockquote, br, cite, dfn, div align=»…», em, font size=»…» color=»…» face=»…», h1, h2, h3, h4, h5, h6, i, img src=»/…», p, small, strike, strong, sub, sup, tt, u.

Внимание: если есть необходимость добавления форматированного текста к уже имеющемуся в TextView без потери его форматирования, то необходимо предусмотреть отдельный буфер для текста типа String, и хранить весь форматированный текст именно в этом буфере.

Q057. Java: как удалить все элементы выпадающего списка Spinner?

Удалить все записи из виджета Spinner можно с помощью метода setAdapter, если ему передать аргумент null, пример:

mySpinner.setAdapter(null);

[140428]

Q058. Как вызвать функцию getSystemService из любого класса?

Если вызвать getSystemService из класса, который не связан с GUI приложения Android (т. е. не из класса, который порожден от Activity), то компилятор Java выдаст ошибку «метод не определен». Это происходит потому, что getSystemService связан с классом Context, от которого произведен класс Activity. В произвольном классе, который по умолчанию порожден от класса Object, нет доступа к Context и к его методу getSystemService.

Чтобы иметь возможность вызвать getSystemService из любого класса, нужно передать в него Context. Это можно сделать разными способами — через параметр конструктора, через статическую переменную класса.

[Передача Context через конструктор класса]

public class myClass
{ Context mContext; //Инициализация контекста в конструкторе. public myclass(Context mContext;) { this.mContext = mContext; } public Location getLocation() { //Есть возможность вызвать getSystemService через Context: locationManager = (LocationManager)mContext.getSystemService(context); ... } }
public class MainActivity extends Activity { Button btnCheck; myClass myclass; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
btnCheck = (Button)findViewById(R.id.checkusbdev); //Передача контекста в экземпляр myClass: myclass = new myClass(this); ... } ... }

[Передача Context через статическую переменную класса]

//В класс usbutil будет передаваться Context из класса Activity
public class usbutil
{
   public static MainActivity context = null;
   public static String doReadRawDescriptors(UsbDevice device, int paramidx)
   {
      //Теперь есть возможность вызвать getSystemService через Context:
      UsbManager manager = (UsbManager)context.getSystemService(Context.USB_SERVICE);
      UsbDeviceConnection connection = manager.openDevice(device);
      
      ...
   }
   
   ...
}
public class MainActivity extends Activity
{
   Button btnCheck;
   Spinner spDeviceName;
   
   @Override
   protected void onCreate(Bundle savedInstanceState)
   {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      btnCheck = (Button)findViewById(R.id.checkusbdev);
      ...
      //Передача контекста в класс usbutil:
      usbutil.context = this;
      ...
   }
   
   ...
}

Q059. Eclipse: как заменить форматирование кода с табуляции на пробелы?

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

1. Поменяйте свойства редактора кода Java: меню Window -> Preferences -> Java -> Code Style -> Formatter -> Edit -> Indentation выберите из списка «Spaces Only». Для того, чтобы можно было сохранить настройки, создайте новый профиль, для этого вверху в строке ввода Profile name введите имя нового профиля.

2. Поменяйте свойства редактора по умолчанию: меню Window -> Preferences -> General -> Editors -> Text Editors -> Insert spaces for tabs поставьте галочку.

3. Для уже имеющегося файла Java, в коде которого есть Tab-ы, нужно принудительно поменять все Tab-ы на пробелы. Если этого не сделать, то даже при измененных настройках (на шагах 1, 2) добавление новых строк и операторов будет выполняться все так же с Tab-ами вместо пробелов. Чтобы быстро поменять все Tab на пробелы откройте файл, нажмите Ctrl-A (выделится весь текст) и затем нажмите Ctrl-I (применятся текущие настройки форматирования Ident). Это заменит в тексте все символы табуляции на пробелы. Дальше добавление новых строк, блоков кода будет происходить уже нормально, с пробелами.

См. также How do I change Eclipse to use spaces instead of tabs? site:stackoverflow.com.

Q060. Eclipse: как заменить «египетский» стиль блоков кода на традиционный? Чтобы фигурная скобка открывалась не в конце оператора, а на новой строке?

egyptian

//Есть "египетский", нечитаемый код:
if (myclass.enabled()) {
    myclass.doSomething();
} else {
    myclass.doSleep();
}
//Нужно, чтобы был нормальный: if (myclass.enabled()) { myclass.doSomething(); } else { myclass.doSleep(); }

Для того, чтобы изменить оформление блоков кода, нужно отредактировать шаблоны кода, и создать новый форматер для кода. Как то делается на примере кода Java:

1. Меню Window -> Preferences -> Java -> Editor -> Templates, выберите в таблице нужную строку с шаблоном и нажмите кнопку Edit. Отредактируйте шаблон так, чтобы фигурная скобка появилась на новой строке. Повторите то же самое для всех шаблонов, где встречается блок с фигурными скобками.

2. Создайте новый форматер и примените его. Для этого зайдите в меню Window -> Preferences -> Java -> Code Style -> Formatter. Нажмите кнопку Edit, в строке ввода Profile name введите имя нового профиля (например Normal).

3. На закладке Braces во всех выпадающих списках Brace positions выберите вариант Next line.

4. На закладках New Lines и Control Statements расставьте галочки так, чтобы оформление кода соответствовало Вашим ожиданиям.

Q061. Eclipse: как ставить закладки в коде, и как делать навигацию по закладкам?

Работа с закладками сделана не так удобно, как в Visual Studio, но работать можно.

1. Закладка добавляется через меню View -> Add Bookmark…, в коде при этом на слева от строки, где стоит закладка, прикрепляется синий флажок.
2. Удалить закладку можно через контекстное меню закладки, щелкните правой кнопкой на закладку в коде и выберите Remove Bookmark. Удалять закладки можно также через просмотр закладок (вид Bookmarks).
3. Через консоль просмотра закладок можно делать навигацию по закладкам. Чтобы открыть консоль закладок, войдите в меню Window -> Show View -> Other… -> General -> Bookmarks. В нижней части окна добавится консоль Bookmarks (среди консолей Problems, Javadoc, Declaration, Console, LogCat).
4. Для добавления закладок удобно привязать неиспользуемую горячую клавишу (через меню Windows -> Preferences -> General -> Keys). Я привязал себе для добавления закладок комбинацию Ctrl+B, предварительно отвязав её от действия по умолчанию Build all.

[140430]

Q061. Java: как закодировать дату в формате yymmdd?

Формат предоставления даты в виде YYMMDD (сначала 2 цифры года, потом 2 цифры месяца и 2 цифры дней) удобен для подставления в виде префикса к именам файлов — чтобы файлы были автоматически рассортированы по дате. Но как в Android закодировать дату в текстовое представление YYMMDD?

Оказывается, что это несложно, если использовать класс SimpleDateFormat. Вот пример функции, которая получает текущую дату и форматирует её в виде YYMMDD:

public static String YYMMDD ()
{
   String result = null;
        
   try
   {
      Date currDate = new Date();
      result = new SimpleDateFormat("yyMMdd").format(currDate);            
   }
   catch (Exception e)
   {
      Toast.makeText(context, 
                    "YYMMDD: " + e.toString(),
                    Toast.LENGTH_LONG).show();
   }
   return result;
}

[140502]

Q062. Java: как получить беззнаковое значение байта?

Как известно, в Java не предусмотрено использование чисел без знака. Если Вам нужно сохранить байт на диск как есть, то это не создаст проблему. Однако если нужно интерпретировать значение байта, и производить над ним математические вычисления как с беззнаковым числом, то его нужно перевести в число int с помощью операции AND с числом 0xFF. Пример:

byte bMaxPower = rawDescriptors[DEV_DESCRIPTOR_LEN+indexMaxPower];
int current_ma = 0xFF & bMaxPower;
String txtval = String.valueOf(current_ma*2) + " mA";

[Как это работает]

При преобразовании беззнакового байта в int мы сначала преобразуем в байт в int с получением числа с сохранением знака. Это преобразование происходит с учетом знака, где самый старший значащий бит (Most Significant Bit, MSB) представляет знак, и он будет задублирован в остальных битах полученного целого числа.

byte b = readAByteFromDisk();
int i = (int)b;

Вот что получится, когда преобразуется беззнаковый байт со значением 219:

                               11011011 = unsigned byte 219
                               ^          signed byte -37
                               |_________ Most Significant Bit
                               
    11111111 11111111 11111111 11011011 = signed int -37
    ^
    |____________________________________ расширение числа при создании int

Затем на число int i накладывается маска с побитным оператором AND. Это сбросит все дополнительные биты и знаковое расширение числа, которые появились при преобразовании байта в число int.

    11111111 11111111 11111111 11011011 = signed int -37
    00000000 00000000 00000000 11111111 = Маска 0x000000FF
    00000000 00000000 00000000 11011011 = Результат операции &

Мы использовали шестнадцатеричное число 0x000000FF (в десятичном виде 255) как маску, потому что она оставит младшие 8 числа int, это как раз та часть числа, что нас интересует. Вся функция может быть записана проще и сведена к одному короткому оператору. Значение байта, когда оно используется вместе с оператором &, будет автоматически преобразовано в число int. Шестнадцатеричное значение 0x000000FF может быть записано как 0xFF (дополнительные нули слева добавляются автоматически для дополнения до числа с размером int).

int i = 0xFF & readAByteFromDisk();

[140505]

Q063. Eclipse: новый проект не создается (Unhandled event loop exception)

Симптомы:

1. Создать новый проект «Android Application Project» невозможно, если в процессе создания в мастере установить галочку Create custom launcher icon. При этом не видны зеленые иконки разных размеров в правом окошке Preview. Мастер создания проектов не завершается, в логе выводится ошибка «Unhandled event loop exception». Если принудительно завершить мастер, то Проект не создается полностью. При попытке clean или Build выскакивает ошибка «Errors occurred during the build. Errors running builder ‘Android Resource Manager’ on project ‘USBrelay’. java.lang.NullPointerException».
2. Если снять галочку Create custom launcher icon, то проект создается нормально.
3. Невозможно добавить к проекту иконку запуска launcher icon.
4. Переустановки (Eclipse как отдельно, так и составе ADT Bundle) и обновления не помогают.

Условия воспроизведения ошибки: Host OS: Windows XP SP 2002 SP3 (32-bit), SDK tools version 22.6.3, Eclipse version: 4.3.1.v20130911-1000 из пакета ADT Bundle (Android Developer Tools Build: v22.6.2-1085508), ADT plug-in version: 22.6.2v201403212031-1085508.

Проблема оказалась в версии JDK (Java) 1.7.0_45. На версиях 1.6.0_13 и 1.8.0_05 проблема не наблюдается.

Q064. Eclipse: открытие activity_main.xml приводит к ошибке org.eclipse.swt.SWTException

Полный текст ошибки: An error has occurred. See error log for more details. org.eclipse.swt.SWTException: Widget is disposed.

Устранить ошибку можно перезагрузкой Eclipse, а также запуском из командной строки eclipse -clean.

Q065. Eclipse, Android: почему в onCreate методы getLeft, getTop и т. п. для виджетов возвращают 0?

Причина в том, что обработчике onCreate форма программы еще не отрисована, и координаты виджетов на форме пока неизвестны.

Устранить ошибку можно, если вычислять размеры виджетов и их позицию во время событий, которые возникают после onCreate.

[140507]

Q066. Java: как разделить строку на подстроки по пробелу или другому символу?

String text = "А роза упала на лапу Азора"
String[] separated = CurrentString.split(" ");
separated[0]; // == "А"
separated[1]; // == "роза"
separated[2]; // == "упала"
separated[3]; // == "на"
separated[4]; // == "лапу"
separated[5]; // == "Азора"

Q067. Java: как узнать количество элементов в массиве строк (String [])?

String title = "Введите номер реле";
String[] separated = title.split(" ");
separated.length;    // == 3

Q068. Java: String.format выдает ошибку java.util.UnknownFormatConversionException

Пример кода, который выдает ошибку:

int intVal = 2;
String text;
//Следующая строка даст ошибку UnknownFormatConversionException:
text = String.format("%i", intVal);

Причина тут в недопустимой опции преобразования %i, вместо неё на Java нужно использовать %d:

text = String.format("%d", intVal);  //ОК

Вот таблица поддерживаемых спецификаторов формата:

Преобразование Описание
b,B boolean
h,H hash code
s,S string
c,C character
d decimal integer
o octal integer
x,X hexadecimal integer
e,E floating point in scientific notation
f floating point in decimal notation
g,G floating point in either decimal or scientific notation
a,A hexadecimal floating point
t,T date/time
% percent
n line terminator

Q069. почему строки String не получается сравнивать оператором == ?

А на C# так сравнивать можно, почему на Java это не работает?

Причина в реализации оператора == для строк на Java. На Java оператор == сравнивает ссылки на объекты строк, а не сами строки. Чтобы сравнивать строки на Java, используйте метод equals:

String g1="Male";
String g2="Female";
   
if(gender.equals(g1))
   salutation ="Mr.";
if(gender.equals(g2))
   salutation ="Ms.";

Q070. Java: Integer.getInteger выдает ошибку

Пример кода, который выдает ошибку NullPointerException:

String txtVal = "7";
int relay = Integer.getInteger(txtVal);

Причина в том, что getInteger не делает парсинг строки и преобразование её в целое число (как Вы могли бы предположить по названию метода). Вместо этого getInteger возвращает целочисленное значение системного свойства по указанному имени. Если системное свойство не найдено, или свойство не имеет корректного числового формата, то будет возращен null.

Чтобы получить число из текстового представления, используйте метод Integer.parseInt (см. вопрос Q052).

Q071. Где находятся сохраненные скриншоты на Android?

См. следующие папки:

/storage/sdcard0/ScreenCapture
/storage/sdcard0/Pictures/Screenshots

[140509]

Q072. Как сделать, чтобы оставался запущенным всегда только один экземпляр программы?

Для этого в файле AbdroidManifest.xml для элемента activity можно использовать атрибут android:launchMode, пример:

   ...
  < activity
   android:name="com.usbrelay.MainActivity"
   android:label="@string/app_name"
   android:launchMode="singleTask" >
   ...

Если атрибут launchMode не задан, то по умолчанию используется значение standard.

Когда используется Режим запуска Несколько activity? Комментарий
Обычно используется для запуска большинства activity «standard« Да Значение по умолчанию. Система всегда создает новый экземпляр activity в целевой задаче (target task) и направит к нему intent.
«singleTop« Зависит от условий Если уже существует экземпляр activity поверх целевой задачи (target task), система перенаправит intent к этому экземпляру вызовом метода onNewIntent(), вместо того чтобы создавать новый экземпляр activity.
Специальные запуски (не рекомендуется для обычного использования) «singleTask« Нет Система создает activity в корне новой задачи и перенаправляет к ней intent. Однако, если экземпляр activity уже существует, то система перенаправляет intent к существующему экземпляру вызовом его метода onNewIntent(), вместо того чтобы создавать новый экземпляр.
«singleInstance« Нет То же самое, что и «singleTask", за исключением того, что система не будет запускать любые другие activity в задаче, которая владеет экземпляром уже работающей activity. В этом случае activity всегда одна, и только она может быть членом своей задачи.

Q073. Что такое суперкласс (superclass)? Что такое вызов метода суперкласса?

Суперкласс — это родитель, от которого произошел класс. Т. е. для дочернего класса класс-родитель является суперклассом. Дочерний класс наследует методы суперкласса, и вызов метода класса-родителя называется вызовом метода суперкласса.

Самый распространенный пример — когда при создании проекта программы создается класс активности, порожденный от класса Activity (помните? public class MainActivity extends Activity). Если нужно вызвать метод класса Activity, то в дочернем классе вызов его метода будет называться вызовом метода суперкласса, и должно сопровождаться префиксом super. Пример вызова метода суперкласса onResume в методе класса:

@Override
public void onResume()
{
   super.onResume();
   Intent intent = getIntent();
   String action = intent.getAction();
   textDebug.append("[onResume]: " + action + "n");
   if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action))
   {
      usbdev = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
      if (null != usbdev)
      {
         textDebug.append("USB Attached: " + usbdev +"n");
      }
   }
}

Q074. Почему BroadcastReceiver не отслеживает события подключения устройства USB (ACTION_USB_DEVICE_ATTACHED)? События отключения ACTION_USB_DEVICE_DETACHED при этом отслеживаются нормально.

Это известный баг «Issue 25703: USB host device plugin notification failure», который во многих Android не исправлен. Как его обойти, описано в статье «Определение событий подключения и отключения устройств USB».

Q075. Как подключаться к adb через TCP/IP (например, через WiFi)? Это иногда полезно, когда интерфейс USB занят или отсутствует.

[Подключение вручную, если получены права root на Android]

Вы можете разрешить подключение к Android через WiFi следующими командами (в терминале на самом Android):

su
setprop service.adb.tcp.port 5555
stop adbd
start adbd

Отключить коннект через WiFi и вернуться к подключению adb через USB можно следующими командами:

setprop service.adb.tcp.port -1
stop adbd
start adbd

[Через подключение к компьютеру через USB]

Права root в этом случае необязательны, но в настройках нужно включить режим отладки, и нужно заранее знать IP-адрес подключенного по WiFi устройства Android. Выполните в cmd следующие команды:

adb tcpip 5555
adb connect 192.168.a.b:5555

Здесь 192.168.a.b адрес IP устройства Android. Вы можете определить IP адрес устройства Android двумя способами:

• Вручную, для чего зайдите в настройки WiFi на Android, выберите Advanced и там будет указан IP. Можно также запустить программу наподобие Ftp Сервер., и она покажет IP адрес устройства Android.

Android-FTP-server

• С помощью команды ADB:

adb shell ip -f inet addr show wlan0

Вернуться к подключению ADB через USB можно командой:

[Подключение adb через сеть с помощью специальных программ]

В магазине Google Play есть несколько программ, которые позволяют автоматизировать процесс. Быстрый поиск подскажет такие программы, как adbWireless, WiFi ADB и ADB WiFi. Все эти программы требуют прав root, однако программа adbWireless требует меньше разрешений.

[170219]

Q075. Установили новую версию Java, но все еще запускается старая

Возможные причины проблемы: в папке c:Windows или c:Windowssystem32 находится старая версия. Решение проблемы: зайдите в системные папки Windows (c:Windows, c:Windowssystem32), и удалите оттуда файлы java.exe.

Еще одна причина: работает сервис быстрого запуска Java (Java Quick Starter, исполняемый файл jqs.exe). Решение проблемы: остановите и отключите сервис Java Quick Starter. Если он находится в папке Java старой версии, то удалите папку, где он находится.

Q076. Ошибка … could not open jvm.cfg

Причина ошибки в том, что Вы переключились на другую версию Java, верно настроили пути запуска в переменной окружения Path, удалили каталог со старой версией Java в папке Program Files, но все еще пытается запуститься старая версия, которая почему-то находится в папке c:Windows или c:Windowssystem32. Решение проблемы: зайдите в системные папки Windows (c:Windows, c:Windowssystem32), и удалите оттуда файлы java.exe.

[Ссылки]

1. Что такое API Level?
2. Google USB Driver site:developer.android.com.
3. OEM USB Drivers site:developer.android.com — где найти и как установить драйвер отладки USB именно для Вашего устройства Android.
4. Отладка разрабатываемого приложения Android.
5. Что такое Android rooted device?
6. Android Debug Bridge — что это такое?
7. Словарик Android.

Здесь собраны решения проблем, которые возникают с IDE Eclipse, Android Studio, и другие вопросы программирования под Android. Все непонятные термины и сокращения ищите в статье «Словарик Android» [7].

[131228]

Q001. Что такое API Level, API number (API 3, API4, API 7, и т. д.)?

API переводится как интерфейс программирования, в данном контексте это относится к операционной системе Android, к вызову встроенных в систему подпрограмм и функций. Цифра соответствует определенной версии сборки OS Android, см. таблицу. [1].

Q002. Для чего нужен Google USB Driver?

Google USB Driver относится к набору инструментария для автоматизации тестируемых приложений (программ) на телефон/устройство с операционной системой Android. Нужен только для операционной системы Windows, см. [2, 3, 4].

Q003. Что такое Android WebDriver?

Программное обеспечение, которое позволяет запускать автоматизированные сквозные тесты. Эти тесты помогут убедиться, что ваш сайт работает корректно в браузере Android.

Q004. Что такое Activity?

Это слово в контексте программирования Android можно перевести как «видимая деятельность программы». Это основной компонент приложения (программы) для Android, свойства и методы которого определяют работу (поведение) и внешний вид программы. Каждое отдельное окно приложения представлено отдельным компонентом Activity.

Q005. Что такое Gradle?

Специальный плагин для Android Studio, позволяющий автоматизировать сборку приложений на Java. Именно с ним больше всего головной боли у разработчиков при переходе на разные версии Android Studio и JDK, особенно при импорте Android-приложений, созданных в среде разработки Eclipse.

Q006. Проблема с запуском виртуального устройства при отладке.

Я создал виртуальное устройство (AVD) для эмулятора Android Studio, на котором пытаюсь отладить свою программу. Но почему-то не могу запустить в эмуляторе мою AVD (на экране постоянно висит в центре экрана переливающаяся надпись ANDROID). Когда пытаюсь запустить свою программу, то в логе Atmel Studio вижу сообщение об ошибке «Adb Transfer Protocol Error», «No such file or directory». В чем проблема?

При использовании эмулятора Android Studio нужно иметь в виду, что он чрезвычайно прожорлив в плане расхода памяти и ресурсов процессора компьютера. Так что скорее всего, Вы создали AVD слишком мощное, и поэтому оно запускается в эмуляторе слишком долго. Когда в такой ситуации Вы пытаетесь запустить отладку, то скорее всего получите сообщение наподобие следующего:

Waiting for device.
"C:Program FilesAndroidandroid-studiosdktoolsemulator.exe" -avd AVD-GT-N7000 -netspeed full 
-netdelay none
Device connected: emulator-5554 Device is online: emulator-5554 Target device: AVD-GT-N7000 [emulator-5554] Uploading file local path: C:Documents and SettingsUserAndroidStudioProjectsMyApplicationProjectMyApplication
buildapkMyApplication-debug-unaligned.apk 
remote path: /data/local/tmp/com.example.myapplication
Adb Transfer Protocol Error.
No such file or directory

Это означает, что отлаживаемое приложение не может загрузиться в эмулятор, так как эмулятор еще не запустился. Чтобы решить проблему с отладкой, у Вас есть следующие варианты:

1. Перед запуском отладки нужно дождаться полной загрузки AVD в эмуляторе, и только потом запускать отладку. Наберитесь терпения, первая загрузка новой машины может занимать до 10 минут и более, в зависимости от её свойств и мощности Вашего компьютера. Чтобы ускорить загрузку эмулятора, используйте снапшоты для AVD (при создании AVD поставьте галочку Snapshot).
2. Создать другую AVD, требующую меньше ресурсов (выбрать модель смартфона с меньшим разрешением экрана и с меньшим API level).
3. Запустить отладку на виртуальной машине, см. [4].
4. Установить Google USB Driver и отлаживаться на реальном устройстве с операционной системой Android.

Q007. Случайно закрыт визуальный редактор формы…

Я редактирую разметку окна программы (форму) — файл activity_main.xml, и случайно закрыл окно просмотра внешнего вида формы (окошко, где показано окно моей программы). Как мне снова открыть просмотр формы? Как переключаться между текстовым редактированием формы (как XML-файла) и графическим редактированием (когда можно визуально редактировать форму, мышкой перетаскивать компоненты и менять их свойства)?
Для просмотра редактируемой формы выберите в меню View -> Tool Windows -> Preview. Для переключения между текстовым и визуальным вариантами редактирования формы служат нижние табы окна редактора — Design (визуальное редактирование формы) и Text (редактирование формы как XML-текста).

Q008. Почему не работает просмотр иерархии (Hierarchy View)…

… в программе Android Debug Monitor, когда я подключаюсь через USB (или Wi-Fi) к отлаживаемому устройству?

[2014-01-01 15:59:08 - hierarchyviewer]Unable to get view server version from device 0019a2fe5212ce
[2014-01-01 15:59:08 - hierarchyviewer]Unable to get view server protocol version from device 0019a2fe5212ce
[2014-01-01 15:59:08 - ViewServerDevice]Unable to debug device: samsung-gt_n7000-0019a2fe5212ce
[2014-01-01 15:59:08 - hierarchyviewer]Missing forwarded port for 0019a2fe5212ce
[2014-01-01 15:59:08 - hierarchyviewer]Unable to get the focused window from device 0019a2fe5212ce

Почти никакие телефоны и смартфоны общего производства не позволят HierarchyViewer получать доступ к ним. Обычно специальные телефоны разработчика и эмуляторы оснащены функциями, работающими с HierarchyViewer. Есть обходной способ решения проблемы, если использовать класс ViewServer в разрабатываемом приложении (см. ViewServer Local server for Android’s HierarchyViewer site:github.com).

Q009. Что такое R (R.java)?

R.java — автоматически генерируемый (средой разработки Eclipse) Java-код, который определяет специальный Java-класс ресурсов приложения R. Этот файл пересоздается, когда Вы делаете очистку или компиляцию проекта. В классе R содержатся значения идентификаторов ресурсов, которые были определены в визуальном редакторе или в соответствующем XML-файле ресурсов.

Q010. Как посмотреть последние сообщения ядра (dmesg) …

… при загрузке или установке новых устройств? Другими словами, есть ли на Android аналог dmesg?

На Андроид файл /proc/kmsg является аналогом dmesg в Linux, однако для просмотра файла /proc/kmsg (например, командой cat /proc/kmsg) нужны права root. Есть также файл /proc/last_kmesg, для его просмотра права root не нужны.

Q011. Что такое Android rooted device? Какие преимущества это дает, какие недостатки?

Пользователь root — это специальный аккаунт в UNIX системах (к которым относится также и Android), который позволяет выполнять все операции в системе без ограничений. Пользователь с правами root получает доступ ко всем системным и аппаратным ресурсам и данным, с возможностью их редактирования и удаления. Подробнее см. [5].

[140126]

Q012. Path variable name cannot contain character.

При попытке создать новую переменную окружения проекта (свойства проекта -> Resource -> Linked Resources -> Path Variables -> New…) выдается ошибка, что имя переменной не может содержать недопустимый символ. В данном случае это точка.

Eclipse-project-properties-add-PATH-variable-error

Удалите точку из имени, и переменная создастся нормально.

Q013. LINK : fatal error LNK1104: не удается открыть файл «kernel32.lib».

Проблему можно решить так: C/C++ Build -> Settings -> Linker (link) -> Libraries -> Additional Libpath (/libpath) -> нажать на кнопочку с зеленым плюсиком -> указать папку c:Program FilesMicrosoft Visual Studio .NET 2003Vc7lib.

Или так: C/C++ General -> Paths and Symbols -> Libraries -> Add… -> File system… -> c:Program FilesMicrosoft Visual Studio .NET 2003Vc7libkernel32.lib.

Q014. LINK : fatal error LNK1104: не удается открыть файл «C:Program.obj».

Ошибка скорее всего в том, что в конфигурации проекта добавлен путь до библиотеки, содержащий двойные кавычки, например «c:Program FilesMicrosoft Visual Studio .NET 2003Vc7libkernel32.lib». Пути до линкуемых библиотек настраиваются в свойствах проекта C/C++ Build -> Settings -> Linker (link) -> Libraries -> Additional Libpath (/libpath), C/C++ Build -> Settings -> Linker (link) -> Libraries -> Libraries, C/C++ General -> Paths and Symbols -> Libraries -> Add… -> File system…

Уберите кавычки из пути, и ошибка LNK1104 исчезнет (поменяйте «c:Program FilesMicrosoft Visual Studio .NET 2003Vc7libkernel32.lib» на c:Program FilesMicrosoft Visual Studio .NET 2003Vc7libkernel32.lib).

Q015. «Dx trouble writing output: already prepared».

Не запускается в эмуляторе приложение Android с ошибкой. Пример вывода в консоли сообщений об ошибке:

[2014-01-26 16:14:43 - HelloWorldAndroid] Dx trouble writing output: already prepared
[2014-01-26 16:14:44 - Dex Loader] Unable to execute dex: java.nio.BufferOverflowException.
Check the Eclipse log for stack trace. [2014-01-26 16:14:44 - HelloWorldAndroid] Conversion to Dalvik format failed: Unable to execute
dex: java.nio.BufferOverflowException. Check the Eclipse log for stack trace.

Решение проблемы: закройте Eclipse. Зайдите в каталог Android SDK (c:Program FilesAndroidandroid-studiosdktools), выполните команду android sdk. Запустится SDK Manager. Удалите Android SDK Build-tools 19, и установите Android SDK Build-tools 18.1.1. Снова запустите Eclipse, и выполните отладку в эмуляторе, проблема исчезнет.

Q016. Как запустить SDK Manager на Windows?

Вот возможные способы:

• Из Eclipse (с установленным плагином ADT) выполните команду меню Window -> Android SDK Manager.
• Перейдите в папку tools пакета Android SDK (полный путь может быть наподобие c:Program FilesAndroidandroid-studiosdktools) и выполните команду android.bat sdk.

Android-SDK-Manager

[140204]

Q017. Приложение (файл .apk) не устанавливается …

… с сообщением «Ошибка разбора данных», «Сбой разбора пакета». Команда ant debug install для этого приложения завершается с сообщением [INSTALL_FAILED_OLDER_SDK].

Проверьте, на какой уровень API скомпилировано приложение. Уровень API Android (API Level [1]) на сегодняшний день может меняться от 1 до 19, что соответствует версии Android от Android 1.0 до Android 4.4. Если приложение рассчитано на более современную версию (более высокий уровень API), чем установленная система на Вашем устройстве Android, то программа не установится и не запустится. Версию системы устройства можно узнать через Настройки -> Об устройстве -> Версия Android (версия обычно состоит из нескольких цифр и точек, наподобие 4.1.2). Уровень API, соответствующий версии, можно узнать из таблицы [1].

[140221]

Q018. Добавление обработчика события для визуального компонента.

Я привык, когда двойным кликом на элементе в визуальном редакторе автоматически создается обработчик события для элемента, но в Eclipse этого не происходит. Как добавить обработчик события на визуальном объекте (обработчик события клика на кнопке)? Процесс по шагам на примере кнопки:

1. Откройте визуальный редактор формы Вашего приложения, для чего сделайте двойной щелчок на XML-файле описания внешнего вида интерфейса Вашей программы (этот файл находится в Project Explorer -> Имя проекта -> res -> layout -> activity_blabla.xml). Переключитесь на графический вид просмотра формы (закладка Graphical Layout).

2. В визуальном редакторе бросьте на форму кнопку. Выберите её, и в редакторе свойств Properties дайте более подходящее Id и введите нужный текст, отображаемый на кнопке. К примеру, Id по умолчанию будет @+id/button1, Вы можете задать что-то типа @+id/MyButtonId.

3. Разрешите Вашему классу Activity прослушивать события кликов на визуальных компонентах реализацией OnClickListener. Для этого откройте файл ИмяПроектаActivity.java (Project Explorer -> Имяпроекта -> src -> имяпакета), и расширьте определение класса Activity:

public class MyAppActivity extends Activity implements OnClickListener {
   ..
}

4. В классе Activity задайте глобальную переменную, которая будет олицетворять Вашу кнопку.

public class MyAppActivity extends Activity implements OnClickListener {
   private Button myButton;
   ..
}

Примечание: если система будет ругаться на то, что не может найти определение Button, то перед объявлением класса добавьте строчку:

import android.widget.Button;

5. В коде onCreate класса Activity добавьте инициализацию переменной myButton.

        myButton = (Button) findViewById(R.id.MyButtonId);

Понятно, что в параметре должно быть передано значение, которое Вы назначили в качестве Id кнопки.

6. Сразу после инициализации переменной добавьте создание прослушивателя события клика с помощью вызова setOnClickListener:

        myButton = (Button) findViewById(R.id.MyButtonId);
        myButton.setOnClickListener(this);

По аналогии можно добавить прослушивание и для других кнопок (конечно же, для них должны быть созданы экземпляры переменных, и сделана инициализация):

        myButtonA.setOnClickListener(this);
        myButtonB.setOnClickListener(this);
         ..

7. Теперь нужно создать обработчик события клика onClick на внешнем виде формы (View). Для этого добавьте в класс Activity определение нового метода onClick:

    // Реализация обработчика события для OnClickListner.
    // Функция onClick будет вызываться всякий раз, когда
    // будет сделан клик на интерфейсе программы.
    @Override
    public void onClick(View v) {
        // Параметр v означает вид, на котором сделан клик.
        // Функция getId() возвращает идентификатор этого вида.
        if(v.getId() == R.id.myButtonId)
        {
            // тут код для действий по кнопке myButton;
            ..
        }
        else if(v.getId() == R.id.myButtonIdA)
        {
            // тут код для действий по кнопке myButtonA;
            ..
        }
        // и так далее, для всех визуальных элементов, принимающих клик.
    }

Вот полный пример листинга кода Activity:

package com.myApp;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class FirstActivity extends Activity implements OnClickListener {
   // Декларирование элементов UI.
   private TextView changingTextView;
   private Button firstButton;
   private Button secondButton;
   /** Вызывается, когда activity создается впервые. */
   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main); // Наш единственный дизайн для этого приложения
                                     // размещен в файле main.xml.
      // Инициализация компонентов визуального интерфейса.
      changingTextView = (TextView) findViewById(R.id.changingTextView);
      firstButton = (Button) findViewById(R.id.leftButton);
      // Когда мы создаем кнопку, и нам нужно обрабатывать с нее события,
      // то нужно установить для неё прослушиватель (listener).
      // Вызов в качестве аргумента this означает, что события будут передаваться
      // родительскому экземпляру класса, в данном случае это наша Activity.
      firstButton.setOnClickListener(this);
      secondButton = (Button) findViewById(R.id.rightButton);
      secondButton.setOnClickListener(this);
   }
   // Реализация с OnClickListner: onClick будет вызван всякий раз, когда происходит
   // клик в каком-то месте вида программы.
   @Override
   public void onClick(View v) 
   {  // Параметр v означает вид (визуальный элемент), на котором сделан клик. 
      // Функция getId() возвращает идентификатор этого вида. По его значению
      // можно декодировать, какая кнопка нажата.
      if(v.getId() == R.id.leftButton)
      {
         // setText() устанавливает значение строки в TextView
         changingTextView.setText("Вы кликнули кнопку слева");
      }
      else if(v.getId() == R.id.rightButton)
      {
         changingTextView.setText("Вы кликнули кнопку справа");
      }
   }
}

Q019. Откуда возникают ошибки, связанные с вычислением переменных среды Eclipse …

… наподобие «Specified Java project ‘null’ does not exist.», «Variable references empty selection: ${project_name}»?

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

Q020. Как в Eclibse убрать красные маркеры ошибок из модуля C/C++? Почему при безошибочной компиляции ошибки все равно высвечиваются?

Почему проект Eclipse с native-кодом компилируется нормально, но в редакторе исходный код подсвечен с ошибками (не найдены некоторые заголовочные файлы и стандартные идентификаторы? Когда подключаете внешние файлы в native-коде (заголовки с расширением *.h), то должны делаться доступными определяемые в их теле новые символы. При этом несмотря на то, что компиляция кода проходит нормально, редактор кода все равно новые символы не видит. «Ошибочный» символ подчеркивается красным, и при наведении на него курсора высвечивается хинт, что символ «could not be resolved».

Нераспознанные символы в редакторе кода появляются потому, что плагин CDT не может найти подходящие заголовочные файлы. Чтобы редактор кода нормально видел подключенные символы, необходимо настроить (добавить) пути поиска файлов include в плагине CDT. Откройте свойства проекта, перейдите в раздел C/C++ General -> Path and Symbols -> на закладке Includes добавьте директории, где нужно искать заголовочные файлы. Вот пример добавленных путей поиска:

${ANDROID_NDK}/platforms/android-16/arch-arm/usr/include
${ANDROID_NDK}/toolchains/arm-linux-androideabi-4.8/prebuilt/windows/lib/gcc/arm-linux-androideabi/4.8/include

При добавлении путей учитывайте API Level целевой системы, для которой будет компилироваться приложение. В этом примере учтен API Level 16 (в составе пути имеется папка android-16).

Если после добавления путей все равно появляются «нераспознанные» символы, щелкните правой кнопкой мыши на имени проекта и выберите в контекстном меню Index -> Reresolve Unresolved Includes. Пункт меню Index -> Search for Unresolved Includes поможет Вам найти заголовочные файлы, которые не может подключить редактор.

Q021. Как управлять фокусом визуальных компонентов GUI?

Я расставил на форме несколько полей ввода, и мне нужно, чтобы определенное из этих полей после запуска программы получало фокус (стало текущим). Как это сделать?

Достаточно вызвать метод requestFocus. Пример куска кода из обработчика создания Activity onCreate:

myEdit1 = (EditText) findViewById(R.id.edit1);
myEdit2 = (EditText) findViewById(R.id.edit2);
myEdit2.requestFocus();

[140221]

Q022. Почему при отладке не срабатывают точки останова?

Breakpoint-ы не действуют потому, что Вы вероятно вместо отладки просто запустили приложение на устройстве, т. е. выполнили Run -> Run (Ctrl+F11). Чтобы точки останова срабатывали и была возможна пошаговая отладка, воспользуйтесь Run -> Debug (F11).

Другие причины проблемы отладки в Eclipse и способы решения:

1. Попробуйте принудительно разрешить отладку добавлением атрибута android:debuggable=»true» в тег < application > файла AndroidManifest.xml. Вообще-то с этой задачей должен автоматически справляться плагин ADT, однако это почему-то не всегда происходит.

2. Проверьте состояние кнопки «Skip all breakpoints» (пропустить все точки останова), которая находится на панели инструментов перспективы Debug (кнопка должна быть отжата). На всякий случай понажимайте на эту кнопку, и убедитесь, что все Ваши точки останова разрешены. Если перспектива Debug не открывается или не работает, то это означает, что Ваше отлаживаемое устройство некорректно подключено. Откройте перспективу DDMS и убедитесь, что Ваше устройство и работающее приложение перечислено в окне Devices, и доступно для отладки.

3. Если Вы пользуетесь для отладки эмулятором (виртуальным устройством, не реальным Android), то проблему старта отладки может вызывать долгий запуск эмулятора (эмулятор для запуска может требовать слишком много ресурсов, что конечно зависит от настроек виртуального устройства). Можно попробовать увеличить таймаут сессии ожидания adb от 3000 до 60000 мс и более.

Q023. Что такое Package name (имя пакета)?

Имя пакета предоставляет уникальный текстовый идентификатор для приложения. Это также имя по умолчанию для процесса приложения (см. манифесте приложения атрибут process элемента < application >) и по умолчанию свойство task affinity для (см. манифесте приложения атрибут taskAffinity элемента < activity >).

Имя пакета для приложения указывается в полном соответствии стилю языка Java, имя должно быть уникальным. Имя может содержать буквы верхнего и нижнего регистра (от ‘A’ до ‘Z’), цифры и подчеркивания (‘_’). Однако индивидуальные части имени пакета должны начинаться с буквы.

Во избежание конфликтов с другими разработчиками Вы должны использовать принцип организации имен наподобие доменного, но с указанием частей имени в обратном порядке. Например, приложения, опубликованные Google, будут иметь имя пакета, начинающееся на com.google. Также не нужно использовать для публикации пространство имен com.example.

Внимание: если Вы опубликовали Ваше приложение, то нельзя менять имя пакета, поскольку оно идентифицирует приложение. Если Вы поменяете имя пакета, то это будет означать, что получится другое приложение, и пользователи предыдущей версии не смогут получить обновление до новой версии.

Q024. Как в Eclipse сделать копию проекта? Как открыть готовый проект?

[Способ 1]

Чтобы сделать копию проекта, сделайте копию его корневой папки (той папки, где находятся файлы AndroidManifest.xml и project.properties), и затем переименуйте её. Копия проекта готова, теперь необходимо импортировать её в дерево проектов Eclipse.

Чтобы открыть копию проекта или любого готового проекта (который скачали из Интернета, к примеру), используйте меню File -> Import, далее выберите General -> Existing Projects into Workspace. Затем кликните Next и выберите корневую папку (root directory) проекта. Нажмите Finish, и через несколько секунд импорт завершится. Все, проект открыт.

[Способ 2]

• В дереве Package Explorer выделите мышью проект, который хотите скопировать (щелчком левой кнопки мыши на корневой папке проекта), нажмите Ctrl+C и Ctrl+V. Появится окно, в котором нужно задать новое имя проекта.

Eclipse-copy-project-set-new-name

После подтверждения нового имени через несколько секунд в дереве проектов появится новый проект — копия имеющегося проекта под новым именем.

• Щелкните правой кнопкой на новой корневой папке проекта, и выберите в контекстном меню Android Tools -> Rename Application Package. Откроется окно, где нужно указать новое имя пакета, укажите имя и нажмите OK. Затем запустится мастер переименования имени пакета в различных исходных файлах проекта, в этом окне просто нажмите Finish.

• В дереве Package Explorer раскройте папку src проекта, щелкните правой кнопкой на имени пакета и выберите в контекстном меню Refactor -> Rename…, укажите новое имя пакета, щелкните OK.

• Выполните очистку проекта, для этого выберите в меню Project -> Clean…

• Если необходимо, то в атрибуте package поменяйте имя пакета приложения (файл AndroidManifest.xml):

< manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.newpackagename"
    android:versionCode="1"
    android:versionName="1.0" >
    
    ...
< /manifest > 

• Если необходимо, то поменяйте имя приложения в файле values/strings.xml, имя приложения задается строкой app_name:

< ?xml version="1.0" encoding="utf-8"? >
< resources >
    < string name="app_name">MyAppName< /string >
    < string name="action_settings">Settings< /string >
    < string name="hello_world">Hello world!< /string >
< /resources >

Q025. Как импортировать в Eclipse проект из Android NDK samples?

Меню File -> New -> Project… -> Android -> Android Project from Existing Code, далее в поле ввода Root Directory выберите папку проекта из каталога NDK samples (например, это может быть папка c:android-ndk-r9csamplesTeapot). Если Вы предварительно сделали копию папки проекта NDK, то ставить галочку Copy projects into workspace необязательно. Нажмите Finish, и через несколько секунд импорт завершится.

[140223]

Q026. Java Build Path: не могу добавить библиотеку .JAR к проекту.

Почему когда я пытаюсь добавить к проекту библиотеку guava-16.0.1.jar, копию файла которой я поместил в каталог libs, то не могу это сделать через стандартный диалог свойств проекта Properties? Захожу в раздел Java Build Path, перехожу на закладку Libraries, жму кнопку Add JARs…, в браузере файла перехожу в папку libs, но почему-то там не виден файл guava-16.0.1.jar (скопированный туда через Проводник).

Причина в том, что среда Eclipse не синхронизировалась с файловой системой, поэтому файл guava-16.0.1.jar не виден. Чтобы исправить это, после копирования файла guava-16.0.1.jar в папку libs поставьте курсор на имя проекта и нажмите F5 (обновить), и только потом заходите в свойства проекта, чтобы добавить guava-16.0.1.jar в Java Build Path.

Если Вы иногда редактируете файлы вне среды Eclipse, то можете установить автообновление (auto-refresh) через меню Window -> Preferences, перейдите в раздел General -> Workspace, и поставьте 2 галочки «Refresh using native hooks or polling» и «Refresh on access».

[140301]

Q027. Android requires compiler compliance level 5.0 or 6.0. Found ‘1.7’ instead. Please use Android Tools > Fix Project Properties

Щелкните правой кнопкой на имени проекта и выберите Android Tools -> Fix Project Properties.

Q028. Type ‘int32_t’ could not be resolved

В том файле, где возникает ошибка добавьте включение заголовочного файла:

Общее правило для поиска заголовочного файла, который нужно подключить: среди заголовочных файлов NDK выбранной платформы (к примеру для платформы API Level 16 это будет папка c:android-ndk-r9cplatformsandroid-16arch-armusr) найдите файл с расширением *.h, где определен нужный тип.

[140302]

Q029. Member declaration not found

У меня эта странная ошибка возникала, если использовался тип возврата функции в виде операции взятия адреса (несмотря на то, что метод класса GraphicsService::getHeight был одинаково объявлен и в заголовке, и в основном модуле), пример:

const int32_t& GraphicsService::getHeight()
{
    return mHeight;
}

Ошибка исчезла, когда переопределил тип возврата метода без &:

const int32_t GraphicsService::getHeight()
{
    return mHeight;
}

Q030. Предупреждение «Not targeting the latest versions of Android…»

Иногда при смене настроек android:targetSdkVersion появляется предупреждение «Not targeting the latest versions of Android; compatibility modes apply. Consider testing and updating this version. Consult the android.os.Build.VERSION_CODES javadoc for details.AndroidManifest.xml /ИмяПроекта line 6 Android Lint Problem».

Предупреждение генерирует система Android Lint. Она сообщает о том, что режим совместимости будет применен к тем функциям, которые возможно стали недоступны в более свежих версиях, чем указано в targetSdkVersion.

Объяснение проблемы следующее: когда Ваше приложение работает на версии Android более свежей, чем задано в Вашем targetSdkVersion, различные режимы совместимости будут выключены. Такое поведение гарантирует, что Ваше приложение будет работать, однако это может выглядеть неуместным. Например, если targetSdkVersion указано меньше 14, то Ваше приложение может получить в интерфейсе пользователя кнопку настройки опций.

Чтобы исправить эту проблему, установите значение targetSdkVersion в самое высокое доступное значение. Затем протестируйте приложение, чтобы убедиться, что все возможности работают корректно. Можно проконсультироваться по теме проблем совместимости и узнать, какие произошли изменения при переходе по версиям по ссылке http://developer.android.com/reference/android/os/Build.VERSION_CODES.html. При исправлении этого предупреждения путем увеличения версии android:maxSdkVersion нужно помнить о том, что если к примеру установлено android:maxSdkVersion=»17″, и пользователь обновил свою систему Android на версию больше, чем 17, то Ваше приложение будет автоматически удалено, потому что оно будет относиться к неподдерживаемой версии.

См. также:

Android Min SDK Version vs. Target SDK Version
Difference between «Build Target SDK» in Eclipse and android:targetSdkVersion in AndroidManifest.xml?

Q031. Type ‘EGL_DEFAULT_DISPLAY’ could not be resolved

Эта ошибка возникает потому, что в Eclipse не задано макроопределение __ ANDROID__, что приводит к не заданному EGLNativeDisplayType в EGL/eglplatform.h, что в результате приводит к ошибке, что не определено EGL_DEFAULT_DISPLAY.

Чтобы исправить ошибку, зайдите в свойства проекта, перейдите в раздел C/C++ General -> Paths and Symbols, и на закладке Symbols кликните на GNU C, затем на кнопке «Add», и введите __ANDROID__ в поле имени «Name». Поставьте галочки «Add to all configurations» и «Add to all languages», и нажмите OK.

Q032. Как определить версию Android SDK, которая установлена на компьютере?

Перейдите в папку, где у Вас установлен Android SDK, открыв путь %ProgramFiles%AndroidAndroid-sdkplatforms (если SDK был установлен вместе с Android Studio, то это может быть путь наподобие %ProgramFiles%Androidandroid-studiosdkplatforms). В папке platforms вы найдете подпапки от android-3 до android-19, это и есть установленные SDK для различных версий платформ Android.

Можно также узнать установленные версии SDK, запустив SDK Manager (см. вопрос Q016). Когда SDK Manager запустится, в разделе Installed packages Вы можете найти информацию об SDK. Кроме того, в среде Eclipse можно открыть окно Help -> Install New Software…, и открыть ссылку What is already installed? в правой нижней части окна. То же самое окно можно открыть через Help -> About Eclipse -> Installation Details.

В проекте Eclipse строка Build.VERSION.RELEASE даст Вам строку, удобочитаемую для пользователя, которая предоставит информацию о версии (например 1.5, 1.6, 2.0), в то время как Build.VERSION.SDK_INT даст числовое значение из Build.VERSION_CODES, которое удобнее использовать программно — например для сравнения версий.

Q033. Ошибка NDKHelper.java: PROPERTY_OUTPUT_FRAMES_PER_BUFFER cannot be resolved or is not a field

Зайдите в свойства проекта, затем в раздел Android, и в окне Project Build Target поставьте галочку на API Level уровня 17 (Android 4.2.2), нажмите OK.

В общем случае все проблемы, связанные с проверкой в условных операторах переменной SDK_INT (или android.os.Build.VERSION.SDK_INT) решаются увеличением версии API Level в свойствах проекта. Причем вовсе необязательно, что программа, скомпилированная на высоком уровне API Level, не будет работать на младших устройствах Android — все зависит от вызовов API, которая делает программа. Для этого программа должна во время выполнения проверять значение текущего API Level, и в соответствии с уровнем API предпринимать нужные действия.

Q034. Error retrieving parent for item: No resource found that matches the given name …

Это ошибка системы Android AAPT. Ошибка исчезнет, если в файле AndroidManifest.xml увеличите значение атрибута android:minSdkVersion.

[140309]

Q035. Как в приложении Eclipse писать и использовать код не на Java, а на C/C++?

NDK -> создание на C библиотеки, размещение в ней функций -> Объявление этих функций (public native …) в классе MyActivity приложения -> Загрузка созданной библиотеки по имени в классе MyActivity (System.loadLibrary(«mylib»)) -> Вызов функций из кода Java.

Подробнее хорошо написано в книге «Android NDK. Разработка приложений под Android на C/C++», автор Сильвен Ретабоуил.

Q036. Ошибка «Cannot run program «ndk-build»: Launching failed»

Как исправить: свойства проекта -> слева выберите раздел C/C++ Build -> на закладке Builder settings введите полный путь до утилиты ndk-build:

${ANDROID_NDK}ndk-build.cmd

Q037. Различные проблемы с запуском javah.exe и методы их решения.

1. Корректно указывайте имя для Activity в командной строке. Имя должно составляться таким образом:
com.имя_проекта_в_нижнем_регистре.имя_Activity, например:

«%JAVA_HOME%binjavah.exe» -classpath binclasses;»%ANDROID_SDK%platformsandroid-16android.jar» -d jni com.myproject.MainActivity

В этом примере MainActivity можно узнать из файла MainActivity.java, который находится в корне проекта. См. в этом файле строку объявления класса Activity наподобие:

public class MainActivity extends Activity

2. В опциях javah.exe все пути с пробелами должны быть указаны в кавычках, например:

«%JAVA_HOME%binjavah.exe» -classpath binclasses;»%ANDROID_SDK%platformsandroid-16android.jar» -d jni com.myproject.MainActivity

В этом примере переменная окружения %ANDROID_SDK% содержит пробелы, поэтому для формирования пути с участием этой переменной нужно использовать двойные кавычки.

3. Ошибка «Error: no classes specified» или «Could not find class file for ‘com.myproject.MainActivity’». Вы не указали в опции -classpath, где находятся классы Вашего приложения. Обычно это папка имя_проектаbinclasses. Вот пример содержимого опции:

«%JAVA_HOME%binjavah.exe» -classpath binclasses -d jni com.myproject.MainActivity

4. Ошибка «Error: cannot access android.app.Activity», «class file for android.app.Activity not found». В пути опции -classpath через точку с запятой нужно добавить путь до файла android.jar, относящегося к целевой платформе, для которой Вы компилируете приложение. Например, если Вы делаете приложение для Android 4.1.2 (API Level 16), то это будет файл %ANDROID_SDK%platformsandroid-16android.jar. Переменная окружения %ANDROID_SDK% указывает на каталог, где находится SDK (к примеру, это может быть папка c:Program FilesAndroidandroid-studiosdk). Вот пример командной строки строки javah.exe с указанием целевого android.jar:

C:Program FilesAndroidworkspaceMyProject>»%JAVA_HOME%binjavah.exe» -verbose -classpath binclasses;»%ANDROID_SDK%platformsandroid-16android.jar» -d jni com.myproject.MainActivity

Q038. Как в Eclipse настроить запуск javah.exe для генерации заголовочного файла моего модуля на C/C++?

Процесс по шагам:

a) Run -> External Tools -> External Tools Configurations…, откроется окно для настройки конфигураций запуска внешнего инструментария компиляции.

b) Слева щелкните на раздел Program, добавьте новую конфигурацию кнопкой New launch configuration. В поле Name укажите любое произвольное имя, например MyProject javah.

c) В поле Location: укажите полный путь для запуска утилиты javah.exe. Не стесняйтесь пользоваться кнопкой Variables…, которая позволяет использовать изначально настроенные переменные. В этом примере используется env_var для распаковки пути до места расположения каталога JDK через переменную окружения JAVA_HOME. Пример пути до javah.exe:
${env_var:JAVA_HOME}binjavah.exe

d) В поле Working Directory: укажите путь до рабочей директории. Обычно это папка bin, расположенная в корневом каталоге проекта. Пример указания рабочего каталога:
${workspace_loc:/MyProject/bin}

e) В поле Arguments: укажите аргументы для запуска утилиты javah.exe. Здесь должны быть указаны опция -classes (пути, где расположены классы проекта), опция -d (задает рабочий каталог), и имя для Activity приложения. Пример указания аргументов javah.exe:
-classpath «${workspace_loc}»/MyProject/bin/classes;»${env_var:ANDROID_SDK}»platformsandroid-16android.jar -d «${workspace_loc:/MyProject/jni}» com.myproject.MainActivity

f) Перейдите на закладку Refresh, поставьте галочку Refresh resources upon completion, выберите радиокнопку Specific resources и через кнопку Specify Resources… укажите на каталог jni, где будет размещаться модуль C/C++, для которого javah.exe должна генерировать заголовок.

Q039. Где меняются настройки, связанные с платформой (API Level) компилируемого приложения?

Настройки меняются во многих местах:

1. Имя проекта -> Properties -> Android -> поставьте галочку на выбранную версию Android (например Android 4.1.2, API Level 16).
2. Имя проекта -> Properties -> C/C++ General -> Paths and Symbols -> Includes -> настройте пути поиска заголовочных файлов Android NDK. Пример настроенных путей для Assembly, GNU C, GNU C++:
${ANDROID_NDK}/toolchains/arm-linux-androideabi-4.8/prebuilt/windows/lib/gcc/arm-linux-androideabi/4.8/include
${ANDROID_NDK}/sources/android/native_app_glue
${ANDROID_NDK}/platforms/android-16/arch-arm/usr/include
3. AndroidManifest.xml -> android:minSdkVersion=»16″, android:targetSdkVersion=»16″. В этом примере настроено использование SDK для API Level 16.

[140315]

Q040. Java: что такое Direct Subclass, Indirect Subclass?

Часто в документации по программированию Android встречаешь списки типа «Known Direct Subclasses», «Known Indirect Subclasses», однако что это на самом деле значит?

Direct Subclass — класс, который является прямым, непосредственным производным от какого-то класса.
Indirect Subclass — класс, который является наследником какого-то класса через цепочку промежуточных наследников.

Например, есть следующая иерархия наследования классов (для Java-класса TextView):

java.lang.Object -> android.view.View -> android.widget.TextView

Здесь класс TextView является прямым наследником (Direct Subclass) от класса View, и непрямым наследником (Indirect Subclass) класса Object.

Q041. Java: как получить размеры экрана устройства Android?

Пример кода (размеры экрана присваиваются переменным width и height):

public class MainActivity extends Activity
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Display display = getWindowManager().getDefaultDisplay();
        Point size = new Point();
        display.getSize(size);
        int width = size.x;
        int height = size.y;
        ... 
    }

Q042. Java: как получить строку String из ресурса R?

Используйте getString(идентификатор_строки). Пример:

Файл XML, сохраненный в res/values/strings.xml:

< ?xml version="1.0" encoding="utf-8"? >
< resources >
    < string name="hello" >Hello!< /string >
< /resources >

Этот XML файл применяется в строке TextView (здесь приведен фрагмент файла activity_main.xml):

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

Вот так приложение может получить строку:

String string = getString(R.string.hello);

Для получения строки можно использовать либо getString(int), либо getText(int). Функция getText(int) возвратит вместе с текстом стили и форматирование, которые применены к строке.

Q043. Java: как добавить к String строку?

. Предположим, есть строка «Это строка 1», как добавить к этой строке другую строку «Это строка 2»?

Для этой цели можно использовать класс StringBuilder. Пример:

StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("Это строка 1"); stringBuilder.append("n"); stringBuilder.append("Это строка 2"); stringBuilder.append("n");
String finalString = stringBuilder.toString();

Кроме StringBuilder можно также использовать StringBuffer. Оба этих класса используют для динамической манипуляции строками. Однако нужно помнить, что StringBuffer является thread-safe (можно безопасно использовать в многопоточной среде), а StringBuilder не thread-safe (можно безопасно использовать только в одном потоке). Поэтому в одном потоке используйте StringBuilder, поскольку он работает быстрее, чем StringBuffer.

Q044. Java: как преобразовать CharSequence в String?

Используйте метод toString, который есть у всех классов (в том числе и у класса CharSequence).

Q045. Java: как программно работать с визуальными компонентами интерфейса приложения? Что означает @+id?

Этот вопрос частично пересекается с вопросом Q042, где рассматривалось получение строки из ресурсов, а также с вопросом Q009, где объяснялось назначение файла класса ресурсов R.

Все ресурсы приложения Android (к ресурсам относятся все визуальные компоненты приложения, кнопки, галочки, слайдеры, метки, строки и т. п.) конфигурируются с помощью файлов XML, которые размещены в папке res (и распределены по подпапкам layout, menu). Из всех файлов XML, где описаны ресурсы, система Eclipse автоматически генерирует файл R, это файл класса ресурсов приложения, при этом каждый ресурс получает уникальный числовой идентификатор id. Получить доступ к ресурсу (запросить значение строки, создать объект класса, который соответствует контролу ресурса) можно с помощью этого id и соответствующих функций, которые принимают id в качестве параметра. Пример получения строки из ресурса уже был рассмотрен в вопросе Q042.

По такому же принципу, как было показано в вопросе Q042, работают со всеми ресурсами: создается объект, который соответствует ресурсу, и уже работают с методами этого объекта.

Теперь по поводу того, что же такое «@+id». С цифровыми идентификаторами, которые присвоены каждому ресурсу в файле R, конечно же работать неудобно. Поэтому каждому цифровому id поставлено в соответствие символическое имя, которое редактируется в свойстве Id, и задается в виде текста «@+id/текстовое_имя_ресурса». Плюсик означает, что должен быть создан новый ID, которому система сама назначит цифровое значение, поставленное в соответствие символическому имени ресурса «текстовое_имя_ресурса» (это соответствие автоматически генерируется и хранится в файле R).

Когда в визуальном редакторе Eclipse редактируют будущий вид приложения, то добавляют туда разные контролы (контролы это кнопки, текстовые метки, галочки и т. п.). После добавления каждого контрола в свойстве Id для удобства задают текстовый идентификатор @+id. Рассмотрим пример программной работы с интерфейсом приложения на метке TextView. Ресурсом TextView (текстовая метка) размещен визуальным редактором на экране разрабатываемого приложения, и в свойстве Id задано имя mylabel, что показано на скриншоте:

Eclipse-visual-edit-activity main-xml

Имя идентификатора, которое через слеш добавляется к @+d, потом попадает в файл activity_main.xml. Для нашего примера с меткой TextView (показан фрагмент файла activity_main.xml):

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

Далее по имени mylabel можно программно работать с контролом TextView:

//Получим размеры экрана устройства Android.
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;
//Загрузим контрол TextView из ресурсов и установим
// его размер во весь экран. 
TextView text = (TextView)findViewById(R.id.mylabel);
text.setWidth(width);
text.setHeight(height);
//Вставка своего текста в TextView
text.setText(R.string.str1);
//Добавление текста к TextView
consoletxtval = text.getText().toString();
StringBuilder stringBuilder = new StringBuilder(consoletxtval);
stringBuilder.append("n");
stringBuilder.append(getString(R.string.str2));
consoletxtval = stringBuilder.toString(); 
text.setText(consoletxtval);

[140323]

Q046. Java: как выводить сообщения в LogCat?

LogCat это системный лог сообщений. Разработчик может выводить туда свои сообщения с помощью статического класса android.util.Log. Сделайте импорт android.util.Log, и далее пользуйтесь его методами без создания экземпляра класса (поскольку класс статический).

LogCat поддерживает разные уровни вывода сообщений:

V — Verbose (подробно, самый низкий приоритет)
D — Debug
I — Info
W — Warning
E — Error
F — Fatal
S — Silent (самый высокий приоритет, на котором ничто никогда не распечатывается)

Благодаря наличию уровней сообщений их можно грубо отфильтровать по уровню. Например, вот так это делается в консоли LogCat в среде Eclipse:

Eclipse-LogCat-select-message-level

Когда Вы запускаете свое приложение в режиме отладки из Eclipse, то Вы можете увидеть множество сообщений, которые появляются в окне консоли LogCat: как сообщения, отправленные Вашим приложением, так и сообщения системы и других приложений, которые работают в этот момент на Вашем устройстве.

Чтобы вывести что-то в лог, сначала определитесь, насколько критичным должно быть выводимое сообщение (должно ли оно быть в категории отладочной информации (d, Debug), или это должно быть просто информационное сообщение (i, Info), или это должно быть предупреждение (w, Warning) или это должно быть сообщение об ошибке (e, Error)? После этого используйте для вывода подходящий метод:

Log.d("myApp", "my debug message");
Log.i("myApp", "my informational message");
Log.w("myApp", "my warning message");
Log.e("myApp", "my error message");

Первый параметр myApp предоставляет текстовую метку, которая позволяет дополнительно отфильтровать сообщения в логе. Это может оказаться полезным, когда сообщений слишком много, и найти нужное сообщение будет проще, если заранее знать её метку. В консоли LogCat Eclipse такой фильтр можно создать кнопкой с зеленым плюсиком «Add new logcat filter».

Примечание: после отладочного запуска приложения в Eclipse один такой фильтр создается автоматически по имени пакета приложения. В этот фильтр попадут сообщения, которые система Android сама сгенерирует в ответ на события, относящиеся к Вашему приложению.

Q047. C/C++: как выводить сообщения в LogCat?

Для native-кода NDK предоставляет библиотеку, аналогичную Java-классу android.util.Log. Чтобы воспользоваться её возможностями, подключите заголовочный файл log.h

#include < android/log.h >

и в файл Android.mk добавьте строку

LOCAL_LDLIBS := -landroid -llog

После этого для вывода в LogCat можете использовать функции __android_log_vprintf и __android_log_printf. Однако эти функции напрямую вызывать достаточно неудобно, поэтому есть смысл создать для них специальный класс Log:

/*
 * Log.hpp
 */
#ifndef LOG_HPP_ #define LOG_HPP_
namespace packt { class Log { public: static void error (const char* pMessage, ...); static void warn (const char* pMessage, ...); static void info (const char* pMessage, ...); static void debug (const char* pMessage, ...); }; }
#ifndef NDEBUG #define packt_Log_debug(...) packt::Log::debug(__VA_ARGS__) #else #define packt_Log_debug(...) #endif
#endif /* LOG_HPP_ */
/*
 * Log.cpp
 */
#include "Log.hpp"
#include < stdarg.h >
#include < android/log.h >
namespace mypack { void Log::info(const char* pMessage, ...) { va_list lVarArgs; va_start (lVarArgs, pMessage); __android_log_vprint(ANDROID_LOG_INFO, "PACKT", pMessage, lVarArgs); __android_log_print(ANDROID_LOG_INFO, "PACKT", "n"); va_end(lVarArgs); }
void Log::error(const char* pMessage, ...) { va_list lVarArgs; va_start(lVarArgs, pMessage); __android_log_vprint(ANDROID_LOG_ERROR, "PACKT", pMessage, lVarArgs); __android_log_print(ANDROID_LOG_ERROR, "PACKT", "n"); va_end(lVarArgs); }
void Log::warn(const char* pMessage, ...) { va_list lVarArgs; va_start(lVarArgs, pMessage); __android_log_vprint(ANDROID_LOG_WARN, "PACKT", pMessage, lVarArgs); __android_log_print(ANDROID_LOG_WARN, "PACKT", "n"); va_end(lVarArgs); }
void Log::debug(const char* pMessage, ...) { va_list lVarArgs; va_start(lVarArgs, pMessage); __android_log_vprint(ANDROID_LOG_DEBUG, "PACKT", pMessage, lVarArgs); __android_log_print(ANDROID_LOG_DEBUG, "PACKT", "n"); va_end(lVarArgs); } }

[140324]

Q048. Как сделать сделать полноэкранное приложение?

Для игр часто нужно создать программу, которая работает в полный экран, даже без отображения заголовка оповещений (notification bar). Есть несколько способов решения этой задачи.

[Программное отображение в полный экран]

Вот код, который позволяет загружать Activity в полный экран.

import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;
public class ActivityName extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // remove title requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.main); } }

[Отображение в полный экран, заданное в AndroidManifest.xml]

< activity android:name=".ActivityName"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
< /activity >

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

Q049. Запуск MediaPlayer для воспроизведения звука приводит к ошибкам «prepareAsync called in state 1», «start called in state 1».

Причина в том, что на момент вызова метода start() экземпляр MediaPlayer еще не готов к воспроизведению. Запускать воспроизведение можно только при полной готовности MediaPlayer.

Отслеживание готовности можно в обработчике события setOnPreparedListener класса MediaPlayer:

   //Объект проигрывателя, который будет проигрывать звук на кнопке.
   MediaPlayer mp = MediaPlayer.create(this, R.raw.girlfart01);
   //Звук будет проигрываться только 1 раз:
   mp.setLooping(false);
   //Установка обработчика события на момент готовности проигрывателя:
   mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener()
   {
      public void onPrepared(MediaPlayer player)
      {
         //При готовности к проигрыванию запуск вывода звука:
         player.start();
      }
   });

Подробнее про воспроизведение звука с помощью MediaPlayer см. статью «MediaPlayer: проигрывание звука».

[140415]

Q050. Как рисовать на экране приложения графику и текст?

Текст и графика рисуются с помощью объектов Canvas и Paint. Пример рисования текста:

Paint paint = new Paint(); 
canvas.drawPaint(paint); 
paint.setColor(Color.BLACK); 
paint.setTextSize(16); 
canvas.drawText("Мой текст", x, y, paint);

Пример рисования линий:

canvas.drawLine(0, 0, 20, 20, paint);
canvas.drawLine(20, 0, 0, 20, paint);

[140418]

Q051. Как вывести многострочный текст с прокруткой?

Для этого можно использовать классы TextView и EditText.

[Использование TextView]

1. Добавьте на форму программы виджет TextView. Это можно сделать в графическом редакторе формы, выбрав виджет в разделе Form widgets. После добавления виджета в файле activity_main.xml добавятся строки:

        < TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

Здесь важно запомнить значение идентификатора виджета android:id (в нашем примере идентификатор textView1), он нам понадобится в дальнейшем для подключения к виджету в программе. Атрибут android:text можно убрать, так как начальный текст нам не нужен.

Чтобы окно с текстом занимало всю доступную область, добавьте также атрибуты:

        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"

2. Добавьте в класс Activity приложения глобальную переменную с типом TextView:

В обработчике onCreate Activity добавьте инициализацию переменной:

txtconsole = (TextView)findViewById(R.id.textView1);

3. Чтобы добавить текст в поле редактирования, вызовите метод append:

txtconsole.append("Это мой текстrn");

В этом примере в конец текста добавлены символы CR и LF, чтобы следующий текст отображался с новой строки. Тест будет добавляться, пока не дойдет до заполнения формы и не будет теряться снизу, чтобы этого не было, нужно добавить вертикальную полосу прокрутки.

4. Чтобы добавить справа вертикальную полосу прокрутки, в секцию TextView файла activity_main.xml добавьте атрибут android:scrollbars=»vertical»:

        < TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:scrollbars="vertical" />

Также добавьте в обработчике onCreate создание пустого метода для прокрутки (без этого полоса прокрутки не появится).

...
txtconsole = (TextView)findViewById(R.id.textView1);
txtconsole.setMovementMethod(new ScrollingMovementMethod());

5. Чтобы было проще добавлять текст в TextView, и сразу его прокручивать в конец при добавлении нового текста, целесообразно написать для этого отдельную процедуру:

private void appendTextAndScroll(String text)
{
   if(txtconsole != null)
   {
      txtconsole.append(text + "n");
      final Layout layout = txtconsole.getLayout();
      if(layout != null)
      {
         int scrollDelta = layout.getLineBottom(txtconsole.getLineCount() - 1) 
                         - txtconsole.getScrollY() - txtconsole.getHeight();
         if(scrollDelta > 0)
            txtconsole.scrollBy(0, scrollDelta);
      }
   }
}

Теперь добавлять текст нужно так:

   appendTextAndScroll("Это мой текст");

[Использование EditText]

1. Добавьте на форму программы виджет Plain Text. Это можно сделать в графическом редакторе формы, выбрав виджет в разделе Text Fields (он помечен меткой abc). После добавления виджета в файле activity_main.xml добавятся строки:

        < EditText
            android:id="@+id/editText1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10" >
        < /EditText >

Здесь важно запомнить значение идентификатора виджета android:id (в нашем примере идентификатор editText1), он нам понадобится в дальнейшем для подключения к виджету в программе.

2. Добавьте в класс Activity приложения глобальную переменную с типом EditText:

В обработчике onCreate Activity добавьте инициализацию переменной:

txtconsole = (EditText)findViewById(R.id.editText1);

3. Чтобы добавить текст в поле редактирования, вызовите метод append:

txtconsole.append("Это мой текстrn");

В этом примере в конец текста добавлены символы CR и LF, чтобы следующий текст отображался с новой строки.

4. Чтобы добавить справа вертикальную полосу прокрутки, в секцию EditText файла activity_main.xml добавьте атрибут android:scrollbars=»vertical»:

        < EditText
            android:id="@+id/editText1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:scrollbars="vertical" >
        < /EditText >

5. Чтобы запретить редактирование текста, добавьте также атрибут android:editable=»false»:

        < EditText
            android:id="@+id/editText1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:scrollbars="vertical"
            android:editable="false" >
        < /EditText >

Чтобы окно с текстом занимало всю доступную область, добавьте также атрибуты:

        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"

[140421]

Q052. Java: как преобразовать число в строку? Строку в число? Число в шестнадцатеричный формат?

[Преобразование числа в строку]

Используйте String.valueOf или Integer.toString, Float.toString и т. п. Примеры:

int intVal=5;
float floatVal=14.76;
//Использование String.valueOf: myTextView.setText(String.valueOf(intVal)); myTextView.append(String.valueOf(floatVal)); //Использование Integer.toString: myTextView.setText(Integer.toString(intVal)); myTextView.append(Float.toString(floatVal));

[Преобразование числа в HEX строку]

int intval = 1234;
String txt = Integer.toHexString(intval);  // в txt получится "4D2"

[Преобразование строки в число]

Используйте метод parseInt, входящий в состав классов Integer, Float и т. п. Пример:

int intVal;
float floatVal;
String stringInt = "5";
String stringFloat = "14.76";
try { intVal = Integer.parseInt(stringInt); floatVal = Float.parseInt(stringFloat); } catch(NumberFormatException nfe) { System.out.println("Ошибка преобразования: " + nfe); }

Q053. Java: как правильно задать байтовый массив?

Старый метод наподобие char txtbuf[80] в Java не работает. Массивы нужно задавать с помощью оператора new:

char txtbuf[] = new char[80];
byte buffer[] = new byte[4];

Q054. Java: куда пропала директива #define?

Директива #define теперь не работает, потому что прекомпилятор как таковой отсутствует. Константы на Java нужно задавать так же, как и обычные переменные, но только с добавлением ключевого слова final (оно означает, что константе можно присвоить значение только 1 раз).

//Стандартный синтаксис #define на языке C/C++:
#define USB_TYPE_VENDOR (0x02 << 5)
#define USB_RECIP_DEVICE 0x00
#define USB_ENDPOINT_IN 0x80
#define USB_ENDPOINT_OUT 0x00
//Те же самые константы на Java нужно задавать так:
public class MainActivity extends Activity
{
   private static final int USB_TYPE_VENDOR  = (0x02 << 5); 
   private static final int USB_RECIP_DEVICE = 0x00;
   private static final int USB_ENDPOINT_IN  = 0x80;
   private static final int USB_ENDPOINT_OUT = 0x00;
   ...

Q055. Eclipse: ошибка «Unable to resolve target»

Такая ошибка может возникнуть после импорта готового проекта в текущий воркспейс. После импорта проекта в Eclipse любые глюки не редкость, так что удивляться не нужно (кстати говоря, многие глюки устраняются просто перезапуском Eclipse).

Когда в свойствах старого проекта (файл project.properties) указан target на версию, которая не поддерживается текущей установкой Eclipse, то попытка очистки (Project -> Clean…) может вызвать такую ошибку. Исправить ошибку можно, если поменять версию target. Там нужно указать число API Level, например:

# Project target.
target=android-19

Q056. Можно ли выводить в TextView форматированный текст (bold, italiс и т. п.)?

В виджете TextView Android есть недокументированная возможность выводить тест в формате HTML, т. е. текст можно делать подчеркнутым, толстым, и даже вставлять в TextView ссылки. Это делается с помощью класса Html и его метода fromHtml. Пример вывода форматированного текста:

String s = "< b >Жирный< /b >, < i >наклонный< /i >, и даже < u >подчеркнутый< /u > текст!"
TextView tv = (TextView)findViewById(R.id.THE_TEXTVIEW_ID);
tv.setText(Html.fromHtml(s));

Такая возможность появилась начиная с Android 2.1, поддерживаются также теги: a href=»/…», b, big, blockquote, br, cite, dfn, div align=»…», em, font size=»…» color=»…» face=»…», h1, h2, h3, h4, h5, h6, i, img src=»/…», p, small, strike, strong, sub, sup, tt, u.

Внимание: если есть необходимость добавления форматированного текста к уже имеющемуся в TextView без потери его форматирования, то необходимо предусмотреть отдельный буфер для текста типа String, и хранить весь форматированный текст именно в этом буфере.

Q057. Java: как удалить все элементы выпадающего списка Spinner?

Удалить все записи из виджета Spinner можно с помощью метода setAdapter, если ему передать аргумент null, пример:

mySpinner.setAdapter(null);

[140428]

Q058. Как вызвать функцию getSystemService из любого класса?

Если вызвать getSystemService из класса, который не связан с GUI приложения Android (т. е. не из класса, который порожден от Activity), то компилятор Java выдаст ошибку «метод не определен». Это происходит потому, что getSystemService связан с классом Context, от которого произведен класс Activity. В произвольном классе, который по умолчанию порожден от класса Object, нет доступа к Context и к его методу getSystemService.

Чтобы иметь возможность вызвать getSystemService из любого класса, нужно передать в него Context. Это можно сделать разными способами — через параметр конструктора, через статическую переменную класса.

[Передача Context через конструктор класса]

public class myClass
{ Context mContext; //Инициализация контекста в конструкторе. public myclass(Context mContext;) { this.mContext = mContext; } public Location getLocation() { //Есть возможность вызвать getSystemService через Context: locationManager = (LocationManager)mContext.getSystemService(context); ... } }
public class MainActivity extends Activity { Button btnCheck; myClass myclass; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
btnCheck = (Button)findViewById(R.id.checkusbdev); //Передача контекста в экземпляр myClass: myclass = new myClass(this); ... } ... }

[Передача Context через статическую переменную класса]

//В класс usbutil будет передаваться Context из класса Activity
public class usbutil
{
   public static MainActivity context = null;
   public static String doReadRawDescriptors(UsbDevice device, int paramidx)
   {
      //Теперь есть возможность вызвать getSystemService через Context:
      UsbManager manager = (UsbManager)context.getSystemService(Context.USB_SERVICE);
      UsbDeviceConnection connection = manager.openDevice(device);
      
      ...
   }
   
   ...
}
public class MainActivity extends Activity
{
   Button btnCheck;
   Spinner spDeviceName;
   
   @Override
   protected void onCreate(Bundle savedInstanceState)
   {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      btnCheck = (Button)findViewById(R.id.checkusbdev);
      ...
      //Передача контекста в класс usbutil:
      usbutil.context = this;
      ...
   }
   
   ...
}

Q059. Eclipse: как заменить форматирование кода с табуляции на пробелы?

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

1. Поменяйте свойства редактора кода Java: меню Window -> Preferences -> Java -> Code Style -> Formatter -> Edit -> Indentation выберите из списка «Spaces Only». Для того, чтобы можно было сохранить настройки, создайте новый профиль, для этого вверху в строке ввода Profile name введите имя нового профиля.

2. Поменяйте свойства редактора по умолчанию: меню Window -> Preferences -> General -> Editors -> Text Editors -> Insert spaces for tabs поставьте галочку.

3. Для уже имеющегося файла Java, в коде которого есть Tab-ы, нужно принудительно поменять все Tab-ы на пробелы. Если этого не сделать, то даже при измененных настройках (на шагах 1, 2) добавление новых строк и операторов будет выполняться все так же с Tab-ами вместо пробелов. Чтобы быстро поменять все Tab на пробелы откройте файл, нажмите Ctrl-A (выделится весь текст) и затем нажмите Ctrl-I (применятся текущие настройки форматирования Ident). Это заменит в тексте все символы табуляции на пробелы. Дальше добавление новых строк, блоков кода будет происходить уже нормально, с пробелами.

См. также How do I change Eclipse to use spaces instead of tabs? site:stackoverflow.com.

Q060. Eclipse: как заменить «египетский» стиль блоков кода на традиционный? Чтобы фигурная скобка открывалась не в конце оператора, а на новой строке?

egyptian

//Есть "египетский", нечитаемый код:
if (myclass.enabled()) {
    myclass.doSomething();
} else {
    myclass.doSleep();
}
//Нужно, чтобы был нормальный: if (myclass.enabled()) { myclass.doSomething(); } else { myclass.doSleep(); }

Для того, чтобы изменить оформление блоков кода, нужно отредактировать шаблоны кода, и создать новый форматер для кода. Как то делается на примере кода Java:

1. Меню Window -> Preferences -> Java -> Editor -> Templates, выберите в таблице нужную строку с шаблоном и нажмите кнопку Edit. Отредактируйте шаблон так, чтобы фигурная скобка появилась на новой строке. Повторите то же самое для всех шаблонов, где встречается блок с фигурными скобками.

2. Создайте новый форматер и примените его. Для этого зайдите в меню Window -> Preferences -> Java -> Code Style -> Formatter. Нажмите кнопку Edit, в строке ввода Profile name введите имя нового профиля (например Normal).

3. На закладке Braces во всех выпадающих списках Brace positions выберите вариант Next line.

4. На закладках New Lines и Control Statements расставьте галочки так, чтобы оформление кода соответствовало Вашим ожиданиям.

Q061. Eclipse: как ставить закладки в коде, и как делать навигацию по закладкам?

Работа с закладками сделана не так удобно, как в Visual Studio, но работать можно.

1. Закладка добавляется через меню View -> Add Bookmark…, в коде при этом на слева от строки, где стоит закладка, прикрепляется синий флажок.
2. Удалить закладку можно через контекстное меню закладки, щелкните правой кнопкой на закладку в коде и выберите Remove Bookmark. Удалять закладки можно также через просмотр закладок (вид Bookmarks).
3. Через консоль просмотра закладок можно делать навигацию по закладкам. Чтобы открыть консоль закладок, войдите в меню Window -> Show View -> Other… -> General -> Bookmarks. В нижней части окна добавится консоль Bookmarks (среди консолей Problems, Javadoc, Declaration, Console, LogCat).
4. Для добавления закладок удобно привязать неиспользуемую горячую клавишу (через меню Windows -> Preferences -> General -> Keys). Я привязал себе для добавления закладок комбинацию Ctrl+B, предварительно отвязав её от действия по умолчанию Build all.

[140430]

Q061. Java: как закодировать дату в формате yymmdd?

Формат предоставления даты в виде YYMMDD (сначала 2 цифры года, потом 2 цифры месяца и 2 цифры дней) удобен для подставления в виде префикса к именам файлов — чтобы файлы были автоматически рассортированы по дате. Но как в Android закодировать дату в текстовое представление YYMMDD?

Оказывается, что это несложно, если использовать класс SimpleDateFormat. Вот пример функции, которая получает текущую дату и форматирует её в виде YYMMDD:

public static String YYMMDD ()
{
   String result = null;
        
   try
   {
      Date currDate = new Date();
      result = new SimpleDateFormat("yyMMdd").format(currDate);            
   }
   catch (Exception e)
   {
      Toast.makeText(context, 
                    "YYMMDD: " + e.toString(),
                    Toast.LENGTH_LONG).show();
   }
   return result;
}

[140502]

Q062. Java: как получить беззнаковое значение байта?

Как известно, в Java не предусмотрено использование чисел без знака. Если Вам нужно сохранить байт на диск как есть, то это не создаст проблему. Однако если нужно интерпретировать значение байта, и производить над ним математические вычисления как с беззнаковым числом, то его нужно перевести в число int с помощью операции AND с числом 0xFF. Пример:

byte bMaxPower = rawDescriptors[DEV_DESCRIPTOR_LEN+indexMaxPower];
int current_ma = 0xFF & bMaxPower;
String txtval = String.valueOf(current_ma*2) + " mA";

[Как это работает]

При преобразовании беззнакового байта в int мы сначала преобразуем в байт в int с получением числа с сохранением знака. Это преобразование происходит с учетом знака, где самый старший значащий бит (Most Significant Bit, MSB) представляет знак, и он будет задублирован в остальных битах полученного целого числа.

byte b = readAByteFromDisk();
int i = (int)b;

Вот что получится, когда преобразуется беззнаковый байт со значением 219:

                               11011011 = unsigned byte 219
                               ^          signed byte -37
                               |_________ Most Significant Bit
                               
    11111111 11111111 11111111 11011011 = signed int -37
    ^
    |____________________________________ расширение числа при создании int

Затем на число int i накладывается маска с побитным оператором AND. Это сбросит все дополнительные биты и знаковое расширение числа, которые появились при преобразовании байта в число int.

    11111111 11111111 11111111 11011011 = signed int -37
    00000000 00000000 00000000 11111111 = Маска 0x000000FF
    00000000 00000000 00000000 11011011 = Результат операции &

Мы использовали шестнадцатеричное число 0x000000FF (в десятичном виде 255) как маску, потому что она оставит младшие 8 числа int, это как раз та часть числа, что нас интересует. Вся функция может быть записана проще и сведена к одному короткому оператору. Значение байта, когда оно используется вместе с оператором &, будет автоматически преобразовано в число int. Шестнадцатеричное значение 0x000000FF может быть записано как 0xFF (дополнительные нули слева добавляются автоматически для дополнения до числа с размером int).

int i = 0xFF & readAByteFromDisk();

[140505]

Q063. Eclipse: новый проект не создается (Unhandled event loop exception)

Симптомы:

1. Создать новый проект «Android Application Project» невозможно, если в процессе создания в мастере установить галочку Create custom launcher icon. При этом не видны зеленые иконки разных размеров в правом окошке Preview. Мастер создания проектов не завершается, в логе выводится ошибка «Unhandled event loop exception». Если принудительно завершить мастер, то Проект не создается полностью. При попытке clean или Build выскакивает ошибка «Errors occurred during the build. Errors running builder ‘Android Resource Manager’ on project ‘USBrelay’. java.lang.NullPointerException».
2. Если снять галочку Create custom launcher icon, то проект создается нормально.
3. Невозможно добавить к проекту иконку запуска launcher icon.
4. Переустановки (Eclipse как отдельно, так и составе ADT Bundle) и обновления не помогают.

Условия воспроизведения ошибки: Host OS: Windows XP SP 2002 SP3 (32-bit), SDK tools version 22.6.3, Eclipse version: 4.3.1.v20130911-1000 из пакета ADT Bundle (Android Developer Tools Build: v22.6.2-1085508), ADT plug-in version: 22.6.2v201403212031-1085508.

Проблема оказалась в версии JDK (Java) 1.7.0_45. На версиях 1.6.0_13 и 1.8.0_05 проблема не наблюдается.

Q064. Eclipse: открытие activity_main.xml приводит к ошибке org.eclipse.swt.SWTException

Полный текст ошибки: An error has occurred. See error log for more details. org.eclipse.swt.SWTException: Widget is disposed.

Устранить ошибку можно перезагрузкой Eclipse, а также запуском из командной строки eclipse -clean.

Q065. Eclipse, Android: почему в onCreate методы getLeft, getTop и т. п. для виджетов возвращают 0?

Причина в том, что обработчике onCreate форма программы еще не отрисована, и координаты виджетов на форме пока неизвестны.

Устранить ошибку можно, если вычислять размеры виджетов и их позицию во время событий, которые возникают после onCreate.

[140507]

Q066. Java: как разделить строку на подстроки по пробелу или другому символу?

String text = "А роза упала на лапу Азора"
String[] separated = CurrentString.split(" ");
separated[0]; // == "А"
separated[1]; // == "роза"
separated[2]; // == "упала"
separated[3]; // == "на"
separated[4]; // == "лапу"
separated[5]; // == "Азора"

Q067. Java: как узнать количество элементов в массиве строк (String [])?

String title = "Введите номер реле";
String[] separated = title.split(" ");
separated.length;    // == 3

Q068. Java: String.format выдает ошибку java.util.UnknownFormatConversionException

Пример кода, который выдает ошибку:

int intVal = 2;
String text;
//Следующая строка даст ошибку UnknownFormatConversionException:
text = String.format("%i", intVal);

Причина тут в недопустимой опции преобразования %i, вместо неё на Java нужно использовать %d:

text = String.format("%d", intVal);  //ОК

Вот таблица поддерживаемых спецификаторов формата:

Преобразование Описание
b,B boolean
h,H hash code
s,S string
c,C character
d decimal integer
o octal integer
x,X hexadecimal integer
e,E floating point in scientific notation
f floating point in decimal notation
g,G floating point in either decimal or scientific notation
a,A hexadecimal floating point
t,T date/time
% percent
n line terminator

Q069. почему строки String не получается сравнивать оператором == ?

А на C# так сравнивать можно, почему на Java это не работает?

Причина в реализации оператора == для строк на Java. На Java оператор == сравнивает ссылки на объекты строк, а не сами строки. Чтобы сравнивать строки на Java, используйте метод equals:

String g1="Male";
String g2="Female";
   
if(gender.equals(g1))
   salutation ="Mr.";
if(gender.equals(g2))
   salutation ="Ms.";

Q070. Java: Integer.getInteger выдает ошибку

Пример кода, который выдает ошибку NullPointerException:

String txtVal = "7";
int relay = Integer.getInteger(txtVal);

Причина в том, что getInteger не делает парсинг строки и преобразование её в целое число (как Вы могли бы предположить по названию метода). Вместо этого getInteger возвращает целочисленное значение системного свойства по указанному имени. Если системное свойство не найдено, или свойство не имеет корректного числового формата, то будет возращен null.

Чтобы получить число из текстового представления, используйте метод Integer.parseInt (см. вопрос Q052).

Q071. Где находятся сохраненные скриншоты на Android?

См. следующие папки:

/storage/sdcard0/ScreenCapture
/storage/sdcard0/Pictures/Screenshots

[140509]

Q072. Как сделать, чтобы оставался запущенным всегда только один экземпляр программы?

Для этого в файле AbdroidManifest.xml для элемента activity можно использовать атрибут android:launchMode, пример:

   ...
  < activity
   android:name="com.usbrelay.MainActivity"
   android:label="@string/app_name"
   android:launchMode="singleTask" >
   ...

Если атрибут launchMode не задан, то по умолчанию используется значение standard.

Когда используется Режим запуска Несколько activity? Комментарий
Обычно используется для запуска большинства activity «standard« Да Значение по умолчанию. Система всегда создает новый экземпляр activity в целевой задаче (target task) и направит к нему intent.
«singleTop« Зависит от условий Если уже существует экземпляр activity поверх целевой задачи (target task), система перенаправит intent к этому экземпляру вызовом метода onNewIntent(), вместо того чтобы создавать новый экземпляр activity.
Специальные запуски (не рекомендуется для обычного использования) «singleTask« Нет Система создает activity в корне новой задачи и перенаправляет к ней intent. Однако, если экземпляр activity уже существует, то система перенаправляет intent к существующему экземпляру вызовом его метода onNewIntent(), вместо того чтобы создавать новый экземпляр.
«singleInstance« Нет То же самое, что и «singleTask", за исключением того, что система не будет запускать любые другие activity в задаче, которая владеет экземпляром уже работающей activity. В этом случае activity всегда одна, и только она может быть членом своей задачи.

Q073. Что такое суперкласс (superclass)? Что такое вызов метода суперкласса?

Суперкласс — это родитель, от которого произошел класс. Т. е. для дочернего класса класс-родитель является суперклассом. Дочерний класс наследует методы суперкласса, и вызов метода класса-родителя называется вызовом метода суперкласса.

Самый распространенный пример — когда при создании проекта программы создается класс активности, порожденный от класса Activity (помните? public class MainActivity extends Activity). Если нужно вызвать метод класса Activity, то в дочернем классе вызов его метода будет называться вызовом метода суперкласса, и должно сопровождаться префиксом super. Пример вызова метода суперкласса onResume в методе класса:

@Override
public void onResume()
{
   super.onResume();
   Intent intent = getIntent();
   String action = intent.getAction();
   textDebug.append("[onResume]: " + action + "n");
   if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action))
   {
      usbdev = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
      if (null != usbdev)
      {
         textDebug.append("USB Attached: " + usbdev +"n");
      }
   }
}

Q074. Почему BroadcastReceiver не отслеживает события подключения устройства USB (ACTION_USB_DEVICE_ATTACHED)? События отключения ACTION_USB_DEVICE_DETACHED при этом отслеживаются нормально.

Это известный баг «Issue 25703: USB host device plugin notification failure», который во многих Android не исправлен. Как его обойти, описано в статье «Определение событий подключения и отключения устройств USB».

Q075. Как подключаться к adb через TCP/IP (например, через WiFi)? Это иногда полезно, когда интерфейс USB занят или отсутствует.

[Подключение вручную, если получены права root на Android]

Вы можете разрешить подключение к Android через WiFi следующими командами (в терминале на самом Android):

su
setprop service.adb.tcp.port 5555
stop adbd
start adbd

Отключить коннект через WiFi и вернуться к подключению adb через USB можно следующими командами:

setprop service.adb.tcp.port -1
stop adbd
start adbd

[Через подключение к компьютеру через USB]

Права root в этом случае необязательны, но в настройках нужно включить режим отладки, и нужно заранее знать IP-адрес подключенного по WiFi устройства Android. Выполните в cmd следующие команды:

adb tcpip 5555
adb connect 192.168.a.b:5555

Здесь 192.168.a.b адрес IP устройства Android. Вы можете определить IP адрес устройства Android двумя способами:

• Вручную, для чего зайдите в настройки WiFi на Android, выберите Advanced и там будет указан IP. Можно также запустить программу наподобие Ftp Сервер., и она покажет IP адрес устройства Android.

Android-FTP-server

• С помощью команды ADB:

adb shell ip -f inet addr show wlan0

Вернуться к подключению ADB через USB можно командой:

[Подключение adb через сеть с помощью специальных программ]

В магазине Google Play есть несколько программ, которые позволяют автоматизировать процесс. Быстрый поиск подскажет такие программы, как adbWireless, WiFi ADB и ADB WiFi. Все эти программы требуют прав root, однако программа adbWireless требует меньше разрешений.

[170219]

Q075. Установили новую версию Java, но все еще запускается старая

Возможные причины проблемы: в папке c:Windows или c:Windowssystem32 находится старая версия. Решение проблемы: зайдите в системные папки Windows (c:Windows, c:Windowssystem32), и удалите оттуда файлы java.exe.

Еще одна причина: работает сервис быстрого запуска Java (Java Quick Starter, исполняемый файл jqs.exe). Решение проблемы: остановите и отключите сервис Java Quick Starter. Если он находится в папке Java старой версии, то удалите папку, где он находится.

Q076. Ошибка … could not open jvm.cfg

Причина ошибки в том, что Вы переключились на другую версию Java, верно настроили пути запуска в переменной окружения Path, удалили каталог со старой версией Java в папке Program Files, но все еще пытается запуститься старая версия, которая почему-то находится в папке c:Windows или c:Windowssystem32. Решение проблемы: зайдите в системные папки Windows (c:Windows, c:Windowssystem32), и удалите оттуда файлы java.exe.

[Ссылки]

1. Что такое API Level?
2. Google USB Driver site:developer.android.com.
3. OEM USB Drivers site:developer.android.com — где найти и как установить драйвер отладки USB именно для Вашего устройства Android.
4. Отладка разрабатываемого приложения Android.
5. Что такое Android rooted device?
6. Android Debug Bridge — что это такое?
7. Словарик Android.

Общая дискуссия по PlayStation 5

[pvc1 в 18:12|11 Апр 2023] 

Прошивки и приложения для PlayStation 3

[pvc1 в 21:30|09 Апр 2023] 

Общая дискуссия по PlayStation 3

Приложения для PlayStation 4

[pvc1 в 13:44|04 Апр 2023] 

Программы и Приложения для PlayStation Portable

[pvc1 в 09:21|03 Апр 2023] 

Прошивки и программы для PlayStation Vita

[pvc1 в 08:57|02 Апр 2023] 

Железные вопросы PlayStation 2

Общая дискуссия по PlayStation 5

[pvc1 в 14:00|01 Апр 2023] 

Общая дискуссия по PlayStation 3

[pvc1 в 10:50|01 Апр 2023] 

Приложения для PlayStation 5

[pvc1 в 18:57|31 Мар 2023] 

Приложения для PlayStation 2

Приложения для PlayStation 2

ПК софт для PlayStation 4

[pvc1 в 19:32|24 Мар 2023] 

Прошивки и программы для PlayStation Vita

[pvc1 в 19:16|21 Мар 2023] 

Прошивки и приложения для PlayStation 3

ПК софт для PlayStation 4

[pvc1 в 17:55|20 Мар 2023] 

Общая дискуссия по PlayStation 2

Общая дискуссия по PlayStation 1

[pvc1 в 16:27|17 Мар 2023] 

ПК софт для PlayStation 4

[pvc1 в 08:19|16 Мар 2023] 

ПК софт для PlayStation 5

[pvc1 в 22:18|15 Мар 2023] 

Приложения для PlayStation 2

[pvc1 в 16:41|11 Мар 2023] 

Программы и Приложения для PlayStation Portable

[pvc1 в 16:40|11 Мар 2023] 

Эмуляторы для PlayStation Vita

[pvc1 в 16:39|11 Мар 2023] 

ПК программы для PlayStation 2

[pvc1 в 09:58|10 Мар 2023] 

Прошивки для PlayStation 4

[pvc1 в 19:03|08 Мар 2023] 

Прошивки и приложения для PlayStation 3

[pvc1 в 09:03|08 Мар 2023] 

ПК софт для PlayStation 4

[pvc1 в 08:30|08 Мар 2023] 

Прошивки и приложения для PlayStation 3

[pvc1 в 20:34|06 Мар 2023] 

ПК программы для PlayStation 3

[pvc1 в 20:15|06 Мар 2023] 

Приложения для PlayStation 2

[pvc1 в 20:18|04 Мар 2023] 

ПК софт для PlayStation 4

[pvc1 в 19:38|03 Мар 2023] 

ПК программы для PlayStation 3

[pvc1 в 16:55|02 Мар 2023] 

Прошивки и программы для PlayStation Vita

[pvc1 в 16:48|02 Мар 2023] 

Прошивки и приложения для PlayStation 3

[pvc1 в 12:45|28 Фев 2023] 

Об играх PlayStation Vita

[pvc1 в 22:02|24 Фев 2023] 

Об играх PlayStation Vita

[pvc1 в 21:52|24 Фев 2023] 

ПК программы для PlayStation 2

[pvc1 в 09:56|13 Фев 2023] 

Прошивки и программы для PlayStation Vita

[pvc1 в 09:41|13 Фев 2023] 

Мобильные приложения

[pvc1 в 09:27|10 Фев 2023] 

Прошивки и программы для PlayStation Vita

[pvc1 в 09:39|06 Фев 2023] 

Железные вопросы PlayStation 2

Мобильные приложения

[pvc1 в 09:16|03 Фев 2023] 

ПК программы для PlayStation 2

[pvc1 в 09:04|03 Фев 2023] 

Приложения для PlayStation 2

Об играх PlayStation Vita

[pvc1 в 09:29|31 Янв 2023] 

Прошивки и программы для PlayStation Vita

[pvc1 в 08:36|31 Янв 2023] 

Прошивки и программы для PlayStation Vita

[pvc1 в 19:29|29 Янв 2023] 

Прошивки и приложения для PlayStation 3

[pvc1 в 09:27|24 Янв 2023] 

Приложения для PlayStation 2

Прошивки и программы для PlayStation Vita

[pvc1 в 10:35|18 Янв 2023] 


Изменения:

Some bugs have been fixed, the most important :
Restore TOTAL gave error list
Attach files to USBUtil , this improvement is still in , but you will be able to see the files content in the game, music , videos other , just have to link to who playa Bugs , problems in ISOs

Программа предназначена для конвертации игр и последующем их запуске на PS2 через Open PS2 Loader (OPL)
Инструкция:
1: Запускаем програму если появилось красное окно жмем close вверху выбираем file в выпавшем списке выбираем Сreate(GAME/ISO)From CD/DVD

2: Если вылезет серое окошко жмем Close слева выбираем букву привода где находится игра (если у вас образ предворительно смонтируйте его на виртуальный привод и потом выбирайте в этом меню букву привода куда смонтирован образ)

3: Справа выбираем нашу флешку или USB-жесткий диск куда хотим смонтировать игру

4: В правом нижнем окне ввода пишем название игры

5: В самом низу слева жмем greate и ждем окончания конвертации (должы заполнится 2 полоски в появившемся окне)
по окончании конвертации закрываем програму и вставляем флешку в PS2

6: Запускаем любым способом Open PS2 Loader (OPL)например через установленый на приставку FreeMCboot 1.8b
или через загрузочный диск с ulauchELF

7: Выбираем в меню USB games в списке должна появится переконветированая игра запускаем играем

Примечание: перед конвертацией игры на флешку она должна быть отформатирована в файловую систему FAT32

Все вопросы по програме задаем тут

скачать

Выложена русская версия програмы ссылка

  1. borodat
    Well-Known Member

    Сообщения:
    2
    Симпатии:
    0
    Баллы:
    51

    Народ, а не подскажете, как решить проблему с USBUtil? Некоторые образы конвертируются с ошибкой.
    Доходит до 100% и вылазит ошибка Range check error, при этом записи в листе с играми не появляется, но конвертированные файлы в папке остаются. Я вот думал просто вручную как-нибудь игры добавить в лист, но не нашёл такой опции. Создавал через «создать игру с образа», пробовал три разные версии USBUtil, 2.0 english, 2.1 espan.

    Пробовал так же монтировать образ в демон, и создавать с диска — программа отвечает, что не может найтилибо ошибочныйнекорректный SYSTEM.CNF, хотя я его на диске вижу, ну и впринципе не знаю, чего там не правильно, всего три строчки текста. Делал даже так — из файлов с монтированного образа собирал новый образ ImgBurn’ом, создание игры доходило до конца, но всё равно вылазили в конце две какие-то ошибки и в статусе игры было написано Bad.

    Не могу понять, по какому принципу они отказываются конвертироваться. если говорить конкретно, это например образы первых и вторых Mercenaries, которые на рутрекере лежат, русские версии. Далее оттуда же сборник игр тайко одним образом.

    При закатывании этих образов на болванку — они работают.

  2. dimm
    Administrator
    Команда форума

    borodat,
    Попробуй прогнать образ через USB Insane v0.1
    http://www.psx-core.ru/load/8-1-0-63

  3. duk
    Well-Known Member

    Сообщения:
    13
    Симпатии:
    0
    Баллы:
    58

    Что-то не получается у меня поиграть через SMB в OPL. Не отображаются имена игр, но сеть грузится. Образы игр даже перегонял через UltraISO (извлекал из образа файлы в отдельную папку и потом создавал новый образ PS2DVD, ну а потом через USBUtil v2.00 конвертировал как обычно (на флэхе так прокатывало, если что-то не работало)). К папке добавлял в безопасности гостя и открывал общий доступ к этой папке (имена папок одинаковы и в OPL и на компе, и сам значок папки изменился). Службы на компе в msconfig необходимые включены (такие как сервер, рабочая станция и т. д.), политика локальной безопасности по умолчанию (я смотрел там везде вход без пароля и без подтверждения), фаервол выключал. Может быть проблема в netbios или в свойствах уже конвертированных файлов? моя ОСь win xp sp3. Вопрос не актуален.

  4. Пытался загрузитсья с сети при помощи Open PS2 Loader USB & SMB. Сделал шару PS2SMB, дал доступ гостям, закинул образы iso, а так же образы сконвертированные USBAdvance. Он их не увидел. В каком формате кидать-то?

    И еще — когда обновляю сеть, то там начинается обратный отсчет. У меня отсчет останавливается на 1.

    duk, скажи уж как решил траблу!

  5. duk
    Well-Known Member

    Сообщения:
    13
    Симпатии:
    0
    Баллы:
    58

    Fury-Wellfedded, У тебя сеть получается не настроена правильно, т. к. OPL зависает на 1. редактируй ипконфиги на карте памяти через uLaunchELF. насчет образов их надо конвертировать USBUtil v2.00 и нужно чтоб в расшаренной папке был только один файл ul.cfg. Для проверки расшарены ли файлы или нет заходишь в пуск -> выполнить и вводишь ип компа. И фаервол либо выключай, когда включаешь в OPL старт сети, либо настрой его для этого дела =)

  6. uLaunchELF сеть видел! Я для проверки заходил через PS2 себе на шары — без проблем. Шары были сделаны через AutoСlient. Настройки сети в Open PS2 Loader USB & SMB поставил такие же. Честно говоря не понимаю, как этот лоадер может видеть расшаренные в виндовсе папки… Может на компе спец прога-сервер нужна типа автоклиента? Когда я пытаюсь обновить сеть, видно, что подключение по сети в виндовсе сначала прерывается, потом снова включается, т.е. связь есть.

    насчет образов их надо конвертировать USBUtil v2.00 и нужно чтоб в расшаренной папке был только один файл ul.cfg.[/QUOTE]
    USB Advance не подойдет? вроде тоже самое
    попробую USBUtil v2.00…

  7. duk
    Well-Known Member

    Сообщения:
    13
    Симпатии:
    0
    Баллы:
    58

    Fury-Wellfedded, USBUtil v2.00 удобней для конвертирования образов.

    у меня также было и не робило в итоге нашёл в какой-то из папок на карте памяти файл config с неверными ип адресами, исправил и Open PS2 Loader USB & SMB сеть загрузил.

    не че не надо!!! просто отключи для проверки все браундмаузеры =)

  8. Boris
    Well-Known Member

    Сообщения:
    49
    Симпатии:
    2
    Баллы:
    61

    Подскажите, пожалуйста, нельзя ли с помощью флэшки скидывать образы на HDD (использую для игры HDLoader 0.8c и FreeMcBoot)? Winhiip хорош, но напрягает каждый раз снимать и ставить обратно винт, а у HDL_dumb очень маленькая скорость при копировании. Заранее спасибо :)

  9. прогу скачал, попробую

    поищу конфиг! похоже в этом проблема!

    фаервол я отрубал, да даже когда был включен, я поставил на Среднюю опасность и разрешал что он просил (а он просил когда коннектился)

  10. duk
    Well-Known Member

    Сообщения:
    13
    Симпатии:
    0
    Баллы:
    58

    Fury-Wellfedded,

    не факт что OPL заработает. Надо в настройках фаера — > LAN поставить галку netbios для твоего ип компа

  11. >у HDL_dumb очень маленькая скорость при копировании
    А ты игры по 10 раз за день ставишь? Нормальная такая скорость, лучше без вытаскивания винта вроде не придумали…

  12. Boris
    Well-Known Member

    Сообщения:
    49
    Симпатии:
    2
    Баллы:
    61

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

  13. dimm
    Administrator
    Команда форума

    Нет такого способа и не будет. Никто такую дурь делать не будет. Ты будешь ждать инсталла 4 гиговой игры 2,5 часа? Нет. Вот и никто не будет. Реальная скорость USB PS2 при существующих хоумбрюшных драйверах не более 500 кбайт/c. Что сложного соединить соньку с сетевухой компа или хабом? Там хоть скорость 2-3 мега в секунду.

  14. Boris
    Well-Known Member

    Сообщения:
    49
    Симпатии:
    2
    Баллы:
    61

    dimm, ну ок, я просто хотел узнать, мало ли..
    Кстати, а что за зверь Open PS2 Loader, что в нем такого крутого? :)

  15. Gloock
    Well-Known Member

    Сообщения:
    16
    Симпатии:
    1
    Баллы:
    54
  16. Deriel
    Well-Known Member

    Сообщения:
    341
    Симпатии:
    37
    Баллы:
    73

    Не получается запустить игры в OPL через SMB (отсчет заканчивается, списка игр не появляется, через ЮСБутил список виден, с компа по ИП приставка пингуется). Через SMS плеер тоже SMB не грузится. Все перепробовал, варианта 2: должна ли расшаренная папка быть на диске с файловой системой FAT32, или NTFS тоже нормально? и второе, т.к. у меня вин7, может в нем что то надо еще включать/отключать?

  17. dimm
    Administrator
    Команда форума

    Deriel,
    Не забудь добавить в «Безопасности» твоей общей папки пользователя «Гость» и в «Центре управления сетями и общим доступом» отключи «Общий доступ с парольной защитой».

  18. Deriel
    Well-Known Member

    Сообщения:
    341
    Симпатии:
    37
    Баллы:
    73
  19. Deriel
    Well-Known Member

    Сообщения:
    341
    Симпатии:
    37
    Баллы:
    73

    Кстати, не знаете что за ерунда, у меня игры запускаются только в OPL r238. Ни в 0,5 ни в 0,6 более поздних версий ничего не происходит. Грузится сеть, появляется список игр, нажимаю на какой нибудь игре крест и все, прога зависает тупо. Проверял на GoW, Motorstorm, которые в 238 запускаются и с флешки и по сети (там сперва разноцветные экраны мигают), а в последнем (вроде 258 ревизии) тупо при запуске вешают прогу. Кстати, обратил внимание, что в 258 ревизии нет пункта настроек, только настройки темы и сети отдельно и все.

    З.Ы. Впринципе это не особо проблема для меня, просто Devil May Cry первый на 238 не запускается, вот думал может на других версиях пойдет. Правда еще вариант есть что там руссик криво поставлен :)

  20. жди 0.7 версии, может пофиксят

Страницы: Назад 1 25 26 27 28 [29] 30 31 32 33 41 Далее   Вниз

Тема: Вопросы о PlayStation 2  (Прочитано 120076 раз)

0 Пользователей и 1 Гость просматривают эту тему.


то для 70х ревизии пс2 нада, тебе оно для твоей 79х не нужно


Можно ли заставить показывать игры от пс1 по компоненту?

Запусти Tekken 3.


Но не понял что там на фото справа от чипа

Это лазер-фикс. Точнее, диодные ограничители напряжения подаваемого на катушки головки. Было актуально для 39000, если не ошибаюсь


SAN-DIABLO,
надеюсь, ты не упустил, что там в лоте 2 (два) набора.


Было актуально для 39000, если не ошибаюсь

не, это актуально для 70х, а вот у 39х и 50х там перерезали дорожку и паяли проводок тем самым снижая питание драйвера, если мне память не изменяет, хотя я в свой 39х и 50х ничего не фмксил.
а вот 70х часто фиксил, один раз было дело пришлось фиксить в тихаря одному клиенту(он был категорически против фикса) а то он три раза за неделю приходил и менял лазер каждый раз, линза всегда была аж поплавленая и вздутая )))


SAMael,
по гарантии приходил или за деньги?


Rumata, Благодарю за информацию.
Yoti, Да мне собственно два и надо.


SAMael,
по гарантии приходил или за деньги?

Та по гарантии только 1 лазер сменил, а 2 за деньги уже, ато ну нафиг.
Чел начитался что мол после лазер фикса диски плохо читаются и не все игры идут и не хотел его ставить, зато лазеры ему жечь видать понравилось, ото я поставил и всё отличненько, и ему дешевле и мне меньше головняка, главное все довольны  ;)


Есть у кого-нибудь схема распайки IDE шлейфа к Пс2 слим 70008?



У меня проблема, проблема в том что плохо читаются диски. Я значит лазер заменил в ПС2, и все стало работать только хуже, например свап маджик пс2 перестала видеть. Я вот думаю может у меня проблема была не в лазере, а в чем то другом. Но вот в чем не подскажите?


приветствую всех. сегодня настроил сеть между компом и Playstation 2, через роутер и комутатор. все заработало, решил поставить игру с диска, началась установка. выскочила ошибка, игра не запускается. но, теперь и на Playstation 2 не посмотреть содержимое HDD через HDL-DUMB 0.8.6 выдает ошибку BAD APA Partition Table. как так получилось??   :? и как сделать так, чтобы все работало??   :-


Кусь, котаны! DualShock 3 на PS2 постоянно вибрирует и в вечном поиске. Джойстик проводной Dialog для PS3 и PC постоянно вибрирует и никак не находится. Так и должно быть?


~MaoSadie~, у тебя с джоем что то,так не должно быть.у меня есть похожий Thrust Master ни чего не вибрирует лишнего.


Доброго времени суток!
Раздобыл таки наконец то карту памяти, установил FreeMCboot что бы играть с флешки. И вот появились проблемы, в связи с этим и вопросы.
1. Для установки игр на флешку Я пользуюсь программой USBUtil на некоторые игры он выдает ошибку «No se pudo explorar el ISO, no existe o esta dacado» следом ошибка error en SYSTEM.CNF, archivo no legible o em mal estado
2. В связи с этим при запуске через Open PS2 Loader выдает ошибку «error, could not run the item» после создания образа выдает Игры с ошибками попробуйте Очис. Место востановление.
3. Я пользуюсь джойстиком от PS1 (оригинальным не китайской подделкой) Иногда при запуске uLaunchELF курсор начинает перемещаться с дикой скоростью, и все остальные кнопки тоже дико реагируют, такое ощущение будто нажал на джойстике от nes турбо А или турбо Б. Когда такая фигня происходит игры загружаются очень очень медленно.
4. Еще прочитал, что нужно флешку как то дефрагментировать если есть ошибки, как это сделать?
5. Слышал что как-то вроде можено играть через ethernet кабель, что бы не париться с флешкой, реально ли это?
6. Пытался русифицировать OPL скинул файлы font_Russian_0.9.3.ttf и lang_Russian_0.9.3.lng в mc0:/SYS-CONF/ но программа все равно русский язык не видит.
Знаю, что в этой теме многие вопросы обсуждались, но искать нужные посты долго и нудно.
Помогите кто чем сможет пожалуйста  :-

« Последнее редактирование: 16 Февраль 2016, 22:41:06 от ReZistanse »


1. Для установки игр на флешку Я пользуюсь программой USBUtil на некоторые игры он выдает ошибку «No se pudo explorar el ISO, no existe o esta dacado» следом ошибка error en SYSTEM.CNF, archivo no legible o em mal estado

скорей всего проблема в неправильном ID игры,нужно пересобрать образ игры,как это сделать давно писал тут

3. Я пользуюсь джойстиком от PS1 (оригинальным не китайской подделкой) Иногда при запуске uLaunchELF курсор начинает перемещаться с дикой скоростью, и все остальные кнопки тоже дико реагируют, такое ощущение будто нажал на джойстике от nes турбо А или турбо Б. Когда такая фигня происходит игры загружаются очень очень медленно.

купи оригинальный DualShock 2 проблема исчезнет

4. Еще прочитал, что нужно флешку как то дефрагментировать если есть ошибки, как это сделать?

куда проще просто отформатировать

5. Слышал что как-то вроде можено играть через ethernet кабель, что бы не париться с флешкой, реально ли это?

реально, читай тут спойлер запуск игр по сети

6. Пытался русифицировать OPL скинул файлы font_Russian_0.9.3.ttf и lang_Russian_0.9.3.lng в mc0:/SYS-CONF/ но программа все равно русский язык не видит.

для каждой версии OPL файлы руссификации свои,ищи именно под свою версию OPL


ReZistanse, Форматни флешку,закинь игры, утилитой Ауслоджик сделай дефрагментацию ( на рутрекее в раздаче есть в папке софт).И пробуй запускать.


vitas155, Спасибо, афигительно помог  :D теперь буду знать больше))

Добавлено позже:
Drapon, и тебе спасибо))

« Последнее редактирование: 17 Февраль 2016, 14:43:21 от ReZistanse »



тут очень хороший FAQ,

По-хорошему эти ФАКи надо куда-то отдельно выносить. Если кто не помнит — Рутрекер заблокирован, по крайней мере некоторыми провайдерами


Надо отдельную тему по ОПЛ для ПС2.


В этой теме решил задать свой вопрос по ПС2. Дело в том, что есть проблема со звуком в паре нужных мне игр. Звук в роликах тормозит и заикается.
При этом без разницы, в Rule of rose на болванке, в Headhunter на лицензии. И через оптический выход на колонки, и через компонент на телевизор.
Исключительно в видеовставках, в самой игре нет, к тому же только в этих двух играх. Это решаемо?


У меня тоже в некоторых играх,в заставке,звук заикаеться,почему такое происходит?Лазер отличный,читает четко,видео не тормозит.


Это значит что у вас обоих лазеры пашут не так хорошо как вы о них думаете  :)


На фотке это такие слимки выходили или это самопальная доработка? И вопрос 2,она не чипованная и с ней 15 дисков лицухи отдают.За сколь максимум можно ее сторговать?


За сколь максимум можно ее сторговать?

Какую цену не назови, ты скажешь слишком много. Кстати продавцы при попытке торговаться не агрятся на тебя разве?


SILENT_Pavel, Вообще болт ложил на них,таких обьяв по десятку в день.За эту просит 2к но меня смущает насечка на консоли, таких вроде не было.Розовая и металлик и черная.


И сюда барыги набежали :'(
Ну обклеили плёнкой под кожу, моддинг называется :lol:


Rumata, Карбон, че ее отодрать можно и следов не будет?Че сразу барыги то :neznayu:


Страницы: Назад 1 25 26 27 28 [29] 30 31 32 33 41 Далее   Вверх

Ошибка — Warning: Division by zero in, как исправить

Ошибка Division by zero, как исправить ошибку Warning: Division by zero in

division by zero это не ошибка при установке игры — это обычное деление на ноль…

  1. Что означает ошибка Division by zero
  2. Как исправить ошибку Warning: Division by zero in
  1. У нас встретилась вот такая ошибка :

    Warning: Division by zero in адрес on line 18

    Что означает ошибка Division by zero

    Прежде чем приступать к нашей ошибке — давайте просто попробуем перевести!

    Warning: Division by zero — перевод

    Переведем данную ошибку с английского и нам сразу станет все ясно!

    Warning — предупреждение, сигнал сущ

    Division — деление, отдел, раздел, распределение сущ

    by — по, посредством предл

    zero — ноль сущ

    Итого, если мы соберем данную фразу «Warning: Division by zero» на русском, то получим :
    Внимание! Ошибка деления на ноль!

  2. как исправить ошибку Warning: Division by zero in

    Дл ятого, чтобы исправить ошибку «Warning: Division by zero in» нам понадобится скриншот ошибки, который мы приводили раньше. смотрим на него и видим последнее слово и число, line — это линия в файле, 18 — это номер линии где ошибка.

    line 18

    И та часть, которая размыта — это адрес, по которому находится файл с ошибкой Warning: Division by zero in
    как исправить ошибку Warning: Division by zero in

    Далее находим данный файл и удаляем ошибку!

Не благодарите, но ссылкой можете поделиться!

COMMENTS+

 
BBcode


На чтение 3 мин Просмотров 1.5к. Опубликовано 12.03.2021

Деление на ноль невозможно. Division by zero isn’t possible. Эта ошибка имеет следующие причину и решение: This error has the following cause and solution:

Значение используемого в качестве делителя выражения является нолем. The value of an expression being used as a divisor is zero.

Проверьте правильность написания переменных в выражении. Check the spelling of variables in the expression. Неправильно написанное название переменной может незаметно создать числовую переменную, которая примет значение ноля. A misspelled variable name can implicitly create a numeric variable that is initialized to zero. Проверьте предыдущие операции с переменными в выражении, особенно передаваемых в процедуру в качествеаргументов из других процедур. Check previous operations on variables in the expression, especially those passed into the procedure asarguments from other procedures.

Для получения дополнительной информации выберите необходимый элемент и нажмите клавишу F1 (для Windows) или HELP (для Macintosh). For additional information, select the item in question and press F1 (in Windows) or HELP (on the Macintosh).

Поддержка и обратная связь Support and feedback

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Have questions or feedback about Office VBA or this documentation? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь. Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.

Ошибку runtime error могут вызвать множество причин и одна из самых распространенных — это установка новых версий программ поверх уже установленных, что приводит к появлению ошибок в системном реестре. Другая распространенная причина — связана с деятельностью различных вирусов, троянов и рекламных шпионов, которые проникают на ваш компьютер и могут удалить, либо модифицировать критически важные файлы вашей операционной системы.

Ошибку runtime error достаточно легко исправить. В 99% случаев, любой чистильщик реестра поможет восстановить удаленные файлы, либо исправить поврежденные. Чистильщики реестра специально разработаны для исправления большинства ошибок, связанных с runtime error, в том числе и runtime error 91, runtime error 13 и многих других, т.к. они проверяют целостность файловой системы.

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

Представляем вам статью по решению проблемы которая возникает при работе с программой TXD Workshop.

Ошибка в программе TXD Workshop состоит в следующем: при установке модификации в игре GTA San Andreas, например в файле hud.txd возникает ошибка «Floating point division by zero».

Для того чтобы решить проблемы, необходимо выполнить следующие действие:

Этап 1. Открываем необходимый для вас файл будь это img или txd не имеет никакого значения. После этого нажимаем на кнопку Properties.

Этап 2. . Запоминаем что написано у файла в строке Alpha и жмём Ok.

Этап 3. После этого импортируем файл заменяя его своим файлом, ошибка должна иcчезнуть. После этого снова нажимаем на Properties.

Этап 4. В строке Alpha в появившемся окне пишем то что запоминали в этапе 2.

Этап 5. Нажимаем Ok и тем самым ошибка будет устранена и файл будет успешно заменен и вы сможете наслаждаться своими модификациями в игре GTA San Andreas или же при игре на серверах San Andreas Multiplayer(Samp).

При попытке записи образа Windows 10 на флэшку, появляется окошко:
_________________________
Error
Class name: TfrmUSBWrite
type: EDivByZero
Message: Division by zero
_________________________
Флэшку форматировал всеми известными способами: Программой HDD Low Level Format и встроенными средствами Windows. Так же отформатировал её во всех доступных файловых системах: NTFS, FAT32, exFAT. Сразу говорю, что UltraISO запускал с «Правами Администратора».
Заранее спасибо.
UltraISO выдаёт ошибку: Division by zero, при записи образа Windows на флэшку

Stepeecoyote Stepeecoyote
06.12.2020

Мало других программ для записи флешек?
Можно и командной строкой — но это для профи

Loony Loony
06.12.2020

Образ проверь, не битый ли он. По поводу UltraISO — далеко не лучшая программа для записи загрузочных флешек.

Если есть желание разобраться, то в Яндекс: «UltraISO TfrmUSB Writetype: EDivByZero»

Mike SuperB deModerator Mike SuperB deModerator
06.12.2020

Почему флешка видится в проводнике как жёсткий диск?
Есть ли в UISO другие методы записи кроме USB-HDD?

  • Интернет-служба устранение неполадок Windows отключена. Как включить? Синий Экран во время игры Tom Clancy’s Division 2 Во время игры, игра, в основном звук в игре начинает искажаться, такое ощущение как будто помехи. Пробовал самостоятельно с помощью интернета решить проблему, не помогло. На вас вся надежда! (( Помогите решить проблему пожалуйста.
  • Скачал винду с офф. Сайта и сделал загрузочную флэшку через Ultraiso И в флэшке записался установщик винды нужно отсюда сделать или можно через биос?
  • Какие проблемы могут быть при записи win7 на диск через UltraISO? Прожиг начался и комп зависает. Диск новый. Перед этим записывала на флэшку и все нормально записалось.
  • После записи Windows 7 на флешку через UltraISO, вот такая вот хрень на флешке Флешка Transcend на 4Gb Флешка целая, не битая, стоит в разъеме материнки Просто поменял разъем. Помогло. Никто не ответил правильно xd, но все равно всем спасибо

Добавить комментарий

Приложения для PlayStation 4

[pvc1 в 21:27|20 Июн 2023] 

ПК софт для PlayStation 4

[pvc1 в 18:56|20 Июн 2023] 

Общая дискуссия по PlayStation 1

[pvc1 в 22:05|15 Июн 2023] 

ПК софт для PlayStation 4

[pvc1 в 20:17|12 Июн 2023] 

Прошивки и программы для PlayStation Vita

[pvc1 в 08:30|12 Июн 2023] 

Приложения для PlayStation 2

ПК софт для PlayStation 4

[pvc1 в 21:54|11 Июн 2023] 

Прошивки и программы для PlayStation Vita

[pvc1 в 21:44|11 Июн 2023] 

ПК софт для PlayStation Vita

[pvc1 в 21:38|11 Июн 2023] 

ПК программы для PlayStation 2

[pvc1 в 08:07|09 Июн 2023] 

Железные вопросы PlayStation 2

Общая дискуссия по PlayStation 5

[pvc1 в 21:06|07 Июн 2023] 

ПК софт для PlayStation 4

[pvc1 в 10:08|04 Июн 2023] 

Приложения для PlayStation 5

[pvc1 в 09:58|04 Июн 2023] 

Общая дискуссия по PlayStation 3

Прошивки и приложения для PlayStation 3

ПК программы для PlayStation 3

[pvc1 в 21:47|03 Июн 2023] 

ПК программы для PlayStation 2

ПК программы для PlayStation 2

[pvc1 в 07:21|02 Июн 2023] 

ПК программы для PlayStation 3

[pvc1 в 09:19|01 Июн 2023] 

Общая дискуссия по PlayStation 5

[pvc1 в 09:13|01 Июн 2023] 

Железные вопросы PlayStation 2

Общая дискуссия по PlayStation 5

[pvc1 в 10:18|26 Май 2023] 

Программы и Приложения для PlayStation Portable

[pvc1 в 17:46|24 Май 2023] 

Мобильные приложения

[pvc1 в 17:45|24 Май 2023] 

Прошивки и приложения для PlayStation 3

[pvc1 в 09:27|15 Май 2023] 

Общая дискуссия по PlayStation 2

ПК софт для PlayStation Vita

[pvc1 в 15:19|09 Май 2023] 

Прошивки и программы для PlayStation Vita

[pvc1 в 15:00|09 Май 2023] 

Приложения для PlayStation 2

Программы и Приложения для PlayStation Portable

[pvc1 в 11:43|05 Май 2023] 

Об играх PlayStation 3

Программы и Приложения для PlayStation Portable

[pvc1 в 08:01|01 Май 2023] 

Прошивки и приложения для PlayStation 3

[pvc1 в 21:59|30 Апр 2023] 

Об играх PlayStation Vita

[pvc1 в 17:42|27 Апр 2023] 

Эмуляторы для PlayStation Vita

[pvc1 в 15:53|24 Апр 2023] 

Приложения для PlayStation 4

[pvc1 в 19:56|16 Апр 2023] 

ПК программы для PlayStation 3

Прошивки и программы для PlayStation Vita

[pvc1 в 20:03|12 Апр 2023] 

Прошивки и приложения для PlayStation 3

[pvc1 в 21:30|09 Апр 2023] 

Общая дискуссия по PlayStation 3

Приложения для PlayStation 2

Общая дискуссия по PlayStation 2

ПК софт для PlayStation 5

[pvc1 в 22:18|15 Мар 2023] 

Программы и Приложения для PlayStation Portable

[pvc1 в 16:40|11 Мар 2023] 

Эмуляторы для PlayStation Vita

[pvc1 в 16:39|11 Мар 2023] 

Прошивки для PlayStation 4

[pvc1 в 19:03|08 Мар 2023] 

Прошивки и приложения для PlayStation 3

[pvc1 в 09:03|08 Мар 2023] 

Приложения для PlayStation 2

[pvc1 в 20:18|04 Мар 2023] 

ПК софт для PlayStation 4

[pvc1 в 19:38|03 Мар 2023] 

Ошибка — Warning: Division by zero in, как исправить

Ошибка Division by zero, как исправить ошибку Warning: Division by zero in

division by zero это не ошибка при установке игры — это обычное деление на ноль…

  1. Что означает ошибка Division by zero
  2. Как исправить ошибку Warning: Division by zero in
  1. У нас встретилась вот такая ошибка :

    Warning: Division by zero in адрес on line 18

    Что означает ошибка Division by zero

    Прежде чем приступать к нашей ошибке — давайте просто попробуем перевести!

    Warning: Division by zero — перевод

    Переведем данную ошибку с английского и нам сразу станет все ясно!

    Warning — предупреждение, сигнал сущ

    Division — деление, отдел, раздел, распределение сущ

    by — по, посредством предл

    zero — ноль сущ

    Итого, если мы соберем данную фразу «Warning: Division by zero» на русском, то получим :

    Внимание! Ошибка деления на ноль!

  2. как исправить ошибку Warning: Division by zero in

    Дл ятого, чтобы исправить ошибку «Warning: Division by zero in» нам понадобится скриншот ошибки, который мы приводили раньше. смотрим на него и видим последнее слово и число, line — это линия в файле, 18 — это номер линии где ошибка.

    line 18

    И та часть, которая размыта — это адрес, по которому находится файл с ошибкой Warning: Division by zero in
    как исправить ошибку Warning: Division by zero in

    Далее находим данный файл и удаляем ошибку!

Можете не благодарить, лучше помогите!

COMMENTS+

 
BBcode


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
unit Unit1;   interface   uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   Dialogs, StdCtrls, ExtCtrls;   type   TForm1 = class(TForm)     Image1: TImage;     Button1: TButton;     Label1: TLabel;     Label2: TLabel;     Label3: TLabel;     Edit1: TEdit;     Label4: TLabel;     Label5: TLabel;     Edit2: TEdit;     procedure Button1Click(Sender: TObject);   private     { Private declarations }   public     { Public declarations }   end;   var   Form1: TForm1;   x0, y0:integer; //начало координатных осей   l, a, b:integer;  x,y,i, ymin, ymax, xmin,xmax:real;   dx,mx,my,dy:real;   const m = 50;    e=0.01;   implementation   {$R *.dfm}      function f(x:real):real;  begin    result:= sin(x);  end;   procedure TForm1.Button1Click(Sender: TObject);   begin   l:=b-a;   mx:=410/l;   dx:=l/410;     ymax:=f(a);   ymin:=f(b);   i:=a;    repeat      if f(i)<ymin then        ymin:=f(i);      if f(i)>ymax then         ymax:=f(i);     i:=i+dx;    until i<=b;      my:=440/(ymax-ymin);      with Image1 do    begin      Canvas.Pen.Color:=clWhite;      Canvas.Rectangle(0, 0, ClientWidth, ClientHeight);      a:=StrToInt(Edit1.Text);      b:=StrToInt(Edit2.Text);      x0:= 45;      y0:= 30;        with Canvas do       begin        Pen.Color:=Clblack;// координатная прямая        Pen.Width:= 1;        MoveTo(x0,y0);        LineTo(x0, Height-y0);        MoveTo(x0,Height-y0);        LineTo(Width-x0,Height-y0);        {*LineTo(45,320);        MoveTo(45,320);        LineTo(360,320);*}        MoveTo(x0,y0);        LineTo( x0-3,y0+13);        MoveTo(x0,y0);        LineTo(x0+3, y0+13 );        {*MoveTo(45,20);        LineTo(42,33);        MoveTo(45,20);        LineTo(48,33);*}         MoveTo(Width-x0, Height-y0);         LineTo(Width-x0-13, Height-y0+3);         MoveTo(Width-x0, Height-y0);         LineTo(Width-x0-13, Height-y0-3);        {*MoveTo(360,320);        LineTo(347,323);        MoveTo(360,320);        LineTo(347,317);        kx:=(Width-90)/(xmax-xmin);        ky:=(Height-60)/(ymax-ymin);           y:=f(a);           x:=a;            while a < b do            begin              a:=a+e;              if f(a)< y then              begin y:=f(a);              x:=a;              end;*}         Pen.Color:=Clred;       Pen.Width:= 2;        x:=a;        y:=f(x);        y0:=440;        MoveTo(x0,y0-Trunc(f(x)*my-ymin*my));        repeat        x:=x+dx;        y:=f(x);        LineTo(Trunc(x*mx-a*mx)+x0,y0- Trunc(y*my-ymin*my));        until x>= b ;          end;     end;   end;   end.

Всем привет дорогие читатели блога, а самое главное, любители MapWindow GIS и вообще, любых других геоинформационных систем. Я обещал, что буду постепенно публиковать  материал  по новой версии MapWindow GIS, поэтому данная небольшая статья для решения одной проблемы с новой версии.

Мне уже задавали этот вопрос, а именно, что когда устанавливают компонент TMap на свою форму, а затем просто при компиляции проекта появляется ошибка: floating point division by zero. Если честно, то я не знаю, в какой момент она возникает. Может это связано с системой координат, либо еще что-то, но решается она очень и очень просто, по крайней мере, я так ее решил. Эту ошибку я наблюдал в Delphi 7, что касается других версий Delphi, я сказать ничего не могу, поэтому ее может просто и не быть.

Поэтому, если после обновления MapWindow GIS до версии 4.9.1 или 4.9.2 у Вас появляется подобная ошибка, то ниже будет описано, как ее можно решить. Мы просто отключим исключения, которые возникают с использованием чисел с плавающей точкой.

Для начала нам нужно объявить константу:

const MCW_EM = DWord($133f);

А затем на событие OnCreate формы, либо можно OnShow пишем следующий код:

Вот и все, как видите, ничего сложного. Теперь нам необходимо просто установить компонент на форму и скомпилировать проект. У меня такой ошибки больше не появляется, и программа отрабатывает на 100 процентов.

  • Решение ошибки Floating point division by zero в TXD Workshop для GTA San Andreas - Картинка #1

9 мая 2015

Скачиваний:
3875

Многие сталкивались с такой проблемой, когда при импорте в TXD Workshop вы получали ошибку «Floating point division by zero». Я много времени провел в поиске решения и наконец нашёл. Представляю вам способ избавиться от этой ошибки

Файл заменяет:

Неизвестно

Рекомендуемые файлы

GTA United 1.1 Final

Хоть для консолей и вышла GTA IV, истинные патриоты PC ждут порта на персоналку, коротая дни, играя в San Andreas напичканный модами. Хотим предложить вам глобальный мод, заменяющий всю территорию San Andreas на территорию двух предыдущих игр — GTA: …

Сохранение для Gta United 1.2.0.1 После 2 Миссии

Сохранение после 2 миссии в Gta United 1.2.0.1! Особенности: *Открыты все дома *Есть новая одежда *Сохранение после тяжелой миссии Файл только для мода United 1.2.0.1!!! Качайте Комментируйте! Приятной Игры! …

GTA: United 1.2.0.1

GTA: United 1.2.0.1 Вот и вышло обновление Глобального Мода GTA: United до версии 1.2.0.1 <noindex><a href=»http://www.libertycity.ruhttp://hostingkartinok.com/show-image.php?id=0438e35df131953e34951b57d276eddb» target=&q…

Grand Theft Auto San Andreas: Classic Edition

Данная сборка исправляет большинство проблем в игре. В связи с тем, что разработчики не стали исправлять известные проблемы, всё приходится делать игрокам. Теперь игра будет выглядеть как и должна. Атмосфера улучшена известными исправлениями — таким…

Real Vision v1.1

Real_Vision — модификация по преображению GTA San Andreas, цель мода — сделать графику в игре максимально приближенной к реальности, чтобы не было где-то слишком насыщенных, тёмных или пересвеченных моментов, а выглядело как одно целое. ВЕРСИЯ: 1….

Метро в gta-united

Теперь метро и в gta-united когда вы оказываетесь в начале игры, то помните там есть магазин продажа мотиков и рядом есть подземка и туда надо спуститься и там стоит поезд, а если вы зайдёте на другой станции то вам надо будет подождать прибытие поез…

Переключение между персонажами как в GTA 5 v.2.1

Всем привет,с вами снова Фастик , и снова на тему GTA 5 в GTA San Andreas Этот мод добавляет переключение между персонажами как в GTA 5 , чтобы показать в GTA San Andreas максимальные возможности игры. #Особенности — Каждый игрок может переод…

Замедление времени при стрельбе как в GTA V для GTA San Andreas

При нажатие на клавишу Z время замедлится. И появится эффект, подобный эффекту из GTA V. А индикатор способности, не даст вам злоупотреблять этим преимуществом когда индикатор станет пустым, вам потребуется ждать некоторое время пока он восстановитс…

GTA: United 1.2

Ура! Товарищи свершилось, GTA United возросла до версии 1.2!!! Что за мод? Данный мод разрабатывается с 2008 года. Карты GTA III и GTA Vice City вместе, в GTA San Andreas, с бесчисленным множеством улучшений и совершенно новый инновационный контент, …

Исправление разных текстур

Что было исправлено? Был исправлен биллборд; Был возвращен настенный рисунок из бета-версии; Также был возвращен Zip Pizza из бета-версии; Исправлен вход в аэропорт Лас-Вентураса; Был исправлен объект в интерьере аэропорта Либерти Сити; …

Zombie Andreas Complete Final (Build 3585.64)

———————————————————————- 1. Описание: Zombie Andreas это модификация к игре «GTA: San Andreas», которая полностью изменяет весь геймплей игры. В штатах произошел зомби-апокалипсис, неизвестная инфекци…

Идеальный перевод SanLtd HD

За основу данного русификатора была взята сборка от SanLtd с фиксом от DimZet и siechkeeper, за что всем спасибо. Данная модификация сделает русификатор в HD качестве для Full HD мониторов. Русификацию текстур производил апскейлом, потом что-то дори…

CLEO+ v1.1.3 (Обновление от 15.11.22)

CLEO+ CLEOPlus Обновление от 15.11.2022: Исправлена ошибка «FIX_CHAR_GROUND_BRIGHTNESS_AND_FADE_IN», из-за которой яркость людей была неправильной. Это исправляет освещение людей в таких модах, как Ped Spawn Creator; Исправлена ​​ошибка «SET…

Дальнобойщик в gta-united

Теперь можно работать дальнобойщиком и в gta-united надо перегнать без время тягач с прицепом из аэропорта он находиться справа на острове большой аэропорт там будет на карте стоять значок доллар и надо перегнать в то место где ты появился в начале и…

#1

Ольга14

    Новичок

  • Пользователи
  • 6 сообщений
  • Пол:Женщина
  • Город:СПб

Отправлено 09 Март 2011 — 15:31

Добрый день!
Пожалуйста, помогите разобраться почему программа не хочет считать систему и выдает ошибку  «Floating point division by zero». Считаю однотрубную систему, если меняю на двухтрубную, то расчет выдает, а в случае однотрубной системы не считает. Чем может быть вызвана данная ошибка?

спасибо.

  • Наверх

#2

admin

admin

    Администратор

  • Главные администраторы
  • 312 сообщений
  • Пол:Мужчина
  • Город:ПОТОК

Отправлено 09 Март 2011 — 16:34

Просмотр сообщенияОльга14 (09 Март 2011 — 15:31) писал:

Пожалуйста, помогите разобраться почему программа не хочет считать систему и выдает ошибку  «Floating point division by zero». Считаю однотрубную систему, если меняю на двухтрубную, то расчет выдает, а в случае однотрубной системы не считает. Чем может быть вызвана данная ошибка?

Деление на ноль.  
Где-то  в исходных данных закралась ошибка, Ваш расчёт приложите или вышлите нам, проверим, подскажем, научим программу конкретней сообщать о проблеме.

  • Наверх

#3

Ольга14

Ольга14

    Новичок

  • Пользователи
  • 6 сообщений
  • Пол:Женщина
  • Город:СПб

Отправлено 10 Март 2011 — 09:18

Просмотр сообщенияadmin (09 Март 2011 — 16:34) писал:

Деление на ноль.  
Где-то  в исходных данных закралась ошибка, Ваш расчёт приложите или вышлите нам, проверим, подскажем, научим программу конкретней сообщать о проблеме.

Спасибо за участие. Прикрепляю свой файл для просмотра.

  • Наверх

#4

admin

admin

    Администратор

  • Главные администраторы
  • 312 сообщений
  • Пол:Мужчина
  • Город:ПОТОК

Отправлено 10 Март 2011 — 11:59

Просмотр сообщенияОльга14 (10 Март 2011 — 09:18) писал:

Спасибо за участие. Прикрепляю свой файл для просмотра.

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

  • Наверх

#5

Ольга14

Ольга14

    Новичок

  • Пользователи
  • 6 сообщений
  • Пол:Женщина
  • Город:СПб

Отправлено 10 Март 2011 — 12:18

Просмотр сообщенияadmin (10 Март 2011 — 11:59) писал:

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

Вроде бы версия 2007 года у нас. Прикрепляю файлы обмена еще.

Просмотр сообщенияadmin (10 Март 2011 — 11:59) писал:

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

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

Прикрепленные файлы

  • Наверх

#6

admin

admin

    Администратор

  • Главные администраторы
  • 312 сообщений
  • Пол:Мужчина
  • Город:ПОТОК

Отправлено 10 Март 2011 — 15:51

Просмотр сообщенияОльга14 (10 Март 2011 — 12:18) писал:

Вроде бы версия 2007 года у нас. Прикрепляю файлы обмена еще.
Подскажите, пожалуйста, чтобы получить более свежию версию программы нам нужно заново ее покупать или же можно сделать обновления? Спасибо.

Эти файлы тоже нормально просчитались, без ошибок. чуть позже попробую на версии 2007 года.
В течении года с момента покупки все обновления доступны бесплатно. По завершению года можно продлить ещё на год, Стоимость продления можно посчитать по ссылке http://www.potok.ru/?vs=2

  • Наверх

it_is_good

Участник
****

Репутация: 10
Offline Offline

Пол: Мужской
API: 8.1 Standard
Сообщений: 115


Привет, форумчане! У меня такая проблема, сегодня переустановил виндоус 7 и перестал запускаться exe’шник моего уже готового проекта. Выдает такое сообщение floating point division by zero, хотя раньше все работало, да и остальные не жаловались на такую ошибку. В чем может быть проблема?
Если что, то игра делалась на лицензированном гамаке 8.1, ошибка выдается в самом начале запуска игры, даже не выводится название окна, а ошибка уже появляется. Попробовал повторно винд установить, та же беда
Попробовал обновить гамак до последней версии и стало выдавать
Access violation at address 0061FA9B in module ‘run.exe’/ Read of address 00000008.
Раньше была подключена либа caster. Отключил. Все по старому. Какие есть соображения?


Записан
MusNik

KeeVee Games
GM Pro user
*

Репутация: 733
Offline Offline

Пол: Мужской
Russian Federation Russian Federation

Награды:
3000 сообщений!За постоянность! [200 дней на форуме]За лояльность! [+500 репутации]За отличную игру Rock painting story!За помощь в развитии форума!За отличные статьи по Game Maker!
API: GameMaker Studio 2
Сообщений: 3252

WWW


Хм… Деление на ноль Хм...


Записан

Briginas

floating point division by zero — Ошибка возникающая из-за деления на ноль.


Записан
it_is_good

Участник
****

Репутация: 10
Offline Offline

Пол: Мужской
API: 8.1 Standard
Сообщений: 115


Если бы я в коде сам делил бы на нуль, то мне потом не выдавали бы такое
Access violation at address 0061FA9B in module ‘run.exe’/ Read of address 00000008.


Записан
Vendet

Гл. Администратор
*

Репутация: 772
Offline Offline

Пол: Мужской
Russian Federation Russian Federation

API: Unity 3D
Сообщений: 3951

HellRoom Games

WWW


Access violation at address 0061FA9B in module ‘run.exe’/ Read of address 00000008.

На одном из форумов http://www.gm-d.de…..unter-gm-8/ была такая же причина, проблемы в гм8.1, решение пока как видимо нет, ёё бросила все силы на GM Studio.


Записан
it_is_good

Участник
****

Репутация: 10
Offline Offline

Пол: Мужской
API: 8.1 Standard
Сообщений: 115


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


Записан
Михаил144

Участник
****

Репутация: 21
Offline Offline

Пол: Мужской
Russian Federation Russian Federation

API: Game Maker 8.0 Pro
Сообщений: 181

Помни где ты живешь — Цив-я Брато и Отцеубийства

WWW


windows 7 —    Мда....


Записан

Да пройдутся Святые Катары по земле своими огненными жезлами и возжгутся сердца миллионов огнем чистой Любви….

S_Kleer

Записан

Коты — Мирители

it_is_good

Участник
****

Репутация: 10
Offline Offline

Пол: Мужской
API: 8.1 Standard
Сообщений: 115


Проблема не в семерке, а в багах самого гамака 


Добавлено: Август 05, 2012, 11:46:37
Выкладываю на всякий случай код, с помощью которого получилось избежать этой ошибки.
Сам код настолько дебильный и неправильный  что только он и помог справиться с этим багом 

« Последнее редактирование: Август 05, 2012, 11:46:37 от it_is_good »
Записан
Briginas

Записан
it_is_good

Участник
****

Репутация: 10
Offline Offline

Пол: Мужской
API: 8.1 Standard
Сообщений: 115


AndrewVideoGames, ты хоть в профиль мой заглядывал? Посмотри на мой возраст и подумай, могу я позволить себе лицензию или нет…


Записан
Voldeniaar

Записан

«Даже сумасшедшие предприятия могут осуществиться, если сумасшествовать по обдуманному плану..» (С) А.Сапковский «Божьи Воины»

«Лучше без точно сформулированной цели двигаться вперед, чем без цели стоять на месте, и уж наверняка гораздо лучше, чем без цели пятиться назад.» (С) А.Сапковский «Крещение Огнем»

YellowAfterlife

Videogames, I’m afraid
Главный Модератор
*

Репутация: 440
Offline Offline

Пол: Мужской
Ukraine Ukraine

Награды:
Добавление и перевод новостей о Game Maker!500 сообщений!За постоянность! [200 дней на форуме]За лояльность! [+300 репутации]Настоящий игродел!Знаток Game Maker!
API: GameMaker Studio 2
Сообщений: 731

WWW



Записан

Автор
Сообщение

Moderator

Аватара пользователя

Зарегистрирован: Чт июл 19, 2012 9:40 pm
Сообщения: 4169

Сообщение Ошибка «floating point division by zero» — решение

Специально для тех пользователей у которых возникает данная ошибка при попытке установить лаунчер, хоть и обещали исправить в скором времени, но решить ее можно и сейчас. Для этого достаточно поставить уже распакованный лаунчер, который можно скачать отсюда.
Это временное решение проблемы, поэтому тема повисит до ее скорейшего решения.


_________________

Изображение

Технические проблемы и логи — support@panzar.com
Жалобы на игроков — community@panzar.com

Изображение

Сб апр 06, 2013 2:07 pm

Профиль

GIMP

Аватара пользователя

Зарегистрирован: Чт июн 07, 2012 8:59 pm
Сообщения: 2045
Откуда: Ekaterinburg

Сообщение Re: Ошибка «floating point division by zero» — решение


_________________
ИзображениеИзображение

Сб апр 06, 2013 4:02 pm

Профиль

HimerRokovoi

Moderator

Аватара пользователя

Зарегистрирован: Чт июл 19, 2012 9:40 pm
Сообщения: 4169

Сообщение Re: Ошибка «floating point division by zero» — решение

Именно.


_________________

Изображение

Технические проблемы и логи — support@panzar.com
Жалобы на игроков — community@panzar.com

Изображение

Сб апр 06, 2013 9:03 pm

Профиль

MaNGusT

Professional Whiner

Аватара пользователя

Зарегистрирован: Пн май 16, 2011 9:20 pm
Сообщения: 2362
Откуда: Vorkuta, Russia

Сообщение Re: Ошибка «floating point division by zero» — решение

деление на ноль обычно из-за «мохнатых» рук происходит).. ну тех, которые «пишут».))


_________________
ИзображениеИзображение
Welcome to my stream

Ср апр 10, 2013 6:44 pm

Профиль

zhelka

Аватара пользователя

Зарегистрирован: Вс июн 10, 2012 2:00 pm
Сообщения: 3599

Сообщение Re: Ошибка «floating point division by zero» — решение

Или тех, кто «устанавливает».

Ср апр 10, 2013 6:54 pm

Профиль

Palefox

Аватара пользователя

Зарегистрирован: Пт июл 08, 2011 11:53 am
Сообщения: 1788
Откуда: Moscow, Russia

Сообщение Re: Ошибка «floating point division by zero» — решение

На самом деле ошибка была в сущей мелочи.

Достаточно скачать полный инсталлер через торрент. :idea:

Ср апр 10, 2013 7:01 pm

Профиль

Sergey2303

Зарегистрирован: Сб апр 13, 2013 3:49 pm
Сообщения: 1

Сообщение Re: Ошибка «floating point division by zero» — решение

У меня в данный момент вот эта проблема «floating point division by zero» помогите её решить :cry:

Сб апр 13, 2013 3:56 pm

Профиль

HimerRokovoi

Moderator

Аватара пользователя

Зарегистрирован: Чт июл 19, 2012 9:40 pm
Сообщения: 4169

Сообщение Re: Ошибка «floating point division by zero» — решение


_________________

Изображение

Технические проблемы и логи — support@panzar.com
Жалобы на игроков — community@panzar.com

Изображение

Сб апр 13, 2013 5:58 pm

Профиль

Panzar_men

Зарегистрирован: Ср май 22, 2013 10:08 am
Сообщения: 4

Сообщение Re: Ошибка «floating point division by zero» — решение

Здорово У меня есть один вопрос почему когда я скачал игру и прошёл обучение мне не дали 50 кристаллов а зелья дали !

Ср май 22, 2013 10:15 am

Профиль

Фитида

Moderator

Аватара пользователя

Зарегистрирован: Вт дек 11, 2012 12:39 pm
Сообщения: 16862
Откуда: Россия, Калуга

Сообщение Re: Ошибка «floating point division by zero» — решение

Где ты там увидел что за обучалку кристаллы дают? Только бутылки, а кристаллы когда в вк 100к подписчиков наберется.


_________________
Gamerts.ru — адрес TS для общения (500+ мест)
ИзображениеИзображение
Как известно,бобры добры.Добротою полны бобры.Хочешь себе добра — надо позвать бобра.Если ты без бобра добр,значит сам ты в душе бобр.

Ср май 22, 2013 10:18 am

Профиль

уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

Наконец-то! Свершилось чудо! Наконец-то поймался тот самый «Floating point divizion by zero» о котором мне твердили несколько человек с тех самых пор, как я выложил первую версию клиента для DelphiFeeds.ru. Знаете, я бы никогда и ни за что не поверил в то, что когда-нибудь буду радоваться пойманному в своей собственной программе багу…Серьезно. Пытался найти эту ошибку всякими разными способами — таскал программу на работу, проверял на всех подряд компах — нет ошибки! А всего-то надо было…сесть за компьютер жены и запустить программу там и…

Вот он родимый «Floating point divizion by zero» как есть. 

Надо сказать, до последнего момента пока не посмотрел отчёт MadExcept относительно этой ошибки, я сомневался: то ли этот баг конкретно мой (хотя никаких делений в программе, в принципе нету), то ли сам стиль глючит. А вот, что мне выдал MadExcept после того как я создал новый проект с Jet Style внутри:

00a374dc +080 Project8.exe  FMX.Types        8459 +7   TCanvas.CreateFromBitmap
009b6fdf +01b Project8.exe  FMX.Canvas.D2D   688 +1    TCanvasD2D.CreateFromBitmap
00a36f96 +016 Project8.exe  FMX.Types        8345 +1   TCanvasManager.CreateFromBitmap
00a3165e +01a Project8.exe  FMX.Types        6796 +3   TBitmap.GetCanvas
009d6771 +321 Project8.exe  FMX.Platform.Win 1889 +50  TWindowBorderWin.InvalidateRegion
009d6ed2 +06e Project8.exe  FMX.Platform.Win 2001 +10  TWindowBorderWin.RecreateRegion
009d8964 +d84 Project8.exe  FMX.Platform.Win 2411 +138 WMNCMessages
009d9484 +618 Project8.exe  FMX.Platform.Win 2684 +136 WndProc
774b0107 +02b ntdll.dll KiUserCallbackDispatcher
00a73a93 +053 Project8.exe  FMX.Forms        3077 +6   TCommonCustomForm.SetWindowState
00a70103 +017 Project8.exe  FMX.Forms        1742 +1   TWindowBorder.DoMinClick
00a47791 +17d Project8.exe  FMX.Types        13319 +28 TControl.Click
0098d21a +04a Project8.exe  FMX.Controls     2468 +14  TCustomButton.Click
00a47cfe +096 Project8.exe  FMX.Types        13424 +7  TControl.MouseUp
0098d46f +073 Project8.exe  FMX.Controls     2529 +13  TCustomButton.MouseUp
00a70664 +074 Project8.exe  FMX.Forms        1857 +4   TWindowBorder.MouseUp
009d88ae +cce Project8.exe  FMX.Platform.Win 2379 +106 WMNCMessages
009d9585 +719 Project8.exe  FMX.Platform.Win 2710 +162 WndProc
75f87885 +00a USER32.dll DispatchMessageW
009d1b99 +039 Project8.exe  FMX.Platform.Win 487 +8    TPlatformWin.HandleMessage
00a6c0c6 +042 Project8.exe  FMX.Forms        1328 +3   TApplication.HandleMessage
009d1b0f +02b Project8.exe  FMX.Platform.Win 464 +4    TPlatformWin.Run
00a6f486 +0da Project8.exe  FMX.Forms        1473 +12  TApplication.Run
00a9ede3 +03b Project8.exe  Project8         17 +3     initialization
74d733a8 +010 kernel32.dll  BaseThreadInitThunk

После этого отчета мое состояние можно было бы описать примерно так:

Приложение, которое выглядит вот так:

оказалось виновато в том, что оно вообще запустилось (TApplication.Run) и пользователь ткнул мышкой куда-то по форме (куда-то — это на кнопочку минимизации окна). При этом, обращу внимание на тот факт, что демка, идущая в комплекте со стилем работает без ошибок И «секрет» крылся в том, что демо-приложение Embarcadero выглядело вот так:

Т.е свойство EnableBorderStyle было выставлено как False. Стоит его вернуть в True и «Floating point divizion by zero» выскакивает аки чёрт из табакерки. Итак место ошибки было более менее определено — бордюры окна, а точнее стилизованные бордюры окна. Просмотрел стиль на наличие или отсутствие каких-либо элементов бордюра — вроде бы все в норме, размеры TRect’ов выставлены правильно, положение элементов тоже. Полез снова в отчет, начал ковыряться в исходнике FMX и обнаружил место где конкретно срабатывает Exception:

//FMX.Canvas.GDIP.pas constructor TCanvasGdiPlus.CreateFromBitmap(const ABitmap: TBitmap); begin inherited CreateFromBitmap(ABitmap); FGPGraphics := TGPGraphics.Create(TGPBitmap(FBitmap.Handle)); FGPGraphics.SetSmoothingMode(SmothingDefault); FGPGraphics.SetPixelOffsetMode(PixelOffsetModeHalf); FGPGraphics.SetInterpolationMode(InterpolationModeHighQuality); FGPGraphics.SetTextContrast(TextContrast); if GlobalUseGDIPlusClearType then FGPGraphics.SetTextRenderingHint(TextRenderingHintClearTypeGridFit) else FGPGraphics.SetTextRenderingHint(TextRenderingHintAntiAlias); FGPPen := TGPPen.Create($FF000000); FGPPenBrush := TGPSolidBrush.Create($FF000000); FGPBrush := TGPSolidBrush.Create($FFFFFFFF); FGPFamily := TGPFontFamily.Create('Tahoma'); FFontScale := 96 / FGPGraphics.GetDpiX; //ВОТ ТУТ FGPGraphics.GetDpiX = 0

Почему так происходит и когда вызывается этот самый конструктор, скажу откровенно, особенно не искал и в обозримом будущем не планирую — на то есть специально обученные люди. Факт наличия бага есть, баг хоть и не всегда, но воспроизводим. Вполне возможно, что зависит он от видюшки, т.к. у меня стоит ATI Radeon, а у жены на компе — NVidia. Точное место откуда вываливается злосчастный «Floating point divizion by zero» указано. Накорябал баг-репорт…но что-то я его не наблюдаю в этом списке, поэтому, если что — баг остается «вакантным» — можете отправить его в QC повторно Пока же, для тех, кто хочет использовать Jet Style в своих приложениях, небольшой совет:

Не ставьте у приложения с Jet Style свойство формы EnableBorderStyle в значение True — избавите и себя и пользователей от лишнего бага

А я тем временем поисправляю кой-чего в клиенте DelphiFedds.ru, кстати там введена регистрация пользователей, так что скоро нас все посчитают Всем удачи и до новых встреч!

Update. Баг-репорт с описанием ошибки опубликован.  Кто встречался с этой ошибкой — голосуйте

Скачать программу можно на форуме.

0
0
голоса

Рейтинг статьи

уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

Страницы: Назад 1 25 26 27 28 [29] 30 31 32 33 41 Далее   Вниз

Тема: Вопросы о PlayStation 2  (Прочитано 121000 раз)

0 Пользователей и 1 Гость просматривают эту тему.


то для 70х ревизии пс2 нада, тебе оно для твоей 79х не нужно


Можно ли заставить показывать игры от пс1 по компоненту?

Запусти Tekken 3.


Но не понял что там на фото справа от чипа

Это лазер-фикс. Точнее, диодные ограничители напряжения подаваемого на катушки головки. Было актуально для 39000, если не ошибаюсь


SAN-DIABLO,
надеюсь, ты не упустил, что там в лоте 2 (два) набора.


Было актуально для 39000, если не ошибаюсь

не, это актуально для 70х, а вот у 39х и 50х там перерезали дорожку и паяли проводок тем самым снижая питание драйвера, если мне память не изменяет, хотя я в свой 39х и 50х ничего не фмксил.
а вот 70х часто фиксил, один раз было дело пришлось фиксить в тихаря одному клиенту(он был категорически против фикса) а то он три раза за неделю приходил и менял лазер каждый раз, линза всегда была аж поплавленая и вздутая )))


SAMael,
по гарантии приходил или за деньги?


Rumata, Благодарю за информацию.
Yoti, Да мне собственно два и надо.


SAMael,
по гарантии приходил или за деньги?

Та по гарантии только 1 лазер сменил, а 2 за деньги уже, ато ну нафиг.
Чел начитался что мол после лазер фикса диски плохо читаются и не все игры идут и не хотел его ставить, зато лазеры ему жечь видать понравилось, ото я поставил и всё отличненько, и ему дешевле и мне меньше головняка, главное все довольны  ;)


Есть у кого-нибудь схема распайки IDE шлейфа к Пс2 слим 70008?



У меня проблема, проблема в том что плохо читаются диски. Я значит лазер заменил в ПС2, и все стало работать только хуже, например свап маджик пс2 перестала видеть. Я вот думаю может у меня проблема была не в лазере, а в чем то другом. Но вот в чем не подскажите?


приветствую всех. сегодня настроил сеть между компом и Playstation 2, через роутер и комутатор. все заработало, решил поставить игру с диска, началась установка. выскочила ошибка, игра не запускается. но, теперь и на Playstation 2 не посмотреть содержимое HDD через HDL-DUMB 0.8.6 выдает ошибку BAD APA Partition Table. как так получилось??   :? и как сделать так, чтобы все работало??   :-


Кусь, котаны! DualShock 3 на PS2 постоянно вибрирует и в вечном поиске. Джойстик проводной Dialog для PS3 и PC постоянно вибрирует и никак не находится. Так и должно быть?


~MaoSadie~, у тебя с джоем что то,так не должно быть.у меня есть похожий Thrust Master ни чего не вибрирует лишнего.


Доброго времени суток!
Раздобыл таки наконец то карту памяти, установил FreeMCboot что бы играть с флешки. И вот появились проблемы, в связи с этим и вопросы.
1. Для установки игр на флешку Я пользуюсь программой USBUtil на некоторые игры он выдает ошибку «No se pudo explorar el ISO, no existe o esta dacado» следом ошибка error en SYSTEM.CNF, archivo no legible o em mal estado
2. В связи с этим при запуске через Open PS2 Loader выдает ошибку «error, could not run the item» после создания образа выдает Игры с ошибками попробуйте Очис. Место востановление.
3. Я пользуюсь джойстиком от PS1 (оригинальным не китайской подделкой) Иногда при запуске uLaunchELF курсор начинает перемещаться с дикой скоростью, и все остальные кнопки тоже дико реагируют, такое ощущение будто нажал на джойстике от nes турбо А или турбо Б. Когда такая фигня происходит игры загружаются очень очень медленно.
4. Еще прочитал, что нужно флешку как то дефрагментировать если есть ошибки, как это сделать?
5. Слышал что как-то вроде можено играть через ethernet кабель, что бы не париться с флешкой, реально ли это?
6. Пытался русифицировать OPL скинул файлы font_Russian_0.9.3.ttf и lang_Russian_0.9.3.lng в mc0:/SYS-CONF/ но программа все равно русский язык не видит.
Знаю, что в этой теме многие вопросы обсуждались, но искать нужные посты долго и нудно.
Помогите кто чем сможет пожалуйста  :-

« Последнее редактирование: 16 Февраль 2016, 22:41:06 от ReZistanse »


1. Для установки игр на флешку Я пользуюсь программой USBUtil на некоторые игры он выдает ошибку «No se pudo explorar el ISO, no existe o esta dacado» следом ошибка error en SYSTEM.CNF, archivo no legible o em mal estado

скорей всего проблема в неправильном ID игры,нужно пересобрать образ игры,как это сделать давно писал тут

3. Я пользуюсь джойстиком от PS1 (оригинальным не китайской подделкой) Иногда при запуске uLaunchELF курсор начинает перемещаться с дикой скоростью, и все остальные кнопки тоже дико реагируют, такое ощущение будто нажал на джойстике от nes турбо А или турбо Б. Когда такая фигня происходит игры загружаются очень очень медленно.

купи оригинальный DualShock 2 проблема исчезнет

4. Еще прочитал, что нужно флешку как то дефрагментировать если есть ошибки, как это сделать?

куда проще просто отформатировать

5. Слышал что как-то вроде можено играть через ethernet кабель, что бы не париться с флешкой, реально ли это?

реально, читай тут спойлер запуск игр по сети

6. Пытался русифицировать OPL скинул файлы font_Russian_0.9.3.ttf и lang_Russian_0.9.3.lng в mc0:/SYS-CONF/ но программа все равно русский язык не видит.

для каждой версии OPL файлы руссификации свои,ищи именно под свою версию OPL


ReZistanse, Форматни флешку,закинь игры, утилитой Ауслоджик сделай дефрагментацию ( на рутрекее в раздаче есть в папке софт).И пробуй запускать.


vitas155, Спасибо, афигительно помог  :D теперь буду знать больше))

Добавлено позже:
Drapon, и тебе спасибо))

« Последнее редактирование: 17 Февраль 2016, 14:43:21 от ReZistanse »



тут очень хороший FAQ,

По-хорошему эти ФАКи надо куда-то отдельно выносить. Если кто не помнит — Рутрекер заблокирован, по крайней мере некоторыми провайдерами


Надо отдельную тему по ОПЛ для ПС2.


В этой теме решил задать свой вопрос по ПС2. Дело в том, что есть проблема со звуком в паре нужных мне игр. Звук в роликах тормозит и заикается.
При этом без разницы, в Rule of rose на болванке, в Headhunter на лицензии. И через оптический выход на колонки, и через компонент на телевизор.
Исключительно в видеовставках, в самой игре нет, к тому же только в этих двух играх. Это решаемо?


У меня тоже в некоторых играх,в заставке,звук заикаеться,почему такое происходит?Лазер отличный,читает четко,видео не тормозит.


Это значит что у вас обоих лазеры пашут не так хорошо как вы о них думаете  :)


На фотке это такие слимки выходили или это самопальная доработка? И вопрос 2,она не чипованная и с ней 15 дисков лицухи отдают.За сколь максимум можно ее сторговать?


За сколь максимум можно ее сторговать?

Какую цену не назови, ты скажешь слишком много. Кстати продавцы при попытке торговаться не агрятся на тебя разве?


SILENT_Pavel, Вообще болт ложил на них,таких обьяв по десятку в день.За эту просит 2к но меня смущает насечка на консоли, таких вроде не было.Розовая и металлик и черная.


И сюда барыги набежали :'(
Ну обклеили плёнкой под кожу, моддинг называется :lol:


Rumata, Карбон, че ее отодрать можно и следов не будет?Че сразу барыги то :neznayu:


Страницы: Назад 1 25 26 27 28 [29] 30 31 32 33 41 Далее   Вверх

Прошивки и программы для PlayStation Vita

[pvc1 в 19:36|23 Июн 2023] 

 

Прошивки и программы для PlayStation Vita

[pvc1 в 22:18|22 Июн 2023] 

 

Прошивки и программы для PlayStation Vita

[pvc1 в 22:06|22 Июн 2023] 

 

Общая дискуссия по PlayStation 3

[Bamc в 05:08|22 Июн 2023] 

 

Приложения для PlayStation 4

[pvc1 в 21:27|20 Июн 2023] 

 

ПК софт для PlayStation 4

[pvc1 в 18:56|20 Июн 2023] 

 

Общая дискуссия по PlayStation 1

[pvc1 в 22:05|15 Июн 2023] 

 

ПК софт для PlayStation 4

[pvc1 в 20:17|12 Июн 2023] 

 

Приложения для PlayStation 2

ПК софт для PlayStation 4

[pvc1 в 21:54|11 Июн 2023] 

 

ПК софт для PlayStation Vita

[pvc1 в 21:38|11 Июн 2023] 

 

ПК программы для PlayStation 2

[pvc1 в 08:07|09 Июн 2023] 

 

Железные вопросы PlayStation 2

Общая дискуссия по PlayStation 5

[pvc1 в 21:06|07 Июн 2023] 

 

ПК софт для PlayStation 4

[pvc1 в 10:08|04 Июн 2023] 

 

Приложения для PlayStation 5

[pvc1 в 09:58|04 Июн 2023] 

 

Общая дискуссия по PlayStation 3

Прошивки и приложения для PlayStation 3

ПК программы для PlayStation 3

[pvc1 в 21:47|03 Июн 2023] 

 

ПК программы для PlayStation 2

ПК программы для PlayStation 2

[pvc1 в 07:21|02 Июн 2023] 

 

ПК программы для PlayStation 3

[pvc1 в 09:19|01 Июн 2023] 

 

Общая дискуссия по PlayStation 5

[pvc1 в 09:13|01 Июн 2023] 

 

Железные вопросы PlayStation 2

Общая дискуссия по PlayStation 5

[pvc1 в 10:18|26 Май 2023] 

 

Программы и Приложения для PlayStation Portable

[pvc1 в 17:46|24 Май 2023] 

 

Мобильные приложения

[pvc1 в 17:45|24 Май 2023] 

 

Прошивки и приложения для PlayStation 3

[pvc1 в 09:27|15 Май 2023] 

 

Общая дискуссия по PlayStation 2

ПК софт для PlayStation Vita

[pvc1 в 15:19|09 Май 2023] 

 

Приложения для PlayStation 2

Программы и Приложения для PlayStation Portable

[pvc1 в 11:43|05 Май 2023] 

 

Об играх PlayStation 3

Программы и Приложения для PlayStation Portable

[pvc1 в 08:01|01 Май 2023] 

 

Прошивки и приложения для PlayStation 3

[pvc1 в 21:59|30 Апр 2023] 

 

Об играх PlayStation Vita

[pvc1 в 17:42|27 Апр 2023] 

 

Эмуляторы для PlayStation Vita

[pvc1 в 15:53|24 Апр 2023] 

 

Приложения для PlayStation 4

[pvc1 в 19:56|16 Апр 2023] 

 

ПК программы для PlayStation 3

Прошивки и программы для PlayStation Vita

[pvc1 в 20:03|12 Апр 2023] 

 

Прошивки и приложения для PlayStation 3

[pvc1 в 21:30|09 Апр 2023] 

 

Общая дискуссия по PlayStation 3

Приложения для PlayStation 2

Общая дискуссия по PlayStation 2

ПК софт для PlayStation 5

[pvc1 в 22:18|15 Мар 2023] 

 

Программы и Приложения для PlayStation Portable

[pvc1 в 16:40|11 Мар 2023] 

 

Эмуляторы для PlayStation Vita

[pvc1 в 16:39|11 Мар 2023] 

 

Прошивки для PlayStation 4

[pvc1 в 19:03|08 Мар 2023] 

 

Прошивки и приложения для PlayStation 3

[pvc1 в 09:03|08 Мар 2023] 

 

Приложения для PlayStation 2

[pvc1 в 20:18|04 Мар 2023] 

 

  • Почему zoom выдает ошибку при регистрации
  • Почему tlauncher выдает ошибку
  • Почему zoom выдает ошибку при подключении
  • Почему terraria выдает ошибку
  • Почему zoom выдает ошибку 104101