Month ago, my colleagues complained that our project was slow to build: it normally took 5 minutes, especially in branch switching it took about 10 minutes. Then I found that it doesn’t belong to only our project, it’s the common issue. And here are somethings I have done in our Android project to get its build faster.

Profiling

How long it takes to get your build done? Let’s add the –profile param to have the exact number. In Android Studio, go to Preferences -> Build, Execution, Deployment -> Compiler and set:

Let build. You could file a HTML file in [project_dir]/build/reports/profile/ generated with the detail time spent for each build task, like that:

I recommend you see the report for any optimisation we do in this article to see how good of each param.

Reasons

There are 2 common reasons of the slow build:

Repositories and dependencies

What does Android Studio do when you click on “Sync Gradle” (if build.gradle file is changed) or build a project? Gradle collect all the dependencies. The good news is Gradle uses cache, a folder to store all dependencies to stop going online. The bad news is if Gradle cannot find any specific dependency, it always goes online to scan the repositories (normally is mavenCenter or jcenter); so it’s really slow if your network isn’t good enough.

There are 2 reasons for Gradle cache cannot be used:

  • Dependency version isn’t fixed.

You could use + signal to let Gradle check for the latest version of a dependency, it always get Gradle online

 

  • Gradle version isn’t fixed.

Each Gradle organises the cache itself, no shared the dependency cache. If your team has some Gradle versions, it takes time to switch and download all the dependencies when you switch Gradle version.

Gradle isn’t optimised

Gradle provides some parameters to allow us optimise but they aren’t normally set in Android Studio.

Gradle is slow itself

Gradle is official used and supported by Android Team but it’s not a fastest build tool.

Solutions

The solutions to solves these issues are:

Setup the fixed Gradle and dependency versions

  • Use same Gradle version as your team settings. The good way is using Gradle wrapper instead of local Gradle by creating the gradlew, checkin the source code repository, go to Preferences -> Build, Execution, Deployment -> Build Tools -> Gradle

  • Specific all the dependency version

Use correct Gradle params

There are some Gradle params you could miss:

  • –offline: Force Gradle using cache
  • –configure-on-demand: Let Gradle only builds the relevant projects instead of all projects
  • –daemon: Let Gradle use in-process build and cut down the initial and warm-up state
  • –parallel: Let Gradle builds your projects in parallel if it’s possible
  • –max-workers: Going with –parallel param to let Gradle know how may threads it could use

So normally command line call could be:

Mapping to Android Studio config, they could be:

Go to Preferences -> Build, Execution, Deployment -> Compiler

Go to Preferences -> Build, Execution, Deployment -> Build Tools -> Gradle

Other settings

Other settings could help is increasing the heap size for

  • JVM

  • multiDex

Use another build tool

OK, it’s time to build your project, open the HTML report file to see how much time you saved.

During the study, I found out that there are some faster build tool than Gradle, especially Buck that is using by Facebook. On my demo, it’s super fast. But of course, it isn’t supported by Android Team and its community is very small. The idea of keeping Gradle and Buck builds in parallel is really nice to get it stable by Gradle but also fast by Buck. I will try to get back to it later.

601 total views, no views today

Ngày thứ 7 vửa rồi (22/8) vô tình được trải nghiệm BPhone, bản limited edition từ một đồng nghiệp, giờ rảnh viết một chút đánh giá qua.

Tổng quan

Về cơ bản thì rất ủng hộ định hướng và cách làm sản phẩm của BPhone: sản phẩm cao cấp, không OEM, nhiều chất xám, có những nét đặc trưng riêng và hệ sinh thái. Chỉ không ủng hộ cách làm truyền thông kiểu “có 5 nói 10” (không phải có 1) mà thôi – nhưng điều này lại không liên quan tới sản phẩm.

Thiết kế

Thiết kế tổng quan phải nói là ổn và ra dáng một sản phẩm cao cấp. Cá nhân thì không thích kiểu dáng cong ở 2 đầu, nếu để thẳng như iPhone 4 thì đẹp hơn. Nhưng đây là style cá nhân, còn về nguyên tắc thiết kế chung thì tốt.

Nhưng tiếc là chất lượng hoàn thiện lại không ổn. Hệ thống loa trong và ngoài cũng như ốc vít không sắc sảo. Mặt kính phía sau khi cầm, gõ có cảm giác giống nhựa và khá mong manh, không được chắc chắn như iPhone 4. Cũng có lẽ vì nhẹ và mong manh nên cảm giác cầm không giống như cầm một sản phẩm cao cấp lắm, hàng mã thì đúng hơn. Sự thực là ngoài Wiko ra thì chưa cầm chiếc điện thoại nào mà thiếu “đầm” tay hay thiếu chắc chắn như vậy.

BOS

