Размещение исполняемого файла в приложении Android

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

29
задан Samuh 11 April 2011 в 23:34
поделиться

1 ответ

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

1.) В своем проекте SDK поместите исполняемый файл в папку / assets

2.) Программно получите строку этого каталога файлов (/ data / data / your_app_name / files) как это

String appFileDirectory = getFilesDir().getPath();
String executableFilePath = appFileDirectory + "/executable_file";

3.) В Java-проекте вашего приложения: скопируйте исполняемый файл из папки / assets в подпапку «files» вашего приложения (обычно это / data / data / your_app_name / files) с помощью функции например:

private void copyAssets(String filename) {

AssetManager assetManager = getAssets();

InputStream in = null;
OutputStream out = null;
Log.d(TAG, "Attempting to copy this file: " + filename); // + " to: " +       assetCopyDestination);

try {
    in = assetManager.open(filename);
    Log.d(TAG, "outDir: " + appFileDirectory);
    File outFile = new File(appFileDirectory, filename);
    out = new FileOutputStream(outFile);
    copyFile(in, out);
    in.close();
    in = null;
    out.flush();
    out.close();
    out = null;
} catch(IOException e) {
Log.e(TAG, "Failed to copy asset file: " + filename, e);
} 

Log.d(TAG, "Copy success: " + filename);
}

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

File execFile = new File(executableFilePath);
execFile.setExecutable(true);

5.) Запустите файл следующим образом:

Process process = Runtime.getRuntime().exec(executableFilePath);

Обратите внимание, что любые файлы, упомянутые здесь (например, файлы ввода и вывода), должны иметь их полный путь построены. Это потому, что это отдельный порожденный процесс, и в нем нет понятия, что такое «pwd».

Если вы хотите прочитать стандартный вывод команды, вы можете сделать это, но пока она работает только для системных команд (например, «ls»), а не для исполняемого файла:

BufferedReader reader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
int read;
char[] buffer = new char[4096];
StringBuffer output = new StringBuffer();
while ((read = reader.read(buffer)) > 0) {
    output.append(buffer, 0, read);
}
reader.close();
process.waitFor();

Журнал. d (TAG, «output:» + output.toString ());

10
ответ дан 28 November 2019 в 01:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: