Как создать приложение на c на андроид
Неправильное использование рабочих компьютеров компании является обычной практикой среди пользователей во многих компаниях, где отсутствуют надлежащие механизмы мониторинга. Это приводит к напрасной трате ресурсов и снижает скорость достижения общих целей организации. Таким образом, для достижения желаемых результатов необходим эффективный механизм, с помощью которого системный администратор может отслеживать и контролировать рабочие станции сотрудников.
Целью рассматриваемого проекта является разработка приложения на основе Xamarin.Forms, которое позволит системному администратору проводить удаленное наблюдение и контроль рабочих станций на рабочем месте. Проект будет включать разработку двух приложений: одно будет работать на рабочих станциях, другое – на мобильном телефоне администратора. Внедрение механизма позволит администратору не только следить за действиями пользователей, но и даст возможность удаленно контролировать конкретные рабочие станции.
Идея проекта
Итак, в проекте мы создадим два приложения, серверное и клиентское.
Серверное приложение будет постоянно работать на каждой рабочей станции. Приложение сервера будет связано с клиентским приложением через Wi-Fi соединение. Программа делает скриншот активности пользователя по требованию администратора и отправляет его в клиентское приложение. Серверное приложение будет принимать, интерпретировать и выполнять команды, полученные от мобильного (клиентского) приложения.
1.1. Создаем консольное приложение
1.2. Добавляем соответствующее пространство имен
Создаем экземпляр TcpClient и TcpListener . Объявляем строку локальной переменной с именем ipString .
1.3. Узнаем IP адрес вашей машины
Напишем метод внутри функции Main , который будет перехватывать и возвращать IP-адрес машины.
1.4. Слушаем порт 1234
1.5. Создаем соединение с клиентом
1.6. Пишем метод Sleep
Расширяем пространство имён проекта. Добавляем внутри функции Main метод Sleep :
2.1. Создаем проект Xamarin.Forms
Открываем Visual Studio и переходим в New Project-> Cross-platform-> Xamarin.Forms-> Blank app . Даем ему имя, например, XamarinFormsClient .
2.2. Создаем класс соединения
Далее в нашем проекте нужно определить класс соединения для создания экземпляра TCP Client. Создаем новый класс с именем Connection.cs и записываем в него следующий код.
2.3. Создание пользовательского интерфейса
Нам нужны два редактируемых текстовых поля для IP-адреса и порта, и одна кнопка для соединения с сервером. Откроем файл макета MainPage и заменим код на следующий:
2.4. Описываем метод соединения
Опишем взаимосвязь элементов управления пользовательского интерфейса с классом MainPage . Далее свяжемся с приложением сервера, используя IP-адрес и порт рабочей станции.
2.5. Обновление класса приложения
Открываем файл App.xaml внутри этого класса и добавляем следующий код в конструктор класса App.
Давайте проверим соединение сервера и клиентского приложения, которое мы только что создали. Основной модуль запуска приложения Xamarin.Forms отобразит главную страницу. Запустим серверное приложение, скопируем IP-адрес и порт рабочей станции из серверного приложения. Поместим в клиентское приложение и нажимаем Connect.
Поговорим о том, как будет работать функция скриншота. Клиент запрашивает скриншот, отправляет команду в виде строки "TSC1" , на рабочей станции серверное приложение делает скриншот. Размер изображения может быть большим, поэтому мы преобразуем данные снимка экрана в пакеты байтового типа и отправляем клиентскому приложению. Когда клиент получит пакеты байтового типа, он преобразует их в исходную форму.
Добавим функцию выключения рабочей станции. Если клиент отправляет команду “SHTD3” серверному приложению, сервер выполнит функцию выключения компьютера.
Вернемся к серверному приложению и опишем функции снимка экрана выключения рабочей станции. Откроем файл program.cs и запишем следующий код внутри цикла while , который мы реализовали ранее.
Добавим в серверное приложение следующие пространства имен. Иначе Visual Studio не распознает ключевое слово graphics функции снимка экрана.
Вернемся к program.cs и поместите эти функции в основной класс.
Итак, мы закончили с серверным приложением.
7.1. Создаем страницу операций
Возвращаемся в клиентское приложение (Xamarin.Forms) и добавляем новый ContentPage с именем OperationsPage . Внутри этого макета добавим следующий код, чтобы создать больше кнопок.
7.2. Добавляем в класс операций методы ожидания
Открываем файл OperationPage.xaml и переносим следующий код.
8. Тестируем!
Запускаем оба приложения – сервер и клиент. Вводим IP-адрес и порт рабочей станции, которые вы видите на экране вывода приложения сервера, в клиентское приложение и нажимаем Connect .
После подключения к серверу теперь мы можем выполнять различные команды.
Ура! Всё работает. При нажатии на Sleep рабочая станция переходит в спящий режим. При нажатии на Take Screenshot через пару мгновений скриншот рабочей станции оказывается внутри клиентского приложения.
Как установить Visual Studio на Windows
Требования:
Visual Studio 2017
Xamarin Live [Необязательно]
Загрузите установочный пакет Visual Studio и при запуске его спросят, какие компоненты вы хотите установить. Для разработки под Android, посмотрите в разделе «Рабочие нагрузки» и выберите «Мобильная разработка с C ++», затем выберите «Разработка Android».
Разработка Android C ++ с помощью Visual Studio
Запустите редактор Visual Studio и перейдите к файл > новый > проект > Visual C ++ > Кроссплатформенный > Android. Дайте вашему приложению имя и нажмите «Хорошо».
Я не буду рассказывать вам о кодировании приложения, но после создания проекта вы можете перейти к меню «Платформа решений» и выбрать архитектуру устройства, для которого вы компилируете, а затем нажать клавишу F5, чтобы запустить приложение в эмулятор, который вы подключили к Visual Studio, или отправьте его в Xamarin Live на вашем устройстве для предварительного просмотра и отладки.
Редактирование и отладка кода Java
Подключение Xamarin Live к Visual Studio
Если вы предпочитаете просматривать и отлаживать приложения непосредственно на своем телефоне Android вместо эмулятора, Xamarin Live для вас.
Сначала вам нужно установить приложение Xamarin Live из Google Play на ваше устройство Android. Затем скачайте Xamarin Updater для Visual Studio 2017 и установите его на свой компьютер.
Теперь вам нужно создать приложение для Android в виде проекта Xamarin, и вам будет предложено выполнить сопряжение устройства с помощью QR-кода на вашем экране.
Начать без отладки: Это позволяет редактировать приложение непосредственно на вашем устройстве, и приложение будет перезапущено всякий раз, когда изменения кода будут сделаны и сохранены.
Начать отладку: Это позволяет вам проверять переменные и точки останова вашего приложения, но код нельзя редактировать.
Live Run Текущее представление: Здесь вы можете отредактировать приложение в Visual Studio и увидеть изменения приложения на экране вашего компьютера. По сути, он транслирует окно приложения Xamarin Live на ваш рабочий стол.
Вот и все для этого руководства! Если не считать, что вы держите руку и проводите кодирование приложения, добавить больше нечего. Вы можете быть заинтересованы в следующих темах Appuals:
Как создать базовое приложение для Android в Phonegap
Как создать собственное ПЗУ из проекта Android с открытым исходным кодом | Pt. 2
Использование нативного кода, написанного на C или С++ — это тема, которую многие разработчики не затрагивают вовсе. Но порой использование C++ в приложениях намного упрощает/ускоряет разработку. В этой статье будут рассмотрены основные принципы работы с native кодом.
Предварительная настройка
Если у вас ещё не настроен Eclipse, то читаем как настроить Eclipse для работы с Android. Только помимо того, что в статье сказано, при установке ещё необходимо выбрать и установить NDK плагин.
Так же вам необходимо установить CDT для Eclipse. Под Виндой вам вроде как ещё понадобиться установить Cygwin.
Теперь необходимо создать проект и прописать пути.
- Создать Android Application.
- Eclipse -> Window -> Preferences -> Android -> set path to SDK
- Eclipse -> Window -> Preferences -> Android -> NDK -> set path to the NDK
- Нажмите правой кнопкой мыши на проект и выберите Android Tools -> Add native support
В проекте будет создана папка jni, где вы должны размещать файлы с C++ кодом. В ранних версиях был баг, когда Eclipse не мог верно настроить пути до некоторых хэдеров из NDK. В последней версии всё нормально. Просто очистите проект (Clean project), а затем перестройте его (Build project).
Зачем нужен NDK?
Думаю, необходимо предварительно объяснить, когда вообще стоит (и стоит ли?) использовать ndk. Многие советуют использовать C++, когда требуются какие-то большие/сложные вычисления. Что значит сложно? =/ В общем, лучше назову конкретные случаи, когда использование NDK оправдано:
Возможности NDK огромны. Вы можете из Java вызывать C++ методы. В то же время, вам ничто не машет вызывать Java методы из C++. Даже есть возможность создавать приложение практически без использования Java, используя NativeActivity (API 9 и выше).
Java. Путешествие в Native (или туда и обратно).
Да простит меня профессор за упоминание его работы (: И так, рассмотреть всё в рамках одной статьи невозможно. Поэтому, для начала реализуем лишь вызов native методов из Java.
Перечислю кратко основные моменты при работе с native:
- Создание файлов с C++ кодом.
- Определение C++ методов для экспорта.
- Создание .mk файлов.
- Генерация библиотеки.
- Подключение библиотеки в Java и вызов C++ методов.
Создание файлов с C++ кодом
В native определим всего 3 метода: передача строки, изменение строки, получение строки.
Создадим для начала файл def.h, подключим пару нужных файлов и определим методы для вывода в консоль.
Создадим файл MyNative.h и определим в нём спецификации методов для экспорта, чтоб вызывать их из Java кода потом.
Теперь все три метода можно вызвать из Java кода. Я этот код ручками писал. Но можно заюзать javah, которая будет сама генерить эти заголовки. extern "C" нужен, чтобы компилятор C++ не менял имена объявленных функций.
Ну и создадим MyNative.cpp с реализацией методов.
Работа с Application.mk
В этом файле описаны глобальные настройки для сборки либы.
Работа с Android.mk
Здесь указываем параметры/настройки по линковке и прочее, чтобы собрать либу.
В Android.mk вообще есть не мало всяких флагов и прочего. Можно добавлять в сборку уже готовые библиотеки и т.д. В следующих статьях напишу, как это делается.
После того, как вы создали C++ файлы и .mk сделали, можно забилдить проект, тогда в папке obj появится библиотека libAndroidNDK.so.
Подключение библиотеки в Java и вызов C++ методов.
Теперь остаётся только написать Java код. Сделаем простенькое приложение. Разместим поле для ввода текста, три кнопки (передача текста в native, изменение текста в native и возврат изменённой строки из native) и поле для нового текста, который получили из native кода.
Для того, чтобы использовать native методы создадим класс AndroidNDK.
Этот код выполнит загрузку нашей библиотеки, в которой реализованы методы. Обратите ещё раз внимание на этот класс и методы и вспомните наименование методов при экспорте в native коде: Java_ru_suvitruf_androidndk_AndroidNDK_ChangeString.
Java код по обработке нажатий на кнопки писать не буду, ибо это тривиальная задача. В любом случае, если понадобиться, можете посмотреть в исходниках к статье. В логе будет вот что:
В мире программирования существует традиция: каждый раз, когда вы изучаете язык, вы должны создать простую программу, которая будет отображать «Hello World!» на экране. Это гарантирует, что вы сможете установить и запустить необходимые инструменты и скомпилировать что-то простое. Это как читать в микрофон «тестирование, тестирование, 1, 2, 3»!
В этом примере я использую Rider от JetBrains для создания консольного приложения, вы можете скачать Visual Studio (бесплатно). Итак, как только вы скачали Rider или Visual Studio, щелкните:
File > New > Project
Так мы создаем приложение, которое будет работать в консоли Windows.
После этого в главном окне появится базовая структура проекта. Вам будет представлен код, который выглядит следующим образом:
Теперь просто добавьте две строки, например:
Так мы днем команду писать «Hello World!» На экране, а затем ждать нажатия клавиши. Как только пользователь коснется любой клавиши, программа завершится и автоматически закроется.
Итак, что именно здесь происходит?
Внутри каждого класса будут методы. Эти методы представляют собой фрагменты кода, на которые можно ссылаться в любое время изнутри этого класса, а иногда и извне.
В этом случае класс называется Program. Это определяется прямо вверху строкой, которая гласит: class Program. И если вы откроете окно «Обозреватель решений» справа, вы сможете найти Program.cs. Имя класса всегда совпадает с именем файла.
Затем мы используем фигурную скобку, чтобы содержать весь следующий код. Фигурные скобки говорят нам, что все последующее принадлежит друг другу. Таким образом, пока скобка не закрывается, весь следующий код является частью Program.
За ним следует наш первый метод, определяемый следующей строкой:
Смущенны? Не волнуйтесь, со временем вы всё поймете.
Использование методов
Итак, создайте новый метод, который живет в классе Program (поэтому он должен находиться в фигурных скобках, но за пределами фигурных скобок, принадлежащих «Main»).
Назовите этот «NewMethod», а затем вставьте сюда две строки, которые вы только что написали. Это должно выглядеть так:
Теперь добавьте ссылку на NewMethod в свой метод Main, например:
Ссылка «вызовет» только что созданный метод, по существу направляя программу в этом направлении. Нажмите Run, и вы увидите, что происходит то же самое, что и раньше. За исключением этого момента, если бы вы захотели, вы могли бы написать «NewMethod ();» столько раз, сколько захотите, и продолжайте повторять текст без написания большого количества кода.
Аргументы, заключенные в скобки в этом случае, поэтому необходимы только потому, что Microsoft разработала метод Main таким образом. Однако мы могли оставить скобки пустыми.
Использование переменных
10 + x = 13
Найдите x
Именно так и работает переменная в программировании. За исключением этого, переменная может представлять множество различных типов данных, включая текст.
Итак, внутри метода NewMethod () сначала вы создадите свою переменную, а затем присвоите ей значение. Затем мы добавим его в нашу команду «WriteLine»:
Поскольку «число» создается внутри NewMethod (), мы не можем получить к нему доступ из другого места в нашем коде. Но если мы разместим его вне всех методов, то он станет доступен глобально. Однако для этого нам нужно убедиться, что переменная статична:
Наконец, есть еще один способ передать данные, а именно использовать его в качестве аргумента, тем самым передавая его в метод. Это может выглядеть так:
Здесь мы определяем наш метод NewMethod как требующий одного аргумента, который должен быть целым числом и который в методе будет называться «number». Мы делаем это, просто добавляя эту информацию в фигурные скобки. Затем, когда мы вызываем метод из любого другого места в программе, нам нужно «передать» это значение в скобках. Вы можете создавать методы с несколькими параметрами, и в этом случае вы просто разделяете перечисленные переменные запятыми.
Передача аргументов и использование строк
Попробуйте запустить следующий фрагмент кода и посмотрите, что произойдет:
Вы обнаружите, что вам предлагается ввести свое имя, и тогда консоль будет вас этим радовать. Этот простой фрагмент кода содержит ряд полезных уроков.
Таким образом, вы можете так же легко написать UserName = «Adam». Но вместо этого мы получаем строку из консоли с оператором: Console.ReadLine().
Мы могли бы написать:
Но чтобы наш код был как можно более аккуратным, мы пропустили эти шаги и поместили строку «ReadLine» прямо в скобки.
Затем мы передаем эту строку нашему NewMethod и приветствуем пользователя, используя метод, с которым вы уже знакомы.
Для этого нам нужен «контроль потока» или «условные операторы». На самом деле это просто причудливые способы сказать, что мы собираемся выполнить код более чем одним способом, в зависимости от значения переменной.
Точно так же мы можем сравнивать целые числа и числа с плавающей запятой, и мы можем проверить, больше ли одно из них, чем другое, и т. д. Мы даже можем использовать несколько разных операторов if внутри друг друга, как матрешки. Мы называем это «вложенными if».
В следующий раз
Есть много других стратегий, которые вы можете использовать для управления потоком, включая такие вещи, как операторы переключения. Надеюсь, вы уже видите, как мы можем использовать эти утверждения и методы, чтобы начать делать некоторые полезные вещи. Вы уже можете легко превратить этот код в викторину!
В следующем уроке вы узнаете, как создавать циклы, которые повторяются во времени, а также как создавать новые классы и взаимодействовать с ними. До встречи!
Читайте также: