رفتن به مطلب
جامعه‌ی برنامه‌نویسان مُدرن ایران

جستجو در تالارهای گفتگو

در حال نمایش نتایج برای برچسب های 'اندروید'.



تنظیمات بیشتر جستجو

  • جستجو بر اساس برچسب

    برچسب ها را با , از یکدیگر جدا نمایید.
  • جستجو بر اساس نویسنده

نوع محتوا


وبلاگ‌ها

چیزی برای نمایش وجود ندارد

چیزی برای نمایش وجود ندارد

تالارهای گفتگو

  • انجمن‌های آی او استریم
    • اخبار و اعلامیه‌های سایت
    • اسناد و قوانین مرجع
    • رویداد‌ها و جلسات
    • معرفی محصولات نوشته شده‌ بومی
    • مرکز نظرسنجی جامعه‌ی برنامه‌نویسان
    • مقالات و اسناد مشاوره‌ای
    • مرکز چالش برانگیز برنامه‌نویسان
    • رمز‌های موفقیت
    • ابزار‌ها و نرم‌افزارهای کاربردی برنامه‌نویسان حرفه‌ای
  • استارتاپی و کسب‌و‌کار
    • استارتاپ‌ها
    • سرمایه گذاری
    • شتاب دهنده‌ها
    • پارک‌های علم و فناوری و مراکز رشد
    • مصاحبه با استارت‌آپ‌ها
    • قوانین حقوقی
    • داستان‌های موفقیت
    • کارآفرینان و متخصصین
    • مشاوره اجرای کسب‌وکار
    • اخبار حوزه‌ی استارتا‌پی
    • آگهی‌های استخدامی
  • زبان‌های برنامه نویسی
    • برنامه نویسی در C و ‏++C
    • برنامه نویسی با Java
    • برنامه نویسی با JavaScript
    • برنامه نویسی با Go
    • برنامه نویسی با Python
    • برنامه نویسی با Delphi
    • برنامه نویسی با Ruby
    • برنامه نویسی با VB6
  • طراحی و توسعه وب
    • برنامه نویسی در PHP
    • برنامه نویسی با Node.JS
  • طراحی و توسعه وب اپلیکیشن‌ها
    • طراحی و توسعه در Angular
    • طراحی و توسعه در React.JS
    • طراحی و توسعه در Vue.JS
  • طراحی و توسعه موبایل و اِمبِد‌ها و تلوزیون‌ها
    • برنامه نویسی تحت محصولات اپل
    • برنامه نویسی تحت محصولات گوگل
    • طراحی و توسعه تحت محصولات دیگر
  • برنامه‌نویسی سطح پایین و سیستم عامل‌ها
    • سیستم عامل‌های آزاد
    • سیستم عامل‌های تجاری
    • مباحث آموزشی مرتبط با سیستم‌عامل
  • شبکه و اینترنت
    • مباحث و منابع آموزشي
    • سوالات و مشکلات
  • بانک‌های اطلاعاتی
  • برنامه نویسی تحت محصولات اپل
  • برنامه نویسی تحت محصولات مایکروسافت
  • طراحی و توسعه تجربه کاربری (UX) و رابط کاربری (UI)
  • درخواست انجام پروژه (ویژه)
  • سوالات و مباحث عامیانه
  • سطل آشغال

Product Groups

  • کتاب‌ها و مقالات آموزشی

دسته ها

  • علمی
  • استارتاپی
  • برنامه‌نویسی
    • زبان‌های برنامه نویسی
    • معماری‌ها
  • کامپایلر و مفسر
  • محیط‌های توسعه
  • پلتفرم‌های توسعه
  • مجوز‌های نرم‌افزاری
  • فناوری‌ها
    • پردازش تصویر
    • اینترنت اشیاء
    • پردازش ابری (Cloud Computing)
    • چند سکویی (Cross-Platform)
    • بیگ دیتا (Big Data)
    • هوش مصنوعی (AI)
    • سخت افزار
    • نرم‌افزار و اپلیکیشن
    • اینترنت و شبکه
    • رمزنگاری
    • امبد‌ها (Embedded)
  • طراحی
    • تجربه کاربری
    • رابط کاربری

دسته ها

  • عمومی
  • گرافیکی
  • شبکه و ارتباطات

