AI编程工具Copilot与Codeium的实测对比

csdn原创谢绝转载

简介

现在没有AI编程工具,效率会打一个折扣,如果还没有,赶紧装起来.

  1. GitHub Copilot是OpenAi与github等共同开发的的AI辅助编程工具,基于ChatGPT驱动,功能强大,这个没人怀疑,看它的价格就知道了,最开始是10美元1个月,后面好像涨到20美元了.

    我个人给它起了个嘴强王者的称号,就是动动嘴就能实现代码.

  2. Codeium是一款免费的Ai辅助编程工具,支持70多种编程语言,插件支持40多种编辑器.功能也挺强大的,关键免费的,

    我称赞它为白Piao党们的编程秘书.

    其他文章
    AndroidStudio上安装Codeium方法.
    Android Studio安装AI编程助手Github Copilot

环境

  1. 测试使用的是Android Studio, Codeium要在VsCode上支持对话,这里只简单对比编程的功能.
  2. 语言Java

代码对比

在同一个Android Studio上,书写相似的简单代码,得到补全代码.然后对比二者表现.

代码尽量挑选平常会用到的公共函数.

Copilot

java 复制代码
// 作者:帅得不敢出门
public class Copilot {
    // 用递归实现斐波那契数列
    public static int fibonacci(int n) {
        if (n <= 1) return n;
        return fibonacci(n - 1) + fibonacci(n - 2);
    }

    public void writeFile(String file, String content) {
        try {
            FileWriter fw = new FileWriter(file);
            fw.write(content);
            fw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // 手动输入参数int dp后实现
    public int dp2px(int dp) {
        return (int) (dp * 3.0f + 0.5f);
    }

    // 手动输入Context参数
    public int dpToPx(Context context, int dp) {
        return (int) (dp * context.getResources().getDisplayMetrics().density + 0.5f);
    }

    // 实现获取最前端的Activity名称的函数
    // 输入上面这行,copilot无任何提示


    public String getTopActivity(Context context) {
        return context.getClass().getSimpleName();
    }

    public boolean isAppForeground(Context context, String packageName) {
        return packageName.equals(getTopActivity(context));
    }

    public boolean isAppSystem(Context context, String packageName) {
        return context.getPackageManager().getLaunchIntentForPackage(packageName) == null;
    }

    public int getStatusBarHeight(Context context) {
        int result = 0;
        int resourceId = context.getResources().getIdentifier("status_bar_height",
                "dimen", "android");
        if (resourceId > 0) result = context.getResources().getDimensionPixelSize(resourceId);
        return result;
    }

    public int getScreenWidth(Context context) {
        return context.getResources().getDisplayMetrics().widthPixels;
    }

    public String bytes2HexString(byte[] bytes) {
        StringBuilder sb = new StringBuilder();
        for (byte aByte : bytes) {
            String hex = Integer.toHexString(aByte & 0xFF);
            if (hex.length() < 2) sb.append(0);
            sb.append(hex);
        }
        return sb.toString();
    }

    public boolean isPhoneNumber(String phoneNumber) {
        return phoneNumber.matches("^1[3-9]\\d{9}$");
    }

    public String getDate() {
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()).format(new Date());
    }

    public String getCurrentTime() {
        return new SimpleDateFormat("HH:mm:ss", Locale.getDefault()).format(new Date());
    }

    public static int getTodayOfWeek() {
        return new Date().getDay();
    }

    public static int getDayOfWeek(Date date) {
        return date.getDay();
    }

    public static boolean isChinese(String str) {
        return str.matches("[\\u4e00-\\u9fa5]+");
    }

    /*
    这个会编译不过
    public boolean isScreenOn(Context context) {
        return context.getSystemService(Context.POWER_SERVICE).isScreenOn();
    }
     */

    public void setBrightness(Context context, int brightness) {
        android.provider.Settings.System.putInt(context.getContentResolver(),
                android.provider.Settings.System.SCREEN_BRIGHTNESS, brightness);
    }

    public String getAndroidId(Context context) {
        return android.provider.Settings.Secure.getString(context.getContentResolver(),
                android.provider.Settings.Secure.ANDROID_ID);
    }

}

Codeium

java 复制代码
// 作者:帅得不敢出门
public class Codeium {
    // 用递归实现斐波那契数列
    public int fib(int n) {
        if (n == 0) {
            return 0;
        } else if (n == 1) {
            return 1;
        } else {
            return fib(n - 1) + fib(n - 2);
        }
    }

    // 输入到writeFile(会自动提示出参数及实现
    public void writeFile(String fileName, String content) {
        try {
            File file = new File(fileName);
            FileWriter fw = new FileWriter(file);
            fw.write(content);
            fw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public int dp2px(int dp) {
        return (int) (dp * 0.5f + 0.5f);
    }

    // 要手动输入Context参数
    public int dpToPx(Context context, int dp) {
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, context.getResources().getDisplayMetrics());
    }

    public String getTopActivity(Context context) {
        return "com.benew.testm";
    }

    public boolean isAppForeground(Context context, String packageName) {
        return false;
    }

    public boolean isAppSystem(Context context, String packageName) {
        return packageName.equals("com.android.systemui");
    }

    public int getStatusBarHeight(Context context) {
        return 0;
    }

    // 这个要手动输入Context参数
    public int getScreenWidth(Context context) {
        return context.getResources().getDisplayMetrics().widthPixels;
    }

    public String bytes2HexString(byte[] bytes) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < bytes.length; i++) {
            String hex = Integer.toHexString(0xFF & bytes[i]);
            if (hex.length() == 1) {
                sb.append('0');
            }
            sb.append(hex.toUpperCase());
        }
        return sb.toString();
    }

