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原创谢绝转载

相关推荐
小雨青年33 分钟前
开篇 2026 开发者新范式 本地逻辑引擎结合云端国产大模型架构详解
ai编程
PwnGuo1 小时前
Android逆向:在 Unidbg 中解决 native 函数内调用 Java 方法的报错
android·java·python
Kratzdisteln1 小时前
【1902】优化后的三路径学习系统
android·学习
Digitally2 小时前
如何将文件从 iPhone 传输到 Android
android·ios·iphone
cloud studio AI应用2 小时前
CodeBuddy 一周更新亮点丨IDE 新增 Hooks 等功能、CLI 新增Prompt 建议、SDK 自定义工具支持
腾讯云·ai编程·codebuddy
a3158238062 小时前
Android修改调试屏幕的选择方向
android·adb·屏幕旋转
超级数据查看器2 小时前
超级数据查看器 更新日志(包含的功能)
android·java·数据库·sqlite·安卓
AiFlutter2 小时前
Flutter-Android不能通过apply script方法应用Gradle插件
android·flutter
2501_915106322 小时前
iOS 抓包工具实战实践指南,围绕代理抓包、数据流抓包和拦截器等常见工具
android·ios·小程序·https·uni-app·iphone·webview
恋猫de小郭2 小时前
Flutter 又迎大坑修改?iOS 26 键盘变化可能带来大量底层改动
android·flutter·ios·kotlin