Tizen Studio on Other Than Ubuntu

It’s pain in the ass. Really. If you can stick to Ubuntu or its derivatives, please do that.

I kinda hate how Tizen Studio is developed to only support Ubuntu out-of-the-box. A software should not dictate what Linux distro it should be installed on. Distro is just like a religion for some people, and some people are like me, who doesn’t like Ubuntu and its bloatware.

Personally I use OpenSUSE on my home workstation, and Fedora on my office workstation. Both distros are RPM based and it is really difficult to install Tizen Studio which is tied to Ubuntu (which relies on Debian Package).

Installing Tizen Studio in Fedora and OpenSUSE is basically similar: it nags every single time. Firstly, Tizen Studio requires Oracle JDK. So for a system with OpenJDK by default installed, you have to install Oracle JDK then change the default Java to Oracle JDK. I am not sure why Tizen Studio forces us to go for Oracle JDK instead of OpenJDK as there might be only subtle differences between those two. Even this Stack Overflow thread said so.

Second, the Tizen Studio’s Package Manager is very smart, it even tries to check if the dependency of to-be-installed package is installed on the system. It is so smart it even uses dpkg to check it. Hardwired inside it. So everytime I tried to install or update a package, it nags that my system hasn’t install its required package, like libxcb. The hell I don’t have that installed in my system!

Therefore, I tried to check what Tizen’s Package Manager do internally (by decompiling it). It is quite easy to navigate the source code and it is just a matter of minutes when I found this line:

String cmd = String.format("dpkg -l %s | grep ^ii", new Object[] { requiredPkg });

So, I have to outsmart the Package Manager in order to bypass this crap. So I created a small C++ program to mimic what Package Manager expect from dpkg. I put this program inside /usr/bin with dpkg as its name:

#include <iostream>

int main(int argc, char* argv[])
{
  if(argc >= 3)
  {
    for(int i = 2; i < argc; i++)
      std::cout << "ii " << argv[i] << '\n';
  }
}

Voila!

But the problem does not ends here. Sometimes several tools still refuse to work. This is usually because of different libraries installed in your platform. Sometimes it is easily to fix by symlink-ing the expected library with the provided library. For instance, edje_cc is not working because it cannot find libudev.so.xxx (xxx is some version number). Locate the installed version of the library, then make symbolic link with the expected library version as the name.

To find out what library is missing is that you have to try to run the specified tools using terminal, so it will display error message correctly. So if your Tizen Studio refuses to do something, i.e. compiling EDC files, running EDC Editor (Enventor), etc, try to do that. Moreover, several libraries are actually stored in lib folders inside Tizen Studio’s installation folders. So try to use LD_LIBRARY_PATH to ensure the executable to locate to those folders. That does not guarantee for it to be working flawlessly, though.

See? That is troublesome.

Leave a Reply

Your email address will not be published. Required fields are marked *