    public boolean isPhoneNumber(String phoneNumber) {
        // 默认是提示return false
        //return false;
        // 要手动先输入phoneNumber.matches(
        return phoneNumber.matches("^[1][3,4,5,7,8][0-9]{9}$");
    }

    public String getDate() {
        return new java.text.SimpleDateFormat("yyyy-MM-dd").format(new java.util.Date());
    }

    public String getCurrentTime(){
        return new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new java.util.Date());
    }

    public static int getTodayOfWeek(){
        Calendar cal = Calendar.getInstance();
        return cal.get(Calendar.DAY_OF_WEEK);
    }

    public static int getDayOfWeek(Date date){
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        return cal.get(Calendar.DAY_OF_WEEK);
    }

    public static boolean isChinese(String str){
        return str.matches("[\\u4E00-\\u9FA5]+");
    }

    public boolean isScreenOn(Context context){
        return false;
    }

    public void setBrightness(Context context, int level){
        // 这里如果不主动输入codeium会无提示, 需要手动输入android.provider
        android.provider.Settings.System.putInt(context.getContentResolver(), android.provider.Settings.System.SCREEN_BRIGHTNESS, level);
    }

    public String getAndroidId(Context context){
        // 这里codeium要手动输入return android.provider 才会提示, 否则会提示成return null
        return android.provider.Settings.Secure.getString(context.getContentResolver(), android.provider.Settings.Secure.ANDROID_ID);
    }

}

结果

代码部分对比图

由于工具,语言,代码量都较单一,无法以偏盖全,只是做个简单比较,另外就是输入的代码也会干扰到补全,

个人输入的与工具本身理解不一样也会导致结果差异.

  1. 斐波那契数列 Copilot会更简洁些,二者都未有异常处理,比如溢出,输入负数.
  2. public void writeFile(String file, String content)差不多,Copilot少一行.
  3. public int dp2px(int dp)结果不同,一个是剩0.5,一个是0.3都有问题, 需要参数中手动输入Context context参数才行.
  4. public int dpToPx(Context context, int dp) 因为手动输入Context参数结果正确,个人更喜欢Codeium不需要关注运算.
  5. public String getTopActivity(Context context)二者都不正确.
  6. public boolean isAppForeground(Context context, String packageName) 二者都不正确.
  7. public boolean isAppSystem(Context context, String packageName)二者都不正确.
  8. public int getStatusBarHeight(Context context)Copilot表现比较好.
  9. public int getScreenWidth(Context context)结果一样.
  10. public String bytes2HexString(byte\[\] bytes)差不多.
  11. 获取时间的字符串的函数,format的格式需要自己微调.
  12. public boolean isPhoneNumber(String phoneNumber),Codeium需要手动输入部分实现,Copilot表现好.
  13. getTodayOfWeek() Copilot用到过期的函数,Codeium表现好些.
  14. public static boolean isChinese(String str)二都结果一样.
  15. 设备屏幕亮度setBrightness,获取AndroidId getAndroidId, Codeium都需要手动输入部分实现,否则补全不了,Copilot表现好.

单纯从以上对比,Copilot综合实力更强,收费的,开通麻烦点,原因你懂的.

Codeium也能解决大部分场景,它是免费的,免费的,免费的,重要的事情说三遍,开通方便.

最后说一下,土豪上Copilot,其他上Codeium.

作者:帅得不敢出门 CSDN原创谢绝转载

相关推荐
孟健1 小时前
Claude Code 接入 DeepSeek V4.1 与 MiniMax M3.1 实测:200+ TPS 下的代码准确率与 Token 账单
人工智能·llm·ai编程
李航19831 小时前
DeepSeekAI建模三 - 实战建模一组柜子
人工智能·python·计算机视觉·ai·ai编程
2501_915921431 小时前
iOS应用耗电测试:使用Energy Log、Keymob和Instruments进行性能监控与能源消耗分析
android·ios·小程序·https·uni-app·iphone·webview
ServBay2 小时前
DeepSeek 又出王炸,用 DeepInfer 搭建自己的服务是不是很容易?
后端·ai编程·deepseek
蒲公英内测分发2 小时前
热成像仪交付客户后,Android 配套 App 不上架,怎么持续下载安装和更新
android·机器人·项目管理·智能家居·智能硬件
脚踏实地,坚持不懈!2 小时前
Android 常见性能问题总结
android
程工造Agent2 小时前
从 0 到 1 学 Codex 源码:顺着 main 读懂 Rust 闭包与 async move
rust·ai编程
高旭的旭3 小时前
图解 Android 系统架构:从 App、Framework、HAL 到 Linux 驱动
android·linux·系统架构
hunterandroid3 小时前
Navigation Component 多模块导航与深度链接实战
android