wiki:BB10

Version 26 (modified by Martin Kolman, 11 years ago) (diff)

--

BlackBerry 10

This document describes the porting progress of modRana & related applications (Mieru, RePho, Panora) to the BlackBerry 10 operating system.

The information also of course applies to porting any other Python based application to BB10. :)

This is a work in progress - if you find some errors & or missing information, let me know so I can fix it! :)

Dependencies

What needs to be available for modRana to run.

Python

Python is available on-device in version 3.2.

ModRana has not yet been tested running on Python 3, but any changes that would be needed should be fairly minor.

Qt

Qt is available either on-device or a custom Qt version can be compiled & deployed.

Related links:

Qt@QNX overview (BB10 is based on QNX)
Building Qt4 for BB10

Weather the on-device Qt version can be used, or custom Qt version needs to be used to run modRana still needs to be determined. If using the on-device version is possible, the resulting installation package would be quite a bit smaller as the Qt libraries would not need to be included.

Making sure the right Qt is used

By default (when just running the bbndk environment script before build), Shiboken & PySide pick-up the Qt libraries that are included in the BB10NDK target, completely ignoring your local Qt build.

If you want for both Shiboken & PySide? to use the proper build, you need to modify PATH & LD_LIBRARY_PATH so that it is preferred to the one in the BB10NDK target:

source <BB10NDK PATH>/bbndk-env.sh
export QTDIR=<PATH TO YOUR CUSTOM Qt BUILD>
export LD_LIBRARY_PATH="$QTDIR/lib:$LD_LIBRARY_PATH"
export PATH="$QTDIR/bin:$PATH"

You need to either run this in your shell (or put it in a script source it to your shell) before issuing the configure commands for Shiboken & PySide.

Using on-device Qt

If you decide to use the on-device Qt libs (they are in version 4.8.4 and should theoretically be sufficient) don't use the above mentioned tweak and just source your environment from the bbndk-env.sh script:

source <BB10NDK PATH>/bbndk-env.sh

As a result, Shiboken & PySide? will compile against the Qt in the NDK target and you don't have to include the Qt libraries in your installation package, making it much smaller.

Next modify the os.environe statements in blackberry-py/bbpy/init.py like this:

os.environ['LD_LIBRARY_PATH'] = '/usr/lib/qt4/lib:%s' % os.path.join(BBPYPATH, 'lib')
os.environ['QT_PLUGIN_PATH'] = '/usr/lib/qt4/plugins'
os.environ['QML_IMPORT_PATH'] = '/usr/lib/qt4/imports'

This tells bbpy too look for the Qt libraries on device.

Then remove all 'libQt*.so' files from the blackberry-py/lib folder for you package as they are no longer needed. This should make your package much smaller. Unfortunately it still results in the same segfault as when bundling the libraries inside the package.

PySide

building PySide

precompiled PySide binaries

the few changes to the guide that are needed for the whole thing to compile, are described below.

Building Shiboken

comment out tests in these files on around these line numbers:

/usr/share/cmake-2.8/Modules/CMakeTestCXXCompiler.cmake :45
/usr/share/cmake-2.8/Modules/CMakeTestCCompiler.cmake :52

Yeah, really - this means modifying you system installation of CMAKE - make sure to have a backup ! :)

Creating a package If you are getting icon related errors during package installation, ad these argument to the packager:

-e icon.png icon.png

Qt Components

While the modRana QML GUI is largely independent on Qt Components, working set of Qt Components would simplify porting quite a lot. Also other applications, such as Mieru, currently depend on functioning Qt Components.

Symbian Qt Components

https://qt.gitorious.org/~conny/qt-components/connys-qt-components/commits/bb10

Should compile using these parameters:

./configure -symbian -no-mobility -nomake tests -nomake demos -nomake example

MeeGo/Harmattan Qt Components

Looks like MeeGo/Harmattan Qt Components should also work with some tweaks & would be the preferred choice, considering that is what modRana & co are currently using.

Links:

http://zwong.de/2012/06/using-meego-qt-components-on-blackberry-10-and-playbook/

http://supportforums.blackberry.com/t5/Native-Development/qt-components-for-BB10/td-p/1798349

