As written in the Vuforia SDK forum by the admin:

Dividing your project between Java and native code:
Using the sample projects (especially ImageTargets) as a starting point, you can write most of your application-specific code at the native level. This especially includes any OpenGL rendering. Sometimes, however, it is useful to leverage the Android SDK for features such as UI controls, video playback, networking, etc. Also, if your application includes sound it is necessary to implement this in Java, as the NDK does not currently have access to device audio playback.

Positioning your virtual objects on top of the trackable:
There are two matrices you need to position your OpenGL objects on top of (or in relation to) the target. First, you’ll need the projection matrix from the tracker, which can be constructed using the Tool::getProjectionGL method (see ImageTargets.cpp for usage). Second, you’ll need the pose matrix from a visible trackable, which is calculated each camera frame and retrieved with the trackable.getPose() method. See What is a pose? in the thread QCAR SDK Basics for more information on using this matrix.

Scaling your trackable in OpenGL space:
At some point you may want to size your 3D objects to fit the trackable, translate objects within the bounds of the trackable, etc. Here it’s useful to know the size of the trackbale in OpenGL space. The ImageTarget and Marker classes have a size() function that returns the width and height of the trackable for this purpose.

Rendering 3D content in various formats (obj, collada, etc.):
The QCAR SDK does not provide a loader or renderer for 3D formats. The samples, however, do show how to load and render a static model from a header file. You are free to use loaders/renderers from outside sources, but this forum does not provide support for any particular renderer.

To get more detail: -> Vuforia Architecture