對遲到的反應抱歉,但它可能有幫助...是的,這是絕對有可能的。我已經用nexus 7和帶有ARM處理器的外部設備完成了這項工作。 nexus 7必須啓用USB調試。我用wugfresh's nexus root工具包 - 這很容易。
接下來(抓住你的座位),你必須編寫你的應用程序來使用YModem協議。一種選擇是使用android NDK(Native開發工具包)編譯用C/C++編寫的YModem協議(嘗試Tixy's)。你需要cygwin或mingw在安裝NDK之前,如果你使用Windows。
所以我們假設你使用windows,並且你在c:\android-ndk-r8b-windows\android-ndk-r8b
中安裝了NDK。您可以在安裝了adt插件的情況下使用Eclipse,假設您的項目的新工作區是c:\ android-workspace。您可以使用批處理文件來執行NDK從你的項目(c:\android-workspace\batch.bat
)使:
C:\android-ndk-r8b-windows\android-ndk-r8b\ndk-build.cmd
PAUSE
只要確保你導出的C/C++功能,使他們可以通過你的JAVA Android應用程序中使用。
Interface.cpp:
#include <string.h>
#include <jni.h>
#include <dirent.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include "ymodem_tx.h"
#include "ymodem_main.h"
extern "C" {
JNIEXPORT int JNICALL Java_com_example_ymupload_MainActivity_ymodemSent(JNIEnv* env, jobject obj, int portNumber, jstring fileName)
{
int status = 0;
if (portNumber >= 0)
{
const char* input = env->GetStringUTFChars(fileName, 0);
status = ymodem_sentFile(portNumber, input);
env->ReleaseStringUTFChars(fileName, input);
}
else
{
status = 0xFF;
}
return status;
}
JNIEXPORT int JNICALL Java_com_example_ymupload_MainActivity_YmodemGetTotalSize(JNIEnv* env, jobject obj)
{
return ymodem_getTotalSize();
}
JNIEXPORT int JNICALL Java_com_example_ymupload_MainActivity_YmodemGetTransferredSize(JNIEnv* env, jobject obj)
{
return ymodem_getTransferredSize();
}
JNIEXPORT bool JNICALL Java_com_example_ymupload_MainActivity_YmodemIsSending(JNIEnv* env, jobject obj)
{
return ymodem_bIsSending();
}
JNIEXPORT int JNICALL Java_com_example_ymupload_MainActivity_YmodemGetStatus(JNIEnv* env, jobject obj)
{
return ymodem_uGetStatus();
}
JNIEXPORT jstring JNICALL Java_com_example_ymupload_MainActivity_YmodemGetFileName(JNIEnv* env, jobject obj)
{
return env->NewStringUTF(ymodem_pGetFileName());
}
}
另外,還要確保你把文件和其他.c
,.cpp
,.h
文件的文件夾jni
項目文件夾中,例如c:\android-workspace\prog-name\jni
以及Android.mk
文件(還有很多關於Android.mk
文件的其他堆棧問題)。
您可以將想要閃存的二進制文件放在/sdcard/
的文件夾中。下載文件瀏覽器以查看它們。