http://supportforums.blackberry.com/t5/Native-Development/QML-symbian-qt-components-for-PlayBook/td-p/1574275i

Packaging

Getting the debug token

To install correctly to the BB10 device, the package needs to be signed with a valid debug token.

  1. source the bbndk-env.sh script to your shell, so that you have the various BlackBerry? utilities in your $PATH
    source bbndk-env.sh
    
  1. fill in the online form for signing keys

Note the PIN you've entered somewhere.

  1. generate a keypair

NOTE: This step is very important, as it is completely omitted in the official BB10 documentation and without it the debug token generation will fail with a author.p12 file missing error

NOTE2: use only lowercase letters and numbers in the store password as reportedly uppercase letters cause problems.

blackberry-keytool -genkeypair -storepass <new keystore password>3 -author <some string without spaces>
  1. register the signing keys
    blackberry-debugtokenrequest -register -csjpin <the pin you entered to the online form> -cskpass <probably also the pin you entered to the online form> client-RDK-*.csj
    

The following is probably only needed for the Playbook ?

blackberry-debugtokenrequest -register -csjpin <the pin you entered to the online form> -cskpass <probably also the pin you entered to the online form> client-PBDT-*.csj
  1. find you device PIN

Should be visible on-device in settings->About->Harware

  1. generate the debug token
    blackberry-debugtokenrequest -storepass <the keystore password you've entered in step 3> -devicepin <device PIN> debug_token.bar
    

The debug_token.bar file now contains the debug token you can use to build packages (just for) your BB10 device. Plain and easy, not needlessly convoluted at all. :)

Package contents

The package needs to contain the application and any other libraries modRana needs to run. The libraries are stored in the folder the application gets installed into and are loaded by manipulating the PATH and LD_LIBRARY_PATH variables.

For modRana the package would contain the modRana application files, the PySide Qt bindings and Qt (if the built-in Qt install can't be used).

Mieru will probably need a BB10 compiled unrar binary to correctly open RAR compressed manga/comic book files.

BB-Py packaging tutorial:

http://hg.microcode.ca/blackberry-py/wiki/Building%20HelloWorld

Application not starting

The application is not starting at the moment. After clicking on the icon a black window briefly shows up and then closes at once.

This is the content of the log that resides in the /accounts/1000/appdata/<appname>/logs/log file:

Process 30396593 (python3.2) terminated SIGSEGV code=1 fltno=11 ip=783abf7c(/base/lib/libcpp.so.4@_ZNKSt6locale9_GetfacetEj+0x27) mapaddr=0002bf7c. ref=00000010

Notes

Where are applications installed ?

Applications are installed - in paths like this:

/accounts/1000/appdata/ca.microcode.bbpy.HelloWorld.testDev__HelloWorld7b0107f8/app/python/blackberry-py/

Filesystem access

Each application is basically running in some sort of sandbox. There are various folders that that can be used for various purposes by the application. Some of them are only visible by the application and others are shared between applications and can be used to exchange data.

For more information see the BB10 filesystem access article.

Running applications from the command line

It looks like it is not possible to run applications directly from the command line. But it is possible to run an application right after its package is installed through the command-line installation tool.

Debugging

Applications are started in a sandbox with some preade folder structure. The folder called log in the sandbox contains stdout for the program.

Checking out the log

(The path seems to partially random-generated, so don't forget to change it to the path corresponding to you application).

cd /accounts/1000/appdata/ca.microcode.bbpy.HelloWorld.testDev__HelloWorld7b0107f8/
$ ls
app       data      db        logs      pps       shared    tmp

The logs folder contains the logs.

Shared log folder If you don't want to fish for the log folder, you con redirect stdout to a log file in the data/Downloads folder, which should be accessible for all applications.

Helpful commands

Pack, install and run:

blackberry-pythonpackager -package HelloWorld.bar     -devMode    -env PYTHONPATH=app/python/blackberry-py    bar-descriptor.xml    main.py main.qml     -e ../icon.png icon.png     -e ../blackberry-py/ blackberry-py/   -debugToken ~/token.bar -device 192.168.1.8 -password super_secret_password -launchApp -list -installApp

Deploy package:

blackberry-deploy -installApp 192.168.1.8 -password super_secret_password -package HelloWorld.bar