从众所周知的链接创建自定义Android键盘; 编译,安装,但此键盘没有选项显示在设备上

我使用Eclipse Luna 2(4.4.2)按照此链接中的说明进行操作。

该应用程序已编译,并且apk已安装在我的手机上,但由于它没有活动(这是设计),因此无法运行。 它应该会导致新的键盘选项出现在设备的Settings | Language and Input Settings | Language and Input ,但nooooooooooo。

我所做的就是剪切和粘贴文件名和内容,所以它们就像链接一样显示。 这是项目结构,上面链接中唯一缺少的项目:

在此处输入图像描述

在此处输入图像描述

这是控制台输出。 一切显然都应该如此:

 [2015-05-09 14:58:58 - SimpleKeyboard] ------------------------------ [2015-05-09 14:58:58 - SimpleKeyboard] Android Launch! [2015-05-09 14:58:58 - SimpleKeyboard] adb is running normally. [2015-05-09 14:58:58 - SimpleKeyboard] No Launcher activity found! [2015-05-09 14:58:58 - SimpleKeyboard] The launch will only sync the application package on the device! [2015-05-09 14:58:58 - SimpleKeyboard] Performing sync [2015-05-09 14:58:58 - SimpleKeyboard] Automatic Target Mode: Unable to detect device compatibility. Please select a target device. [2015-05-09 14:59:08 - SimpleKeyboard] Uploading SimpleKeyboard.apk onto device 'TA22807EL2' [2015-05-09 14:59:08 - SimpleKeyboard] Installing SimpleKeyboard.apk... [2015-05-09 14:59:11 - SimpleKeyboard] Success! [2015-05-09 14:59:12 - SimpleKeyboard] \SimpleKeyboard\bin\SimpleKeyboard.apk installed on device [2015-05-09 14:59:12 - SimpleKeyboard] Done! 

但这是设备屏幕,所以它没有QUITE去它应该有:

在此处输入图像描述

如果您发现明显的错误或遗漏,请告诉我。

编辑#1

这是项目的.java,如果我把东西放在错误的地方,添加或省略了@Override等。链接上没有显示任何导入:

 import com.example.simplekeyboard.R; import android.inputmethodservice.InputMethodService; import android.inputmethodservice.Keyboard; import android.inputmethodservice.KeyboardView; import android.inputmethodservice.KeyboardView.OnKeyboardActionListener; import android.media.AudioManager; import android.view.KeyEvent; import android.view.View; import android.view.inputmethod.InputConnection; public class SimpleIME extends InputMethodService implements OnKeyboardActionListener{ private KeyboardView kv; private Keyboard keyboard; private boolean caps = false; private void playClick(int keyCode){ AudioManager am = (AudioManager)getSystemService(AUDIO_SERVICE); switch(keyCode){ case 32: am.playSoundEffect(AudioManager.FX_KEYPRESS_SPACEBAR); break; case Keyboard.KEYCODE_DONE: case 10: am.playSoundEffect(AudioManager.FX_KEYPRESS_RETURN); break; case Keyboard.KEYCODE_DELETE: am.playSoundEffect(AudioManager.FX_KEYPRESS_DELETE); break; default: am.playSoundEffect(AudioManager.FX_KEYPRESS_STANDARD); } } @Override public View onCreateInputView() { kv = (KeyboardView)getLayoutInflater().inflate(R.layout.keyboard, null); keyboard = new Keyboard(this, R.xml.qwerty); kv.setKeyboard(keyboard); kv.setOnKeyboardActionListener(this); return kv; } @Override public void onKey(int primaryCode, int[] keyCodes) { InputConnection ic = getCurrentInputConnection(); playClick(primaryCode); switch(primaryCode){ case Keyboard.KEYCODE_DELETE : ic.deleteSurroundingText(1, 0); break; case Keyboard.KEYCODE_SHIFT: caps = !caps; keyboard.setShifted(caps); kv.invalidateAllKeys(); break; case Keyboard.KEYCODE_DONE: ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER)); break; default: char code = (char)primaryCode; if(Character.isLetter(code) && caps){ code = Character.toUpperCase(code); } 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 swipeDown() { } @Override public void swipeLeft() { } @Override public void swipeRight() { } @Override public void swipeUp() { } } 

编辑#2

我刚刚发现bin文件夹(下面)中的AndroidManifest.xml与app !!下的AndroidManifest.xml

            

app下的AndroidManifest.xml

      

编辑#3我将“短”清单文件更改为“长”,现在我将“ Simple IME键盘作为Settings | Language and Input下的选项Settings | Language and Input Settings | Language and Input但新键盘(如下所示)未显示在设备上:

在此处输入图像描述

我刚刚发现bin文件夹(下面)中的AndroidManifest.xml与app !!下的AndroidManifest.xml不同:

你有两个问题。

首先,输出bin/ 。 永远不要修改bin/东西。 因此,您放入清单中的需要进入项目根目录中的AndroidManifest.xml文件。

其次,假设您只是将元素移动到正确的清单,Java类需要是com.example.simplekeyboard.SimpleIME 。 现在,你在Java的默认包中有SimpleIME ,即使在普通的Java开发中也很少适用,更不用说Android了。

因此,将元素(以及您所做的任何其他更改)移动到正确的清单,并将SimpleIME移动到正确的包中。

解决方案: 使用Android Studio(AS)1.1.0,而不是ECLIPSE。

构建项目花了30分钟,纠正了ZERO错误,并安装了设备:

在此处输入图像描述

说真的,Eclipse已经完成了这个Android Developer。 由于Eclipse的设计和idiotsyncrasies(是的,拼写错误),我不得不忍受的烦恼不应该发生在任何人身上。 我选择了Eclipse,因为链接说是这样做的; 我想,为什么机会AS?

在这个问题上面的链接描述的程序是伟大的。 只是不要在Eclipse中开发它。

我发布AS结构只是为了与Eclipse进行比较。

在此处输入图像描述