دسته ها

  • کامپایلر‌ها
  • محیط‌های توسعه
  • کتابخانه‌ها
  • ماژول‌ها و پلاگین‌ها
  • محصولات بومی
  • کتاب‌ها و مقالات
  • زبان‌ها و ابزار‌ها
  • طراحی و گرافیک

جستجو در ...

نمایش نتایجی که شامل ...


تاریخ ایجاد

  • شروع

    پایان


آخرین بروزرسانی

  • شروع

    پایان


فیلتر بر اساس تعداد ...

تاریخ عضویت

  • شروع

    پایان


گروه


درباره من


شماره تلفن همراه


شناسه گیت‌هاب


شناسه لینکدین


شناسه پیام رسان


شهر


آدرس پستی

15 نتیجه پیدا شد

  1. سلام خدمت کاربران محترم فروم. من تصمیم دارم وارد حوزه برنامه نویسی اندروید بشم. تجربه کد زنی دارم (html و وردپرس مقداری کار کردم). برای اندروید از کجا شروع کنم؟ چه زبانی؟ ممنون
  2. سلام من میخواهم دوباره مقدار و آیکن اکشن دوم را تغییر دهم. اما جواب نمی‌دهد. چرا؟ Notification.Builder notification = new Notification.Builder ( this ) .setSmallIcon ( R.drawable.ic_play ) .setContentTitle ( "madaraneh.mp3" ) .setContentText ( "madaraneh" ) .setContentIntent ( PendingIntent.getActivity ( this, 0, new Intent ( this, MusicPlayerActivity.class ), 0 ) ) .setOngoing ( true ) .addAction ( R.drawable.ic_rewind, "Rewind", rewindPending ) .addAction ( R.drawable.ic_play, "Play", playPending ) .addAction ( R.drawable.ic_forward, "Forward", forwardPending ) ; NotificationManager notificationManager=(NotificationManager)getSystemService ( NOTIFICATION_SERVICE ); notification.build ().actions[1]=new Notification.Action (R.drawable.a1,"hhhhhhhh",playPending); notificationManager.notify ( 12,notification.build () ); کدی که برای ویرایش آیکن اکشن دوم نوشتم این است: notification.build ().actions[1]=new Notification.Action (R.drawable.a1,"hhhhhhhh",playPending);
  3. سلام خسته نباشید من می‌خواهم اپلیکیشنی بنویسم که وقتی شارژ گوشی به 90 درصد رسید شارژ شدن تمام شود. با این که گوشی به برق وصل است. می‌شود در این رابطه کمکم کنید؟ ممنون
  4. سلام خسته نباشید من برنامه ی videoview را در اندروید نوشتم هیچ مشکلی نداره و اجرا میشه و با تغییر جهت گوشی مقادیر از بین میره و از اول مقداردهی میشن حتی ویدیو از اول شروع میکند اما وقتی من این مشخصه را در manifest به Activity میدهم تمام مقادیر حفظ میشوند و ویدیو هم از اول شروع نمیکند چرا؟ من که مقادیر را در onSaveInstanceState ذخیره نکردم آیا این مشخصه کار onSaveInstanceState را انجام میدهد؟ android:configChanges="screenSize|orientation"
  5. سلام خسته نباشید راه اصولی ذخیره مشخصات یک محصول در پایگاه چیست. مثلا برای کالای گوشی یک جدول مشخصات داشته باشیم و برای کالای لباس یه جدول مشخصات دیگر. درسته؟
  6. سلام من چرا با android نمیتونم بدون اینترنت از xamp که در کامپیوتر خودم قرار داره اطلاعات رو دریافت کنم و از من permission میخواد برا اینترنت. در حالی که نباید بخواد. چون من لوکال کار میکنم ایراد از IP نمیتونه باشه؟ چرا وصل شدن به اینترنت اجباریه؟ در غیر اینصورت اطلاعاتی از سرور نشان داده نمیشود و پرمیشن میخواد من آی پی سیستم خودمو میدم String Url="http://192.168.43.3/shop/register.php";
  7. سلام ببخشید سوالی داشتم. متد post و get که در html خواندیم با متد get و post اندروید فرق میکنه؟ متد get و post در html هر دو برای ارسال اطلاعات بود. فقط اگر با get ارسال میکردیم امنیت پایین بود به خاطر نمایش اطلاعات در آدرس بار مرورگر ولی سرعت ارسال اطلاعات با get زیاده و اگر با post ارسال کنیم امنیت بالاست چون در آدرس بار اطلاعات رو نشون نمیداد. در اندروید فرق میکنه؟ یعنی آیا برای ارسال اطلاعات میتوان از دو متد استفاده کرد؟
  8. سلام من کدها رو نوشتم ولی با این خطا مواجه میشوم. ایراد کدهای من چی میتونه باشه E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.shop, PID: 3607 android.view.InflateException: Binary XML file line #24: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:761) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727) at android.view.LayoutInflater.rInflate(LayoutInflater.java:858) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821) at android.view.LayoutInflater.rInflate(LayoutInflater.java:861) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821) at android.view.LayoutInflater.inflate(LayoutInflater.java:518) at android.view.LayoutInflater.inflate(LayoutInflater.java:426) at com.example.shop.Adapter.ProductAdapter.onCreateViewHolder(ProductAdapter.java:35) at com.example.shop.Adapter.ProductAdapter.onCreateViewHolder(ProductAdapter.java:19) at androidx.recyclerview.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:6794) at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5975) at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5858) at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5854) at androidx.recyclerview.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2230) at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1557) at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1517) at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:612) at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3924) at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:3641) at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4194) at android.view.View.layout(View.java:17637) at android.view.ViewGroup.layout(ViewGroup.java:5575) at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1079) at android.view.View.layout(View.java:17637) at android.view.ViewGroup.layout(ViewGroup.java:5575) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323) at android.widget.FrameLayout.onLayout(FrameLayout.java:261) at android.view.View.layout(View.java:17637) at android.view.ViewGroup.layout(ViewGroup.java:5575) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585) at android.widget.LinearLayout.onLayout(LinearLayout.java:1494) at android.view.View.layout(View.java:17637) at android.view.ViewGroup.layout(ViewGroup.java:5575) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323) at android.widget.FrameLayout.onLayout(FrameLayout.java:261) at android.view.View.layout(View.java:17637) at android.view.ViewGroup.layout(ViewGroup.java:5575) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585) at android.widget.LinearLayout.onLayout(LinearLayout.java:1494) at android.view.View.layout(View.java:17637) at android.view.ViewGroup.layout(ViewGroup.java:5575) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323) at android.widget.FrameLayout.onLayout(FrameLayout.java:261) at com.android.internal.policy.DecorView.onLayout(DecorView.java:726) at android.view.View.layout(View.java:17637) at android.view.ViewGroup.layout(ViewGroup.java:5575) at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2346) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2068) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1254) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6337) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:874) at android.view.Choreographer.doCallbacks(Choreographer.java:686) at android.view.Choreographer.doFrame(Choreographer.java:621) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:860) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6119) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) Application terminated. من در productActivity اینارو نوشتم: package com.example.shop.Adapter; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import com.example.shop.Models.Products; import com.example.shop.R; import java.util.ArrayList; import java.util.List; public class ProductAdapter extends RecyclerView.Adapter<ProductAdapter.ProductViewHolder>{ private List<Products> products=new ArrayList<Products> ( ); private Context context; public ProductAdapter(List<Products> products, Context context) { this.products = products; this.context = context; } @NonNull @Override public ProductViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view=LayoutInflater.from ( parent.getContext () ).inflate ( R.layout.products_list_row,parent,false);//inflater.inflate (R.layout.products_list_row,parent); return new ProductViewHolder(view); } @Override public void onBindViewHolder(@NonNull ProductViewHolder holder, int position) { Products oP=products.get ( position ); holder.txt_priceProduct.setText ( oP.getPriceProduct () ); holder.txt_nameProduct.setText (oP.getNameProduct () ); holder.img_imgProduct.setImageDrawable (oP.getImg_product () ); } @Override public int getItemCount() { return products.size (); } public class ProductViewHolder extends RecyclerView.ViewHolder { public ImageView img_imgProduct; public TextView txt_nameProduct; public TextView txt_priceProduct; public ProductViewHolder(@NonNull View itemView) { super ( itemView ); img_imgProduct=itemView.findViewById ( R.id.imgProduct ); txt_nameProduct=itemView.findViewById ( R.id.nameProduct ); txt_priceProduct=itemView.findViewById ( R.id.priceProduct ); } } } و در productModel این کدهارو: package com.example.shop.Models; import android.graphics.drawable.Drawable; public class Products { private Drawable img_product; private String nameProduct; private String priceProduct; public Products(Drawable img_product, String nameProduct, String priceProduct) { this.img_product = img_product; this.nameProduct = nameProduct; this.priceProduct = priceProduct; } public Drawable getImg_product() { return img_product; } public void setImg_product(Drawable img_product) { this.img_product = img_product; } public String getNameProduct() { return nameProduct; } public void setNameProduct(String nameProduct) { this.nameProduct = nameProduct; } public String getPriceProduct() { return priceProduct; } public void setPriceProduct(String priceProduct) { this.priceProduct = priceProduct; } } و در productAdapter این کدها رو: package com.example.shop.Adapter; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import com.example.shop.Models.Products; import com.example.shop.R; import java.util.ArrayList; import java.util.List; public class ProductAdapter extends RecyclerView.Adapter<ProductAdapter.ProductViewHolder>{ private List<Products> products=new ArrayList<Products> ( ); private Context context; public ProductAdapter(List<Products> products, Context context) { this.products = products; this.context = context; } @NonNull @Override public ProductViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view=LayoutInflater.from ( parent.getContext () ).inflate ( R.layout.products_list_row,parent,false);//inflater.inflate (R.layout.products_list_row,parent); return new ProductViewHolder(view); } @Override public void onBindViewHolder(@NonNull ProductViewHolder holder, int position) { Products oP=products.get ( position ); holder.txt_priceProduct.setText ( oP.getPriceProduct () ); holder.txt_nameProduct.setText (oP.getNameProduct () ); holder.img_imgProduct.setImageDrawable (oP.getImg_product () ); } @Override public int getItemCount() { return products.size (); } public class ProductViewHolder extends RecyclerView.ViewHolder { public ImageView img_imgProduct; public TextView txt_nameProduct; public TextView txt_priceProduct; public ProductViewHolder(@NonNull View itemView) { super ( itemView ); img_imgProduct=itemView.findViewById ( R.id.imgProduct ); txt_nameProduct=itemView.findViewById ( R.id.nameProduct ); txt_priceProduct=itemView.findViewById ( R.id.priceProduct ); } } } یک روزه که کلا من روی پیدا کردن خطا گذاشتم اما پیدا نکردم. لطفا کمکم کنید
  9. سلام روز بخیر من میخوام توی اپلیکیشنم مثلا گالری رو باز کنم و باید اولش permission بگیرم. وقتی برای بار اول اینکارو می کنم و صفحه ی اجازه گرفتن بالا میاد و من میزنم اجازه دارد برنامه crash می کنه ولی اگه خارج شم و دوباره وارد شم گالری رو باز می کنه.جالب اینه که حالا اگر من مدل permission دیگه مثلا برای تماس تلفنی رو حالا بزنم بدون مشکل انجام میشه حتی برای اولین بار میخواستم ببینم کسی میدونه مشکل کجاست؟ ورژنsdk :24.4.1 اندروید گوشی 6 برایgalaxygrandprime+ target api:api28 android 9 توی android manifest هم اضافه کردم permission هارو
  10. mostafajamali

    سلام من خواستم کیت اندروید نصب کنم اس دی کا و ان دی کا و جاوا 10 هم نصب کردم اما اررور زیرو دارم کسی میدونه مشکلش چیه؟ ممنون از کمکتون عکس اررور
  11. سلام دوستان، نظرتان درمورد گنو/لینوکس چیست ؟ می‌خواهم کار با این سیستم‌عامل را شروع کنم، پیشنهادتان چیست ؟ کیوت توی ویندوز با خروجی اندروید خیلی اذیت میکنه، اول که خروجی نمیداد، بعد که درستش کردم، الان از طریق اندروید استادیو SDK رو آپدیت کردم، دیگه خروجی نمیده! کلا کیت های اندروید را بسته. اول SDK رو آپدیت کردم، دیدم دیگه جواب نمیده بعد NDK رو آپدیت کردم، مشخصات : NDK 20 SDK 29 JDK 1.8 - اگر بخوام برم سراغ گنو/لینوکس باید دوباره کل SDK و NDK و JDK برای لینوکس دانلود کنم؟
  12. با سلام و عرض تسلیت به مناسبت شهادت مولای متقیان امام علی علیه السلام. من روی اوبونتو ۱۸.۰۴ کیوت ۵.۱۲.۳ نصب کردم و همه ی پیش نیاز های برنامه نویسی اندروید هم درست هست. ولی وقتی می خوام بیلد کنم و خروجی apk بگیرم پیغام زیر رو دریافت می کنم: /Qt/5.12.3/android_armv7/include/QtCore/qglobal.h:50: error: 'assert.h' file not found # include <assert.h> ^ نکته: خروجی دسکتاپ راحت گرفته میشه و کار می کنه ولی اندروید نه.
  13. با سلام خسته نباشید. از وقتی به Qt 5.12 اپدیت کردم نمیتونم خروجی اندروید بگیریم. (SDK Version: 26.1.1, NDK Version: 18.1.506304) java version "1.8.0_181" خطا: * What went wrong: A problem occurred configuring root project 'android-build'. > Could not resolve all artifacts for configuration ':classpath'. > Could not find com.android.tools.build:gradle:3.2.0. Searched in the following locations: https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.2.0/gradle-3.2.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.2.0/gradle-3.2.0.jar https://jcenter.bintray.com/com/android/tools/build/gradle/3.2.0/gradle-3.2.0.pom https://jcenter.bintray.com/com/android/tools/build/gradle/3.2.0/gradle-3.2.0.jar Required by: project : * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights. * Get more help at Gradle | Search for Help with Gradle Qt5.12.0/5.12.0/android_armv7/bin/androiddeployqt" exited with code 14 کیت : (Android for armeabi-v7a (Clang Qt 5.12.0 for Android ARMv7
  14. سلام. من چند وقتی هست که می خوام برای اندروید با کیوت یه اپ ساده رو Run کنم و درگیر خیلی چیزا بودم تا به این مرحله برسم. الان می خوام با مشخصات زیر یه از یه نمونه کد Qt برای اندروید اجرا بگیرم ولی توی Build به مشکل بر خوردم. Qt 5.11.1 Compiler: MinGW 4.9 Kit: android arm7 JDK: 8 NDK:17 SDK: Update to the last version که در موقع build با این خطا مواجه می شم. Exception in thread "main" java.util.zip.ZipException: error in opening zip file at java.util.zip.ZipFile.open(Native Method) at java.util.zip.ZipFile.(ZipFile.java:225) at java.util.zip.ZipFile.(ZipFile.java:155) at java.util.zip.ZipFile.(ZipFile.java:169) at org.gradle.wrapper.Install.unzip(Install.java:215) at org.gradle.wrapper.Install.access$600(Install.java:27) at org.gradle.wrapper.Install$1.call(Install.java:75) at org.gradle.wrapper.Install$1.call(Install.java:48) at org.gradle.wrapper.ExclusiveFileAccessManager.access(ExclusiveFileAccessManager.java:69) at org.gradle.wrapper.Install.createDist(Install.java:48) at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:107) at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:61) Warning: QML import could not be resolved in any of the import paths: QtQuick.Controls.impl Warning: QML import could not be resolved in any of the import paths: QtQuick.Controls.Fusion.impl Warning: QML import could not be resolved in any of the import paths: QtQuick.Controls.Imagine.impl Warning: QML import could not be resolved in any of the import paths: QtQuick.Controls.Material.impl Warning: QML import could not be resolved in any of the import paths: QtQuick.Controls.Universal.impl Building the android package failed! 03:39:16: The process "C:\Qt\5.11.1\android_armv7\bin\androiddeployqt.exe" exited with code 14. Error while building/deploying project gallery (kit: Android for armeabi-v7a (GCC 4.9, Qt 5.11.1 for Android armv7)) When executing step "Build Android APK" ممنون می شم اگر بتونید راهنمایی کنید.
  15. مقدمه‌ای ساده با توجه به فعالیت‌های هیجان انگیز اخیر گوگل و کنفرانس آی‌او امسال (Google IO/2018) که فلاتر (Flutter) رو معرفی کرد، فلاتر به یاری چند تا از ویژگی‌های قدرتمندش توانست توجه تقریبا تعداد زیادی از توسعه دهنده‌ها را به خود جلب کند و باعث کنجکاوی آنها شود. با توجه به این که شروع کار با این فریمورک در ایران به دلیل تحریم ممکن است کمی دردسر ساز باشد، بنده این آموزش ساده و صریح رو آماده کردم تا شاید گره از کار کسی باز شود و همچنین معرفی دوباره و دقیق‌تر فلاتر به زبان شیرین پارسی می‌تواند درک بهتری از این فریمورک و ویژگی های قدرتمندش به ما بدهد. پس با من همراه باشید. نکته: لازم به ذکر است قبل از شروع نصب، برای دریافت پیش‌نیاز‌ها، نیاز به پروکسی دارید. پس حتما یکی تهیه کنید! فلاتر (Flutter) چیست؟ به گفته‌ی گوگل: کاربران برنامه ها انتظار دارند برنامه های شما دارای طراحی زیبا، انیمیشن‌های نرم و کارایی بالا باشند. برای رسیدن به این امر، توسعه دهنده‌ها نیاز دارند تا بدون نگرانی برای کیفیت یا کارایی امکانات جدید را سریع تر از همیشه بسازند. به همین دلیل ما فلاتر را ساختیم. فلاتر، فریموک UI موبایل گوگل که یک راه سریع و واضح برای توسعه دهنده‌ها فراهم میکند تا روی آی او اس و اندروید برنامه‌های بومی (Native) بسازند. این به خاطر این است که برنامه‌های ساخته شده با فلاتر از یک کد پایه ساخته شده‌اند، مستقیما به کد بومی Arm کامپایل میشوند، از پردازنده گرافیکی (GPU) استفاده می‌کنند و می‌توانند به ای‌پی‌آی (API) ها و سرویس های پلتفرم مورد نظر دسترسی داشته باشند. فلاتر می‌تواند به سه طریق در همان روز اول به شما کمک کند: سرعت بالای توسعه: فلاتر برای سرعت بالای توسعه دهنده مهندسی شده است. راه‌اندازی گرم با حفظ وضعیت (Stateful hot reload) این اجازه را به شما می‌دهد که کد خود را تغییر داده و تغییرات را در کمتر از یک ثانیه و بدون از دست دادن حالت برنامه مشاهده کنید! علاوه بر این فلاتر با ابزار توسعه ی مشهور ادغام می‌شود؛ یعنی شما می‌توانید سریعا با ادیتور یا IDE ای که می‌شناسید و دوست دارید خود شروع به کار کنید. رابط کاربری منعطف: فلاتر ویجت‌ها، رندر کردن‌ها، انیمیشن‌ها و حرکات (Gesture) را به فریمورک انتقال می‌دهد تا برای شما کنترل کامل روی هر پیکسل از صفحه را فراهم کند! این یعنی شما انعطاف دارید تا طراحی های شخصی سازی شده بسازید. برنامه‌های بومی برای آی‌او‌اس و اندروید: برنامه های فلاتر قرارداد های پلتفرم و جزئیات صفحه را مثل اسکرول کردن (Scrolling)، پیمایش، آیکون‌ها، فونت‌ها و ... را دنبال می‌کند. به همین دلیل است که برنامه‌های ساخته شده با فلاتر در اپ استور و گوگل پلی مورد تایید است. فلاتر برای توسعه دهنده‌ها عالی است، هم برای افراد باتجربه و هم برای تازه کاران در موبایل! اگر شما در موبایل تازه کار هستید، فلاتر به شما یک راه سریع، جالب و مدرن برای ساخت برنامه‌های بومی می‌دهد. اگر شما یک توسعه دهنده‌ی با تجربه‌ی موبایل هستید، می‌توانید فلاتر را جریان کار و ابزار‌های موجود خود اضافه کنید. فلاتر آزاد و متن‌باز است، و توسط توسعه دهنده‌ها و سازمان‌های جهان مثل enterprise، آژانس‌ها و استارت‌آپ ها استفاده شده است. برای اطلاعات بیشتر و شروع می‌توانید به وب‌سایت فلاتر مراجعه کنید. شروع کار با فلاتر نکته: مراحلی که اینجا توضیح داده شده نسخه فارسی این لینک است به علاوه ی نکته‌هایی که چطور قسمت‌هایی که به دلیل تحریم کار نمی‌کنند را به راه بی‌اندازیم. در صورت وجود مشکل دیگری لطفا کامنت بگذارید تا در صورت حل مشکل این پست آپدیت شود. دانلود کیت توسعه نرم‌افزار فلاتر (Flutter SDK): برای شروع ابتدا باید کیت توسعه فلاتر را دانلود کنید در اینجا چون ما با سیستم عامل اوبونتو کار می‌کنیم لازم است که به این لینک مراجعه کرده و کیت توسعه فلاتر را دانلود کنیم. لینک دانلود در تصویر زیر قابل مشاهده است. که زمان انتشار این نوشته نسخه 0.3.2 بتا است. فایل فشرده دانلود شده را به دایرکتوری مورد نظر خود انتقال داده و آن را استخراج (Extract) کنید. برای مثال: $ cd ~/development $ tar xf ~/Downloads/flutter_linux_v0.3.2-beta.tar.xz وقتی که با ترمینال در دایرکتوری مورد نظر هستید با اجرای دستور زیر به صورت موقت ابزار فلاتر را به مسیر خود اضافه کنید: $ export PATH=`pwd`/flutter/bin:$PATH حالا شما آماده هستید که دستورات فلاتر را وارد کنید. اجرای دکتر فلاتر: دستور زیر را اجرا کنید تا ببینید آیا وابستگی‌ای وجود دارد که شما برای کامل کردن نصب نیاز به نصب آن داشته باشید: $ flutter doctor این دستور محیط شما را بررسی کرده و گزارشی برای شما در صفحه ترمینال نمایش میدهد. کیت توسعه‌ی دارت همراه با فلاتر وجود دارد و ضروری نیست که دارت را به صورت جدا نصب کنید. به دقت خروجی این دستور را برای برنامه‌های دیگری که نیاز به نصب آن دارید بررسی کنید. ممکن است لازم باشد کار‌های دیگری هم انجام دهید. برای مثال: [-] Android toolchain - develop for Android devices • Android SDK at /Users/mrdimaan/Library/Android/sdk ✗ Android SDK is missing command line tools; download from https://goo.gl/XxQghQ • Try re-installing or updating your Android SDK, visit https://flutter.io/setup/#android-setup for detailed instructions. مراحل پایین تر نحوه انجام این کار‌ها و اتمام روند نصب را به شما نشان می‌دهند. بروزرسانی مسیر شما: شما می‌توانید متغیر آدرس خود را فقط برای جلسه (session) در حال حاظر در خط فرمان بروزرسانی کنید. (همانطور که بالاتر آن را انجام دادیم). احتمالا میخواهید این متغیر یا برای همیشه آپدیت کنید، تا بتوانید دستورات فلاتر را در هر جلسه ترمینال اجرا کنید. ابتدا با ترمینال به دایرکتوری که پوشه با نام flutter در آن قرار دارد بروید و سپس با دستور pwd آدرس کامل آن مسیر را بدست آورید. برای مثال: $ pwd $ /home/moein/Documents/flutter-dev حالا فایل .bash_profile را باز کنید. در صورتی که این فایل وجود ندارد آن را بسازید، عبارت زیر را در آن قرار دهید و به جای [PATH] آدرسی که از طریق pwd بدست آوردید را قرار دهید: export PATH=[PATH]/flutter/bin:$PATH حالا دستور زیر را اجرا کنید تا پنجره ی در حال حاظر را تازه سازی (Refresh) کند: $ source $HOME/.bash_profile نصب اندروید نکته: فلاتر به نصب کامل اندروید استودیو متکی است تا وابستگی های پلتفرم اندروید آن را استفاده کند. با این حال شما می‌توانید برنامه های فلاتر خود را در ادیتور های مختلفی بنویسید. نصب اندروید استودیو اندروید استودیو را از اینجا دانلود کرده و نصب کنید. توجه داشته باشید که برای دسترسی به این وبسایت حتما باید پروکسی خود را فعال کنید. اندروید استودیو را اجرا کنید. در اولین برخورد صفحه نصب را میبینید. به دلیل تحریم، اندروید استودیو قادر به دانلود یا یافتن ابزار و SDK نخواهد بود بنابراین در اولین نصب با رفتن به مراحل بعدی چیزی دانلود نخواهد شد. بعد از رسیدن به مرحله آخر و انتخاب دکمه Finish صفحه خوش‌آمدگویی برای شما باز میشود که باید از پایین صفحه تنظیمات را باز کرده و به قسمت پروکسی وارد شوید. بعد از وارد کردن مشخصات پروکسی برنامه را ببندید و دوباره باز کنید این دفعه هم صفحه نصب را مشاهده خواهید کرد با این تفاوت که در مراحل نصب اندروید استودیو به صورت اتوماتیک آخرین کیت توسعه اندروید (Android SDK)، کیت ابزار پلتفرم (Android SDK Platform-Tools)، و کیت ابزار بیلد (Android SDK Build-Tools) را دانلود میکند که برای توسعه برنامه اندروید با فلاتر مورد نیاز است. نصب دستگاه اندرویدی شما ابتدا Developer options و USB debugging را در دستگاه خود فعال کنید. با استفاده از کابل USB موبایل خود را به کامپیوتر وصل کنید و اگر در موبایل شما اجازه خواست آن را تایید کنید. در ترمینال دستور flutter devices را اجرا کرده تا ببینید فلاتر دستگاه اندروید شما را شناسایی کرده یا خیر. برنامه فلاتر خود را با اجرای دستور flutter run راه اندازی کنید. نصب شبیه‌ساز اندروید برای آماده سازی تست و اجرای برنامه فلاتر شما روش شبیه‌ساز اندروید این مراحل را دنبال کنید: قابلیت VM Acceleration را روی کامپیوتر خود فعال کنید. AVD Manager را که در مسیر Android Studio>Tools>Android قرار دارد اجرا کنید و یک دستگاه مجازی بسازید. در قسمت Emulated Performance گزینه Hardware - GLES 2.0 را انتخاب کنید تا hardware acceleration را فعال کنید. حالا درست بودن مشخصات را تایید کرده و Finish را انتخاب کنید. سپس دستگاه شما در لیست دستگاه های اندروید مجازی اضافه می‌شود پس با کلیک روی آیکون Run دستگاه اندرویدی را راه اندازی کنید. حالا برنامه ی خود را با دستور flutter run اجرا کنید. آماده سازی محیط برنامه نویسی اندروید استودیو در صورتی که می‌خواهید از این IDE برای برنامه نویسی برنامه خود استفاده کنید کافیست پلاگین Flutter و Dart را در اندروید استودیو نصب کنید سپس بعد از یکبار راه اندازی مجدد اندروید استودیو قابلیت های جدیدی مربوط به فلاتر به اندروید استودیو اضافه خواهد شد و در صفحه خوش آمد گویی گزینه ای برای ساخت پروژه فلاتر جدید نمایان خواهد شد. برای اجرای برنامه خود کافیست دستگاه اندروید مجازی خود را راه اندازی کرده و دکمه ی run در اندرید استودیو را انتخاب کنید. ویژوال استودیو کد در صورت استفاده از ویژوال استودیو کد هم به همین صورت میتوانید افزونه Flutter را نصب کنید. با نصب افزونه Flutter افزونه ی Dart هم به صورت خودکار نصب خواهد شد. حالا برای ساخت پروژه‌ی جدید کافیست Ctrl + shift + p را بزنید، حالا در ورودی flutter را تایپ کنید و از بین گزینه‌های نمایش داده شده New Project را انتخاب کنید. همچنین برای اجرای پروژه میتوانید در گزینه‌های نمایش داده شده run را انتخاب کنید. نکته خیلی مهم: اگر هنوز نتوانستید برنامه ی خود را اجرا کنید اصلا نگران نباشید. چون باید برای Gradle هم پروکسی ست کنید تا برنامه شما اجرا شود. برای این کار فایل gradle.properties را باز کرده و محتوای داخل آن را به این صورت تغییر دهید و مشخصات پروکسی خود را به جای داده های فایل وارد کنید: org.gradle.jvmargs=-DsocksProxyHost=0.0.0.0 -DsocksProxyPort=1080 همچنین نیاز هست تا محتویات فایل ‌build.gradle را به شکل زیر تغییر دهید: buildscript { repositories { jcenter () maven { url "https://maven.google.com" } } dependencies { classpath 'com.android.tools.build:gradle:3.0.1' } } allprojects { repositories { jcenter () maven { url "https://maven.google.com" } } } rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" } subprojects { project.evaluationDependsOn(':app') } task clean(type: Delete) { delete rootProject.buildDir }
×
×
  • جدید...