好吧,我一直在低级Android编程(使用CodeSourcery工具链的本机C/C ++)中潜水。我尝试了模拟器上的可执行文件,然后起作用。我想在真实设备上尝试一下。因此,我插入了联系,并将文件推入文件系统。然后,我尝试执行二进制文件,并遇到了一个权限错误。我如何安装它,或者我在何处发送它,我不是扎根,也没有让我执行它。有什么方法可以在非根手机上运行这样的程序?

有帮助吗?

解决方案

在使用Android NDK中包含的工具链来编译您的二进制文件之后,可以用典型的Android应用程序包装它们,并将它们产生为子过程。

您必须在应用程序的资产文件夹中包含所有必要的文件。为了运行它们,您必须让程序从资产文件夹复制到可运行的位置,例如:/data/data/com.yourdomain.yourapp/nativefolder

您可以这样做:

private static void copyFile(String assetPath, String localPath, Context context) {
    try {
        InputStream in = context.getAssets().open(assetPath);
        FileOutputStream out = new FileOutputStream(localPath);
        int read;
        byte[] buffer = new byte[4096];
        while ((read = in.read(buffer)) > 0) {
            out.write(buffer, 0, read);
        }
        out.close();
        in.close();

    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}

请记住,资产路径不是绝对的,而是关于资产/。

IE:“资产/本地福特”只是“本地福特”

然后运行您的应用程序并阅读其输出,您可以做这样的事情:

  Process nativeApp = Runtime.getRuntime().exec("/data/data/com.yourdomain.yourapp/nativeFolder/application");


            BufferedReader reader = new BufferedReader(new InputStreamReader(nativeApp.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();

            // Waits for the command to finish.
            nativeApp.waitFor();

            String nativeOutput =  output.toString();
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top