Ну, Сурагч дал лучший ответ, но пропустил некоторые мелочи, которые были важны для компиляции приложения.
Я надеюсь дать лучший ответ, чем Сурагч, улучшив свой ответ. Я добавлю все недостающие элементы, которые он не поместил.
Я скомпилировал свой apk с помощью приложения для Android APK Builder 1.1.0. Итак, начнем.
Чтобы создать приложение для Android, нам понадобится пара файлов и папок, которые организованы в определенном формате и соответственно написаны с большой буквы.
Рез
макет -> XML-файлы с изображением приложения
Телефон. Подобно тому, как HTML формирует как
веб-страница выглядит в браузере. позволяющий
ваше приложение, чтобы соответствовать на экранах соответственно.
значения -> постоянные данные, такие как colors.xml,
strings.xml, styles.xml. Эти файлы должны
быть правильно написано.
drawable -> pics {jpeg, png, ...}; Назови их
что-нибудь.
mipmap -> больше фото. используется для значка приложения?
xml -> другие файлы xml.
ЦСИ
-> действует как JavaScript в HTML. расположение
файлы будут запускать начальный вид
и ваш файл Java будет динамически
управлять элементами тега и триггером
События. События также могут быть активированы
прямо в layout.xml так же, как в
HTML.
AndroidManifest.xml ->
Этот файл регистрирует, о чем ваше приложение. Имя приложения, тип программы, необходимые разрешения и т. Д. Это делает Android довольно безопасным. Программы буквально не могут делать то, о чем они не просили в Манифесте.
В настоящее время существует 4 типа программ для Android: действие, услуга, поставщик контента и приемник вещания. Наша клавиатура станет сервисом, который позволит ей работать в фоновом режиме. Он не будет отображаться в списке приложений для запуска; но его можно удалить.
Для компиляции вашего приложения требуется gradle и apk-подпись. Вы можете исследовать это или использовать APK Builder для Android. Это супер просто.
Теперь, когда мы понимаем разработку Android, давайте создадим файлы и папки.
Создайте файлы и папки, как я обсуждал выше. Мой каталог будет выглядеть следующим образом:
- NumPad
- AndroidManifest.xml
- ЦСИ
- Saragch
- NUM_PAD
- MyInputMethodService.java
- Рез
- вытяжка
- расположение
- key_preview.xml
- keyboard_view.xml
- XML
- method.xml
- number_pad.xml
- значения
- colors.xml
- strings.xml
- styles.xml
Помните, что если вы используете ide, например Android Studio, у него может быть файл проекта.
- Запись файлов.
A: NumPad / res / layout / key_preview.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:background="@android:color/white"
android:textColor="@android:color/black"
android:textSize="30sp">
</TextView>
B: NumPad / res / layout / keyboard_view.xml
<?xml version="1.0" encoding="utf-8"?>
<android.inputmethodservice.KeyboardView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/keyboard_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:keyPreviewLayout="@layout/key_preview"
android:layout_alignParentBottom="true">
</android.inputmethodservice.KeyboardView>
C: NumPad / res / xml / method.xml
<?xml version="1.0" encoding="utf-8"?>
<input-method xmlns:android="http://schemas.android.com/apk/res/android">
<subtype android:imeSubtypeMode="keyboard"/>
</input-method>
D: Numpad / res / xml / number_pad.xml
<?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
android:keyWidth="20%p"
android:horizontalGap="5dp"
android:verticalGap="5dp"
android:keyHeight="60dp">
<Row>
<Key android:codes="49" android:keyLabel="1" android:keyEdgeFlags="left"/>
<Key android:codes="50" android:keyLabel="2"/>
<Key android:codes="51" android:keyLabel="3"/>
<Key android:codes="52" android:keyLabel="4"/>
<Key android:codes="53" android:keyLabel="5" android:keyEdgeFlags="right"/>
</Row>
<Row>
<Key android:codes="54" android:keyLabel="6" android:keyEdgeFlags="left"/>
<Key android:codes="55" android:keyLabel="7"/>
<Key android:codes="56" android:keyLabel="8"/>
<Key android:codes="57" android:keyLabel="9"/>
<Key android:codes="48" android:keyLabel="0" android:keyEdgeFlags="right"/>
</Row>
<Row>
<Key android:codes="-5"
android:keyLabel="DELETE"
android:keyWidth="40%p"
android:keyEdgeFlags="left"
android:isRepeatable="true"/>
<Key android:codes="10"
android:keyLabel="ENTER"
android:keyWidth="60%p"
android:keyEdgeFlags="right"/>
</Row>
</Keyboard>
Конечно, это можно легко отредактировать по своему вкусу. Вы даже можете использовать изображения вместо слов для метки.
Сурагч не продемонстрировал файлы в папке значений и предположил, что у нас есть доступ к Android Studio; который автоматически создает их. Хорошо, что у меня APK Builder.
E: NumPad / res / values / colors.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>
</resources>
F: NumPad / res / values / strings.xml
<resources>
<string name="app_name">Suragch NumPad</string>
</resources>
G: NumPad / res / values / styles.xml
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="android:Theme.Material.Light.DarkActionBar">
<!-- Customize your theme here. -->
</style>
</resources>
H: Numpad / AndroidManifest.xml
Это файл, который действительно был готов к состязанию. Здесь я чувствовал, что никогда не составлю свою программу. рыдать. рыдать. Если вы проверите ответ Сурака, вы увидите, что он оставляет первый набор полей пустым и добавляет тег активности в этот файл. Как я уже сказал, существует четыре типа программ для Android. Действие - это обычное приложение со значком запуска. Этот numpad не является деятельностью! Далее он не осуществлял никакой деятельности.
Мои друзья не включают тег активности. Ваша программа будет скомпилирована, и при попытке ее запуска произойдет сбой! Что касается xmlns: android и использует-sdk; Я не могу помочь вам там. Просто попробуйте мои настройки, если они работают.
Как видите, есть служебный тег, который регистрирует его как сервис. Также service.android:name должно быть именем расширенного сервиса публичного класса в нашем java-файле. Он ДОЛЖЕН быть прописан соответственно. Также package - это имя пакета, который мы объявили в java-файле.
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="Saragch.num_pad">
<uses-sdk
android:minSdkVersion="12"
android:targetSdkVersion="27" />
<application
android:allowBackup="true"
android:icon="@drawable/Suragch_NumPad_icon"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<service
android:name=".MyInputMethodService"
android:label="Keyboard Display Name"
android:permission="android.permission.BIND_INPUT_METHOD">
<intent-filter>
<action android:name="android.view.InputMethod"/>
</intent-filter>
<meta-data
android:name="android.view.im"
android:resource="@xml/method"/>
</service>
</application>
</manifest>
I: NumPad / src / Saragch / num_pad / MyInputMethodService.java
Примечание: я думаю, что Java - это альтернатива src.
Это был другой файл проблемы, но не такой спорный, как файл манифеста. Как я знаю, Java достаточно хорош, чтобы знать, что есть что, а что нет. Я едва знаю xml и как он связан с разработкой Android!
Проблема была в том, что он ничего не импортировал! Я имею в виду, он дал нам «полный» файл, который использует имена, которые не могут быть разрешены! InputMethodService, Keyboard и т. Д. Это плохая практика, мистер Сурач. Спасибо за помощь, но как вы ожидали, что код скомпилируется, если имена не могут быть разрешены?
Ниже приводится правильно отредактированная версия. Я просто случайно набросился на пару подсказок, которые привели меня в нужное место, чтобы узнать, что именно импортировать.
package Saragch.num_pad;
import android.inputmethodservice.InputMethodService;
import android.inputmethodservice.KeyboardView;
import android.inputmethodservice.Keyboard;
import android.text.TextUtils;
import android.view.inputmethod.InputConnection;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
public class MyInputMethodService extends InputMethodService implements KeyboardView.OnKeyboardActionListener
{
@Override
public View onCreateInputView()
{
// get the KeyboardView and add our Keyboard layout to it
KeyboardView keyboardView = (KeyboardView)getLayoutInflater().inflate(R.layout.keyboard_view, null);
Keyboard keyboard = new Keyboard(this, R.xml.number_pad);
keyboardView.setKeyboard(keyboard);
keyboardView.setOnKeyboardActionListener(this);
return keyboardView;
}
@Override
public void onKey(int primaryCode, int[] keyCodes)
{
InputConnection ic = getCurrentInputConnection();
if (ic == null) return;
switch (primaryCode)
{
case Keyboard.KEYCODE_DELETE:
CharSequence selectedText = ic.getSelectedText(0);
if (TextUtils.isEmpty(selectedText))
{
// no selection, so delete previous character
ic.deleteSurroundingText(1, 0);
}
else
{
// delete the selection
ic.commitText("", 1);
}
ic.deleteSurroundingText(1, 0);
break;
default:
char code = (char) primaryCode;
ic.commitText(String.valueOf(code), 1);
}
}
@Override
public void onPress(int primaryCode) { }
@Override
public void onRelease(int primaryCode) { }
@Override
public void onText(CharSequence text) { }
@Override
public void swipeLeft() { }
@Override
public void swipeRight() { }
@Override
public void swipeDown() { }
@Override
public void swipeUp() { }
}
Скомпилируйте и подпишите свой проект.
Здесь я не знаю, как новый разработчик Android. Я хотел бы выучить это вручную, так как считаю, что настоящие программисты могут компилировать вручную.
Я думаю, что gradle - это один из инструментов для компиляции и упаковки в apk. apk похоже на jar-файл или rar для zip-файла. Существует два типа подписи. ключ отладки, который не разрешен в магазине игр и закрытый ключ.
Хорошо, давайте поможем мистеру Сарагчу. И спасибо за просмотр моего видео. Нравится, подписывайтесь.