Có cải tiến, có điểm nhấn và có mặt tốt hơn Android gốc. Rõ nhất là launcher của Android đã bị bỏ đi, thay vào đó tất cả các app được hiện ra kiểu hơi hướng iOS. Thích nhất là những gesture để close tab, new tab và open link in new tab trong BChrome – thực sự không dễ để nghĩ ra những gesture tiện dụng như vậy.

Nhưng mà nhiều “B”app quá, note hay health app cũng được viết lại nhưng độ hoàn thiện lại không cao. BOS đi một con đường nằm giữa con đường của Samsung, HTC…và Amazon đang đi, kiểu như Xiaomi: mode lại giao diện, launcher, viết app riêng, có thay đổi bản core nhưng chưa đến mức như FireOS. Và đặc biệt là ngôn ngữ thiết kế chưa rõ ràng, đôi chỗ bị phân mảnh. Thế nên gọi là BOS thì cũng đúng nhưng hơi miễn cưỡng.  Hy vọng là trong tương lai sẽ tốt lên.

Giá

Theo quan điểm cá nhân, giá cho bản thấp nhất tương đối hợp lý, nó sẽ hợp lý thực sự nếu chất lượng hoàn thiện tốt hơn cho xứng đáng là sản phẩm cao cấp. Nhưng bản mình đã trải nghiệm, limited edition – mạ vàng, thì thực sự điên rồ. Không ai bỏ $1K cho một sản phẩm như vậy.

Một điều khá khó hiểu là rất nhiều những nhà báo “có kinh nghiệm trong mảng smartphone” lại so sánh phần cứng của BPhone với những điện thoại khác, cỡ $200-300 và cho rằng BPhone cũng chỉ đáng giá như vậy. Không hiểu họ vô tình hay cố ý bỏ qua giá trị chất xám (phải nói là rất nhiều trong BPhone) từ nghiên cứu tới thiết kế cả về phần cứng lẫn phần mềm. Nói thì dễ, nhưng thực sự với gesture ví dụ ở trên, không dễ để “nghĩ” ra được. Giá trị phần cứng của iPhone cũng chỉ cỡ dưới $300 mà thôi.

Một tiêu chí nữa để nói về giá có phù hợp không là độ bền. Không ai mua 1 sản phẩm cao cấp mà không bền cả. Điều này thì chỉ thời gian mới trả lời được.

Những lời quảng cáo

Màn ra mắt kiểu “không thể tin được” khiến BPhone được quan tâm rất nhiều dù khen hay chê. Cá nhân thì không thích kiểu phát ngôn này. Cứ “nói thật, ăn thật” thì BPhone cũng xứng đáng là một sản phẩm cao cấp (không đến mức siêu phẩm hay flagship) nhưng cách quảng cáo “nhất thế giới” vô tình làm người dùng kỳ vọng nhiều hơn, và sẽ thất vọng hơn khi trải nhiệm thực sự.

Thiết kế tốt nhưng hoàn thiện kém.

Camera tốt trong điều kiện ánh sáng tốt. Ánh sáng kém một chút thì hình ảnh chỉ ngang iPhone 5.

Chưa thử tai nghe nhưng loa ngoài không kém nhưng không xuất sắc như One hay iPhone 6.

Màn hình nhìn cũng ổn nhưng cũng chẳng đẹp như iPhone 5S.

BOS có nhiều thứ cũng hay và mang lại trải nghiệm khác Android thật, cũng có cái tốt hơn nhưng không hiểu “tăng 30% độ sướng” là cái gì, cải thiện thao tác khoảng 5-10% thì có nhưng chưa thống nhất về ngôn ngữ thiết kế. Nhưng như vậy cũng rất đáng khen vì lĩnh vực này Việt Nam đi sau khá nhiều.

Chốt

Tóm lại thì BPhone là tổng hợp của những thứ tốt nhưng lại không thứ gì đạt đến độ xuất sắc hay vượt trội, xứng đáng làm sản phẩm cao cấp nhưng nhất định không thể là siêu phẩm. Có chăng TransferJet được coi là ấn tượng nhưng cũng chỉ là một chiêu “cài cắm” một cái gì đó “nhất” để PR mà người dùng chẳng bao giờ động tới.

Cái dở của BPhone chỉ là truyền thông, đẩy nó lên quá cao, thành một siêu phẩm để đến khi nó đến tay người dùng thì lại bị thất vọng dẫn đến phản hồi kém. Nhưng định hướng và cách làm của BKAV về BPhone là rất tốt, rất có tiềm năng. Hy vọng là BPhone không bị chết yểu ở version 1, thì version 2, 3.. sẽ rất đáng coi vì chắc sẽ có phát triển tốt, cũng như lúc đấy người dùng đã biết chắc chắn version trước là gì nên sẽ không bị kỳ vọng cao nữa – luôn trừ đi 50% so với lời quảng cáo 🙂

67 total views, no views today