Tôi đang tham gia một khóa học về phát triển Android / iPhone và chúng tôi đã dành 8 tuần với Titanium (không phải toàn thời gian) (Phiên bản là Titanium 1.4.2 và thời gian là vào khoảng tháng 11 năm 2010). Đây là kinh nghiệm của tôi.
iPhone Android nhắm mục tiêu kép
Mặc dù các hướng dẫn API tuyên bố rằng chức năng có sẵn cho cả Android và iPhone, nhưng đây không phải là trường hợp. Phần lớn những thứ đơn giản là không hoạt động trên một trong những nền tảng. Một số thứ hoạt động khác nhau.
Rất nhiều người trong lớp đã thực hiện các ứng dụng iPhone và họ không thể làm cho chúng hoạt động trên Android mà không cần viết lại. Tôi đã phát triển một ứng dụng dành cho trẻ em đơn giản có tên Animap (xem android market / Appstore ở Thụy Điển) và bắt đầu phát triển dưới Windows. Khi mục tiêu Android hoạt động, tôi đã mở dự án trên OS X. Nó không hiển thị bất kỳ công cụ xây dựng nào cho iPhone, chỉ dành cho Android. Bạn cần bắt đầu một dự án mục tiêu kép trong OS X. (Ok, tôi đã sao chép các tệp có liên quan sang một dự án mới). Vấn đề tiếp theo - hoạt hình không hoạt động trên iPhone (chúng hoạt động trên Android). Các sự kiện cuộn không hoạt động giống nhau trên iPhone. (tức là trên Android, bạn nhận được sự kiện chưa chạm tới khi người dùng dừng cuộn và nhả ngón tay khỏi màn hình, điều này không xảy ra trên iPhone).
Vì điều này không được đề cập ở đâu đó, về cơ bản bạn cần phải thực hiện thử nghiệm và lập trình lỗi trên nền tảng đầu tiên, sau đó trên nền tảng khác. Bằng cách dùng thử và lỗi, tôi có nghĩa là sẽ mất khoảng hai ngày để có được một Ứng dụng đơn giản như Animap hoạt động trên nền tảng khác. Bạn cũng sẽ cần phải có if (android) thì ... hoặc if (iphone) ... trên toàn bộ mã của bạn ...
Tải xuống và thiết lập
Bạn phải làm theo hướng dẫn của bức thư. Đừng cố sử dụng java 64 bit. Nó sẽ không biên dịch ứng dụng demo KitchenSink 1.4.0. (1.3 hoạt động OK!) Bạn phải đặt các tệp trực tiếp vào ổ C vì tên đường dẫn dài sẽ làm cho chương trình bên ngoài không nhận được tất cả các tham số dòng lệnh nếu chúng dài. (Tốt cho các chương trình nhỏ) 1/3 số lần, chuỗi công cụ chỉ dừng lại và bạn phải nhấn 'khởi chạy lại. Sau đó, nó có thể sẽ làm việc ... rất không đáng tin cậy. Trình giả lập sẽ không được tìm thấy khi khởi động và sau đó bạn chỉ cần tắt adb.exe bằng Ctrl + Alt + Delete và thử lại.
Kết nối mạng
Trên mạng wifi, đôi khi bạn mất kết nối trực tiếp và Titanium gặp sự cố (giao diện biên dịch / triển khai) Nếu bạn không có kết nối internet đang hoạt động, nó sẽ không khởi động vì nó không thể đăng nhập bạn vào máy chủ của họ.
API
CSS, HTML và jQuery dễ dàng so với điều này. Titanium giống với bất kỳ API GUI cũ nào khác và bạn cần đặt một số thuộc tính cho mỗi nút / trường / v.v. Nhận sai một lĩnh vực chỉ là để dễ dàng, ghi nhớ tất cả các thuộc tính cần phải được đặt? Bạn đã đánh vần nó bằng chữ in hoa đúng chỗ? (vì trình biên dịch này không bị bắt bởi trình biên dịch, nhưng sẽ được coi là lỗi thời gian chạy nếu bạn may mắn kiểm tra phần đó)
Trong Titanium, mọi thứ chỉ đơn giản bị phá vỡ khi bạn thêm một chế độ xem khác trên đầu điều khiển hoặc nhấp vào một nơi khác trong GUI.
Tài liệu
Một số trang API mang biểu tượng Android, nhưng sẽ chỉ trả về null khi bạn cố gắng tạo điều khiển. Chúng không chỉ đơn giản là có sẵn trên nền tảng Android bất chấp các biểu tượng. Đôi khi Android được đề cập để không hỗ trợ một phương thức cụ thể, nhưng sau đó toàn bộ API bị thiếu.
Bồn rửa chén
Ứng dụng demo. Tôi đã đề cập đến nó không biên dịch nếu bạn đặt nó trong thư mục dự án Eclipse của bạn vì đường dẫn quá dài? Phải được đặt trên ổ C của bạn trong thư mục gốc. Tôi hiện đang sử dụng một liên kết Symbolik (mklink / J ...)
Phương pháp không có giấy tờ
Bạn phải sử dụng những thứ như nhãn.setText ('Hello World') để thay đổi nhãn đáng tin cậy nhưng điều này hoàn toàn không được ghi lại.
Gỡ lỗi
Titanium.API.info ('Bản in là cách duy nhất để gỡ lỗi');
Chỉnh sửa
Các API không có sẵn ở bất kỳ định dạng tốt nào, do đó bạn không thể hoàn thành mã thông thường với sự trợ giúp, v.v. trong Eclipse. Aptana hãy giúp đỡ!
Phần cứng
Có vẻ như trình biên dịch / công cụ không đa luồng nên một máy tính nhanh với ổ cứng nhanh là điều bắt buộc, vì bạn phải thực hiện nhiều thử nghiệm & lỗi. Tôi đã đề cập đến các tài liệu nghèo? Bạn phải thử mọi thứ ở đó vì bạn không thể tin tưởng được!
Một số điều tích cực
- Mã nguồn mở
Từ các dự án trước đây, tôi đã tự hứa sẽ không bao giờ sử dụng nguồn đóng nữa vì bạn không thể sửa chữa mọi thứ chỉ bằng cách ném hàng giờ và nhân lực vào nó. Quan trọng khi bạn trễ dự án và cần giao hàng cho một thời hạn khó khăn. Đây là nguồn mở và tôi đã có thể thấy lý do tại sao chuỗi công cụ bị hỏng và thực sự cũng sửa nó.
Cơ sở dữ liệu
Nó cũng mở. Bạn có thể chỉ cần thấy rằng bạn không đơn độc và thực hiện một cách giải quyết thay vì 4 giờ khác dành cho bản dùng thử & lỗi.
cộng đồng
- Có vẻ là hoạt động trên diễn đàn của họ.
Lỗi
- Titanium 1.4 không an toàn . Điều đó có nghĩa là nếu bạn sử dụng các luồng (sử dụng url: property trong lệnh gọiWindow) và chương trình như các luồng đang hoạt động và gửi các sự kiện với dữ liệu qua lại, bạn gặp rất nhiều thứ rất lạ - xử lý bị mất, bị mất cửa sổ, quá nhiều sự kiện, quá ít sự kiện, v.v ... Điều này hoàn toàn phụ thuộc vào thời gian, việc đặt các hàng mã theo thứ tự khác nhau có thể làm hỏng hoặc chữa lành ứng dụng của bạn. Việc thêm một cửa sổ trong một file.js khác sẽ phá vỡ sự thực thi app.js của bạn ... Điều này cũng làm hỏng các cơ sở dữ liệu nội bộ trong Titanium, vì đôi khi chúng có thể cập nhật các cơ sở dữ liệu nội bộ theo paralell, ghi đè một giá trị vừa thay đổi bằng một thứ khác.
Phần lớn các vấn đề tôi gặp phải với Titanium xuất phát từ nền tảng của tôi trên các hệ thống thời gian thực như OSE, người hỗ trợ hàng trăm chủ đề, sự kiện và thông điệp truyền qua. Điều này được cho là hoạt động trong Titanium 1.4 nhưng đơn giản là nó không làm điều đó một cách đáng tin cậy.
Javascript (mới đối với tôi) chết lặng vì lỗi thời gian chạy. Điều này cũng có nghĩa là các lỗi nhỏ và phổ biến, như viết sai tên biến hoặc đọc trong một con trỏ null không gặp sự cố khi cần để bạn có thể gỡ lỗi. Thay vào đó, các phần trong chương trình của bạn chỉ dừng hoạt động, ví dụ như một trình xử lý sự kiện, vì bạn đã đặt sai / đặt sai một ký tự.
Sau đó, chúng ta có nhiều lỗi đơn giản hơn trong Titanium, như một số tham số không hoạt động trong các chức năng (ít nhất là khá phổ biến trên nền tảng Android).
Tốc độ chu kỳ gỡ lỗi Thử và Lỗi Khi chạy Titnium Developer trên một số máy tính, tôi nhận thấy nút cổ chai là ổ cứng. Ổ SSD trên máy tính xách tay giúp chu trình xây dựng nhanh hơn khoảng 3-5 lần so với ổ 4200 vòng / phút. Trên máy tính để bàn, việc có các ổ đĩa kép trong RAID 1 (chế độ phân loại) giúp việc xây dựng nhanh hơn khoảng 25% so với trên một ổ đĩa có CPU nhanh hơn một chút và nó cũng đánh bại máy tính xách tay ổ SSD.
Tóm lược
- Từ các bình luận trong chủ đề này, dường như có một cuộc chiến về số lượng nền tảng mà một công cụ như thế này có thể cung cấp cho ứng dụng. Số lượng API dường như là điểm bán hàng quan trọng.
Điều này tỏa sáng rất nhiều khi bạn bắt đầu sử dụng nó. Nếu bạn nhìn vào bugtracker mở, bạn sẽ thấy rằng số lượng lỗi tiếp tục tăng nhanh hơn số lượng lỗi cố định. Đây thường là một dấu hiệu cho thấy các nhà phát triển tiếp tục bổ sung thêm chức năng, thay vì tập trung vào việc giảm số lượng lỗi.
Là một nhà tư vấn đang cố gắng cung cấp các ứng dụng khá đơn giản cho nhiều nền tảng cho khách hàng - tôi không chắc điều này thực sự nhanh hơn so với việc phát triển ứng dụng gốc trên hai nền tảng. Điều này là do thực tế là khi bạn tăng tốc, bạn rất nhanh với Titanium, nhưng rồi đột nhiên bạn nhìn xuống và thấy mình ở một lỗ sâu đến mức bạn không biết phải mất bao nhiêu giờ cho một cách giải quyết. Bạn chỉ có thể KHÔNG hứa hẹn một chức năng nhất định cho một thời hạn / thời gian / chi phí nhất định.
Về bản thân: Tôi đã sử dụng Python được hai năm với wxPython. (GUI đó không nhất quán, nhưng không bao giờ bị hỏng như thế này. Có thể tôi chưa hiểu mô hình luồng được sử dụng bởi Javascript và Titanium, nhưng tôi không đơn độc theo các diễn đàn thảo luận mở của họ, các đối tượng GUI đột nhiên sử dụng sai ngữ cảnh / không cập nhật .. ???) trước đó tôi có nền tảng về lập trình C và ASM cho thiết bị di động.
[chỉnh sửa - thêm một phần có lỗi và không an toàn cho chuỗi] [Chỉnh sửa - hiện đã làm việc với nó được một tháng +, chủ yếu trên PC nhưng một số trên OS X cũng vậy. Đã thêm mục tiêu kép iPhone và Android. Đã thêm tốc độ chu kỳ gỡ lỗi dùng thử và lỗi.]