باختصار
ما الذي تقوله هذه المقالة
عندما يكون تطبيق أندرويد مفتوح المصدر، يستطيع وكيل ذكاء اصطناعي تنفيذ العمل الهندسي من طلب بسيط: الاستنساخ والتعديل وبناء APK وتثبيته عبر USB وفحص الشاشة والتحسين. تعرض المقالة الموجّهات القصيرة الحقيقية وراء tg-digest-android.
- يضيف التفريع المستخدم في المثال علامة تبويب Digest تجمع المنشورات غير المقروءة من قنوات تيليغرام المحددة في موجز زمني واحد.
- بنى Claude التطبيق وثبّته وفتحه وفحصه بصريًا وحسّنه على هاتف Redmi Note 8 Pro فعلي خلال يوم واحد.
- يجب على القارئ الحصول على api_id وapi_hash شخصيين من تيليغرام، ووضعهما في local.properties بجذر المشروع، وتفعيل خيارات مطوّر أندرويد وUSB debugging.
- وقت نشر المقال، لا تظهر بيانات اعتماد تيليغرام الشخصية للمؤلف في الشجرة العامة الحالية ولا في أي من الإيداعين العامين؛ ولا يبقى في المصدر المستورد سوى الزوج النموذجي الخاص بتيليغرام.
- البناء المتاح مخصص لـarm64-v8a ويستند إلى Telegram for Android 12.7.3 (6750).
المفاجأة ليست أن تفريعًا من تيليغرام حصل على علامة تبويب Digest، بل أن تشغيلها على هاتف حقيقي لم يتطلب مني كتابة خطة بناء لأندرويد. وصفت السلوك الناقص بلغة عادية، ووصلت الهاتف، ثم كتبت لاحقًا فقط: «شغّل أحدث نسخة على هاتفي». وفي مساء اليوم نفسه كنت أستخدم نسختي الخاصة.
في ذلك الصباح، لم تكن الميزة موجودة
غالبًا ما تنتهي الاشتراكات في القنوات إلى واحدة من حالتين سيئتين بالقدر نفسه: مئات العدادات الحمراء، أو وضع علامة «مقروء» على كل شيء فيما تضيع المنشورات المفيدة. أردت نموذجًا ثالثًا: أن أختار بنفسي عددًا قليلًا من القنوات، ثم أقرأ كل منشوراتها غير المقروءة كمخطط زمني عادي واحد.
وهذا بالضبط ما تفعله علامة تبويب Digest الناتجة:
- تتيح البحث عن القنوات وتجمع منشوراتها بترتيب زمني؛
- تحتفظ بحدّ منفصل لآخر ما قُرئ في كل حساب؛
- تفتح عند أول عنصر غير مقروء وتتيح التمرير بلا نهاية إلى الماضي؛
- تعرض أسماء القنوات وألبومات الوسائط والتواريخ والتفاعلات بواجهة تيليغرام نفسها؛
- تضع علامة «مقروء» على الرسائل الظاهرة عبر المسار نفسه الذي تستخدمه شاشة القناة العادية.
هذا ليس عرضًا تجريبيًا صغيرًا ولا عميلًا جديدًا رُسم من الصفر. كان على الوكيل نقل القاعدة إلى أحدث مصدر منشور لتيليغرام، وفهم قاعدة بياناته المحلية، وتقسيم الصفحات، وتجميع الوسائط، والتنقل. لكنني لم أحتج إلى إملاء أسماء الأصناف. وصفت ما ينبغي أن يراه مستخدم التطبيق وما ينبغي أن يشعر به.
كان العمل هندسيًا. أما الموجّه فكان بلغة عادية
بدا الطلب الأساسي على النحو التالي تقريبًا. كانت الجملة الأخيرة مهمة: منعت الوكيل من بناء واجهة ثانية غريبة بوضوح إلى جانب واجهة تيليغرام الموجودة.
أضف صفحة منفصلة تحتوي على كل الرسائل غير المقروءة من قنوات تيليغرام التي أحددها.
أحتاج إلى واجهة لاختيار القنوات. احتفظ لـDigest بحدّ منفصل لآخر عنصر قرأته فعلًا. عند فتح الصفحة، ضعها عند أول رسالة غير مقروءة. أضف تمريرًا لا نهائيًا إلى الماضي وزرًا سفليًا يعيدني إلى أول عنصر غير مقروء. ضع علامة «مقروء» على المنشورات الظاهرة عبر حالة القراءة القياسية في تيليغرام.
اعرض الألبومات واسم القناة وصورتها الرمزية بالطريقة نفسها التي يعرضها بها تيليغرام العادي. أعد استخدام الواجهة الموجودة قدر الإمكان؛ ولا تكتب واجهة مخصصة إلا حيث لا يمكن تجنب ذلك.
ابنِ التطبيق، وثبّته على الهاتف المتصل، وتحقق من النتيجة على الجهاز.بعد بضع ساعات كان التطبيق يعمل على Redmi Note 8 Pro. ثم أعطيت ملاحظتين قصيرتين: إزالة الارتجاج أثناء التمرير، ونقل الزر الدائري إلى أعلى شريط التنقل السفلي مع إزالة صورة رمزية شاردة بين الرسائل. فحص Claude النتيجة على الهاتف، وعثر على الأسباب، وأعاد بناء ملف APK، ثم تحقق مرة أخرى. كان هذا أشبه بالعمل مع فريق منتج منه بـ«توليد الشفرة».
الشفرة تزداد رخصًا؛ والقصد الدقيق تزداد قيمته
كانت هناك في السابق سلسلة مكلفة بين «أحتاج إلى هذا» و«أنا أستخدم هذا»: العثور على مطوّر أندرويد، وشرح البنية، وتجهيز البيئة، وانتظار عمليات البناء، وتعلّم ADB. درّبنا ذلك على التعامل مع واجهة التطبيق كأنها نهائية. نقبل ما يطرحه المورّد وننتظر الإصدار التالي.
يغيّر وكيل البرمجة اقتصاديات هذه السلسلة. يستطيع قراءة مستودع كبير غير مألوف،
ومطابقة إصدارات JDK وSDK وNDK، والعثور على نقطة الدمج الصحيحة، وبناء APK، وفحص فشل
التثبيت، وقراءة logcat، ثم التكرار. ليست كل نتيجة جيدة، لكن تكلفة الوصول إلى
أول نسخة عاملة انهارت.
لا ينطبق هذا على كل شيء. فتطبيق مغلق بلا مصدر، أو وظيفة تنفذ على الخادم، أو بنية دفع، أو تغيير في بروتوكول تشفيري، لن يظهر من موجّه واحد. لكن عندما يكون السلوك المطلوب داخل عميل أندرويد مفتوح ويمكن التحقق منه على الشاشة، لم يعد انتظار الزر الرسمي قرارًا منطقيًا دائمًا.
كيف تكرر التجربة: اترك للإنسان الإجراءات الضرورية وحدها
سير العمل أدناه مخصص لهذا التفريع. تحتاج إلى حاسوب، ووكيل برمجة يعمل من الطرفية مثل Claude Code أو Codex، وهاتف أندرويد، وكابل USB لنقل البيانات، وعدة غيغابايت من المساحة الخالية. المستودع كبير، وأول بناء لأندرويد يستغرق وقتًا. دع الوكيل يجهّز البيئة التقنية؛ وستضيف أنت بيانات الاعتماد الخاصة، وتغيّر إعدادات الهاتف، وتسجّل الدخول إلى تيليغرام.
1 دع الوكيل يجهّز المشروع
افتح الوكيل في مجلد فارغ. بدأ المشروع الأصلي بطلب قصير مماثل: إنشاء تفريع من عميل أندرويد الرسمي وتشغيله على الهاتف المتصل. أما مع التفريع العام الجاهز فاستخدم:
استنسخ https://github.com/howaihelps/tg-digest-android وشغّل أحدث نسخة على هاتف أندرويد المتصل عبر USB.
أخبرني عندما أحتاج إلى إدخال app id وapp hash الخاصين بي في تيليغرام أو تأكيد شيء على الهاتف. لا تعرض بيانات الاعتماد هذه ولا تودعها.2 احصل على Telegram API ID وhash خاصين بك
إجراء بشري
- سجّل الدخول عبر تطبيق تيليغرام رسمي إن لم يكن لديك حساب بالفعل.
- افتح my.telegram.org، وسجّل الدخول برقم هاتفك، واختر API development tools.
- أكمل نموذج التطبيق، واختر Android، واحفظ
api_idوapi_hashالصادرين.
هذا ليس رمز بوت. يصدر تيليغرام زوجًا واحدًا لكل رقم هاتف، ويشترط معرّفًا شخصيًا للعميل الخارجي. راجع تعليمات تيليغرام الرسمية.
في جذر المستودع المستنسخ، بجوار settings.gradle، افتح local.properties واستبدل العناصر النائبة يدويًا. لا تضف علامات اقتباس:
sdk.dir=/Users/[YOUR_NAME]/Library/Android/sdk
TELEGRAM_API_ID=[YOUR_NUMERIC_API_ID]
TELEGRAM_API_HASH=[YOUR_32_CHARACTER_API_HASH]يختلف مسار sdk.dir على Windows وLinux؛ ويُفترض أن يكون الوكيل قد ملأه
بالفعل. في هذا التفريع يحقن TMessagesProj/build.gradle القيمتين في BuildConfig، ويقرأهما BuildVars.java وقت التشغيل.
ملف local.properties مدرج في .gitignore.
حتى وقت نشر هذا المقال، قارنت أيضًا قيمي الحقيقية بكل ملف في كلا الإيداعين العامين: لا يظهر api_id أو api_hash الشخصيان الخاصان بي في الشجرة الحالية ولا في سجل Git. يحتوي المصدر المستورد من upstream على زوج تيليغرام النموذجي المقيّد. هذه ليست بيانات اعتمادي، ويجب ألا تعتمد عليها في بنائك.
3 جهّز الهاتف
إجراء بشري
- افتح «حول الهاتف» وانقر «رقم الإصدار» سبع مرات. في أجهزة Xiaomi قد يسمى هذا «إصدار MIUI» أو «إصدار HyperOS».
- عُد إلى الإعدادات، وافتح «خيارات المطوّر»، وفعّل USB debugging.
- في Xiaomi، فعّل أيضًا Install via USB؛ وتتطلب بعض الطرز USB debugging (Security settings).
- صل الهاتف وهو مفتوح بكابل يدعم نقل البيانات، لا الشحن وحده.
- وافق على بصمة RSA الخاصة بالحاسوب على الهاتف؛ وخيار «Always allow» مريح.
تختلف أسماء القوائم باختلاف الشركة المصنّعة. التسلسل الأساسي موثق في دليل خيارات المطوّر الرسمي من Android. أبقِ الشاشة مفتوحة أثناء أول تثبيت: لا يستطيع الوكيل الموافقة على مربع حوار النظام نيابة عنك.
4 اطلب من الوكيل البناء والتشغيل
بعد إكمال local.properties وتوصيل الهاتف، لا تحتاج إلى ذكر ADB أو مهمة Gradle
أو ABI أو CMake أو مسار APK أو Android activity. في جلسة Claude الحقيقية، كان طلب
التشغيل كاملًا جملة واحدة:
شغّل أحدث نسخة على هاتفي.تحقق Claude بنفسه من الجهاز، ووفّق سلسلة أدوات أندرويد، وبنى النسخة الصحيحة وثبّتها
وشغّلها، ثم فحص لقطات الشاشة. كانت هذه أفعال الوكيل، لا معرفة تقنية مخفية داخل موجّهي.
كانت النتيجة APK تجريبيًا بحجم يقارب 75 MB يعمل باسم org.telegram.messenger.beta على arm64-v8a. أدخل رمز الدخول وكلمة
مرور المصادقة الثنائية بنفسك دائمًا، ولا تعطهما للوكيل.
5 اطلب ميزتك بلغة النتائج
بعد تشغيل التطبيق، يمكنك تغيير هذا التفريع أو تكرار العملية مع تطبيق آخر مفتوح المصدر. لا تبدأ بعبارة «أنشئ صنفًا» أو «أصلح RecyclerView». صف الوضع، والسلوك الذي يمكن ملاحظته، ومعايير القبول.
غيّر التطبيق ليلائم سير العمل الشخصي التالي.
الآن: [ما ينقصني أو ما أفعله يدويًا].
أريد: [ما ينبغي أن أراه وما ينبغي أن يحدث].
حافظ على: [الشاشات والسلوكيات الحالية التي يجب ألا تتغير].
أعد استخدام واجهة التطبيق قدر الإمكان. اجعلها تعمل، وشغّل أحدث نسخة على هاتفي المتصل، وتحقق من النتيجة بنفسك.6 عالج الإحساس، لا نجاح التجميع وحده
نجح أول بناء لـDigest، لكن الموجز كان يرتج قليلًا عند تحميل مزيد من العناصر. لم يتضمن الموجّه التالي تشخيصًا ولا خطة اختبار؛ بل ما رأيته على الهاتف فحسب:
كل شيء رائع، لكن الشاشة ترتج قليلًا أثناء التمرير. هل يمكنك التحقق بنفسك وإصلاح ذلك؟عثر الوكيل على تحديث كامل للقائمة أثناء تقسيم الصفحات واستبدله بتحديث تدريجي. في القياس المكرر، انخفضت نسبة الإطارات المتعثرة من 11.9% إلى 2.1%، بينما انخفض زمن الإطار عند المئين 99 من 40 إلى 22 مللي ثانية. وصفت عيبًا بصريًا آخر بكلمات أبسط: «انقل الزر فوق شريط التنقل السفلي وأزل العنصر الشاذ في الوسط، مع الحفاظ على اسم القناة». كانت هذه أيضًا لغة عادية، لا مواصفات لواجهة المستخدم. والحل الوسط النهائي هو ترويسة تعرض الاسم فقط: لا تُرسم الصورة الرمزية للمرسل التي كانت تسبب العنصر الشاذ. هذه الحلقة — انظر، وسمِّ العيب، ودع الوكيل يعيد إنتاجه، ثم تحقق — أهم من موجّه أول مثالي.
قبل النشر، استخدم موجّه أمان منفصلًا
وجود APK عامل لا يجعل المستودع آمنًا. في طلب النشر الحقيقي صغت الحد بلغة عادية؛ وحوله Claude إلى فحوص للملفات المتتبعة والسجل قبل الدفع:
ادفع جميع التغييرات إلى المستودع العام في إيداع إنجليزي واحد جيد.
لا تدفع app id أو app hash الخاصين بي تحت أي ظرف. يجب أن يبقيا في ملف محلي مستبعد من المستودع. تحقق من ذلك بعناية قبل الدفع.يوزّع Telegram for Android بموجب GNU GPL v2 أو أي إصدار لاحق، ولذلك يحتفظ التفريع بالترخيص ويجعل المصدر متاحًا. وهناك التزام عملي أيضًا: صُن تفريعك، وراجع الفرق فيه، ولا تتعامل مع الشفرة المولّدة كأنها جديرة بالثقة تلقائيًا. يخفض الوكيل تكلفة التنفيذ بصورة جذرية؛ لكنه لا يلغي مسؤولية المالك.
ليس تطبيقًا للجميع — بل تطبيق لك أنت بالضبط
يجب أن يختار المنتج الموجّه للسوق العام ميزات منطقية لملايين الناس. أما النسخة الشخصية فيمكن أن تكون غريبة وضيقة ومثالية لشخص واحد. هنا يغيّر الوكلاء البرمجيات أكثر من أي موضع آخر: لا تحتاج إلى تأسيس شركة ناشئة أو انتظار تصويت على طلب ميزة لسنوات. أحيانًا يكفي مستودع مفتوح، ووصف دقيق، وكابل USB، واستعداد لفحص النتيجة.
لم تصبح الشفرة عديمة الفائدة. بل أصبحت أقل ندرة بكثير. وازدادت تبعًا لذلك قيمة حقك في أخذها وتغييرها وتشغيلها على جهازك.
الطريق المختصر
- اختر مصدر أندرويد مفتوحًا ودع الوكيل يجهّز سلسلة الأدوات.
- احصل بنفسك على بيانات الاعتماد الخاصة واحفظها في ملف محلي مُهمَل وحده.
- فعّل خيارات المطوّر وUSB debugging، ثم صل هاتفًا مفتوحًا.
- كلّف الوكيل ببناء APK وتثبيته وتشغيله والتحقق منه.
- صف السلوك الذي تريده بلغة عادية.
- كرّر التحسين على جهاز حقيقي، ثم دقق الأسرار والترخيص بصورة منفصلة قبل أي دفع.
أسئلة شائعة سريعة
هل يستطيع شخص غير مطوّر تعديل تطبيق أندرويد فعلًا باستخدام وكيل ذكاء اصطناعي؟
نعم، عندما يكون المصدر متاحًا ويمكن التحقق من المهمة على جهاز. ما زلت بحاجة إلى وصف السلوك المطلوب، والموافقة على الإجراءات الحساسة، وإضافة بيانات الاعتماد الخاصة محليًا، واختبار النتيجة؛ لكن الوكيل يستطيع تولّي معظم أعمال المستودع وسلسلة الأدوات والبناء والتثبيت وتصحيح الأخطاء.
أين أضع api_id وapi_hash الخاصين بتيليغرام في هذا التفريع؟
أنشئ local.properties في جذر المستودع وأضف TELEGRAM_API_ID وTELEGRAM_API_HASH من دون علامات اقتباس. يتجاهل Git الملف، ويحقن Gradle القيمتين في BuildConfig وقت البناء.
ما الذي يجب أن أفعله على هاتف أندرويد؟
فعّل خيارات المطوّر بالنقر على «رقم الإصدار» سبع مرات، وفعّل USB debugging، وصل هاتفًا مفتوحًا بكابل بيانات، ووافق على بصمة RSA الخاصة بالحاسوب. وقد تتطلب أجهزة Xiaomi أيضًا تفعيل Install via USB.