Android源码内置自定义程序并运行


1.android本身是基于linux的。因此linux上很多的命令在android上都可以直接使用。android上的命令都在系统的system/bin/目录下面。可以通过adb shell 命令进入系统查看

,结果如下:

这里写图片描述

**2.如果我们自己编写一个自定义的可执行程序打包到该目录,则也可以使用。下面就是一个简单的列子。
使用C++编写一个测试程序,然后用NDK编译,生成android上的可执行程序。将此可执行程序打包到system/bin目录下即可**。

a. 在电脑上某个目录新建一个jni文件夹,在里面新建1个C++源文件。如hello.cpp文件内容如下:

#include <iostream>
#include <cstring>
#include <stdlib.h>
#include <stdio.h>

using namespace std;


class A{

private:
    int x;
    int y;
public:

    //A(){}
    A(int ix, int iy){
        this->x = ix;
        this->y = iy;
        }

    void print(){
        cout << "x=" << this->x << ",y=" << this->y <<endl;
    }

    int getX(){
        return x;
    }
};

char *itoa(int i) {

    int tmpi = i;
    int src = i;
    int len = 1, offset = 0;
    char *des  = NULL;

    //LOGD("[itoa]:function begin, i=%d", i);
    cout << "i=" << i << endl;

    while((tmpi=tmpi/10) >= 10) {
        len ++;
    }

    //LOGD("[itoa]:get i len, len=%d", len);
    cout << "len=" << len << endl;

    des = (char*)malloc(len+1);
    if(des == NULL)
        return NULL;

    memset(des, 0x00, len + 1);

    offset = len-1;
    while((src/10) >= 10) {

        des[offset--] = src%10;


        src=src/10;
    }

    //LOGD("[itoa]:get remain src , src=%d", src);
    cout << "src=" << src << endl;

    if(src>0) {
        char ch = src %10 + 48;
        des[offset] = ch;
    }

    //LOGD("[itoa]:des=%s", des);
    cout << "des=" << des << endl;

    return des;
}
int main(int argc, char **argv) {


    A a = A(2,3);
    a.print();

    char *des = itoa(a.getX());
    cout << "des=" << des << endl;

    return 0;
}

b. 再新建两个make文件。Android.mk 和 Application.mk 文件。
Android.mk 文件指定生成一个android上的可执行文件 hello 。文件内容如下:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := hello
LOCAL_SRC_FILES := hello.cpp
LOCAL_CPPFLAGS += -fexceptions

include $(BUILD_EXECUTABLE)

Application.mk文件平台及C++库。 内容如下:

APP_OPTIM := debug
APP_PLATFORM := android-19
APP_ABI := armeabi
APP_STL := stlport_static

3.在jni根目录执行NDK命令编译生成可执行程序。

ndk-build

4.编译成功后会在jni上一级目录生成一个libs文件夹。里面有生成的可执行程序hello

这里写图片描述

5.将此可执行程序 hello 拷贝至 android_src/out/target/product/generic/system/bin/ 目录下。然后在源码根目录 android_src 下面执行打包命令。

make snod

6.完成后,执行emulator运行模拟器。使用adb shell进入系统查看。目录system/bin/目录下已经有了我们刚才生成的hello程序。如下:

这里写图片描述

7.任意目录输入hello 即可执行生成的hello程序。运行结果如下:
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【资源说明】 1、基于Android调用OpenAI接口的ChatGPT实例源码+项目说明.zip 2、该资源包括项目的全部源码,下载可以直接使用! 3、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 4、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。 基于Android调用OpenAI接口的ChatGPT实例源码+项目说明.zip 调用openai提供的接口,实现与ChatGPT对话 功能: <del> ✓可以免费使用,无需登录(在本人账号余额耗尽之前,默认配置即可)</del> × 本人账号余额已于2023.04.01耗尽,不再提供API KEY ![image](img/1.jpg) ✓ 支持至Gpt-3.5模型(因为本人买不起plus) ✓ 无需代理即可与ChatGPT对话(可以使用自己的服务器中转) ✓ 支持带记忆的连续对话,可以随时清除记忆 ✓ 可以复制ai回答文本 ✓ 使用流式传输,ai的回答是动态连续的 ✓ 使用wss保护数据传输安全 ? vits语音合成(试行)。仅在 “英国 S1” 中转服务器 上运行。使用服务器CPU进行推理,计算速度极为缓慢,不建议使用。 ![image](img/config.jpg) ![image](img/com.chat.jpg) # 关于收到乱码 如果你希望使用预置的中转服务器,请确保APP为github上的最新版本, 乱码可能原因:由于 APP内置的通讯标记 与 服务器内置的通讯标记 不匹配,导致APP无法正常接收对话数据 如果你希望可以使用自定义的通讯标记,请更改APP与springboot的源码并自行编译、运行 # 关于直连官方接口失败: 因为某些原因, https://api.openai.com 已经被GFW dns阻断了 最新版本可以选择使用服务器运行springboot + websocket与APP即时通讯,进行数据中转,以此绕开sni 配套springboot项目地址 你可以自行修改springboot中的代码以配适你的App 当然,你可以选中“不使用中转”, 并在手机上设置好代理,APP会直接向openai发送请求 # 关于语音转换: 引用 # 关于api_key失效 api_key一旦被官方检测到一个key被多人使用就会自动失效 一个openai账号可以维持最多五个api key,也就是说可以让五个人分别专用一个账号下不同的key # usage check the configs first, confirm your api_key is available. connected to the Internet. 首先检查配置,确保api_key可用 建议将文本长度调整至1000及以上 确保APP可以联网

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值