To access the data packed inside the .apk
package on Android in your C++ code, we need to get the path to .apk
by using Java code and passing the result into our C++ code using JNI.
In the onCreate()
method, pass the value obtained from getApplication().getApplicationInfo().sourceDir
into our native code:
@Override protected void onCreate( Bundle icicle ) { onCreateNative( getApplication().getApplicationInfo().sourceDir ); } public static native void onCreateNative( String APKName );
The implementation of onCreateNative()
can be found in 1_ArchiveFileAccess\jni\Wrappers.cpp
and looks as follows:
extern "C" { JNIEXPORT void JNICALL Java_com_packtpub_ndkmastering_AppActivity_onCreateNative( JNIEnv* env, jobject obj, jstring APKName ) { g_APKName = ConvertJString( env, APKName ); LOGI( "APKName = %s", g_APKName.c_str() ); OnStart( g_APKName ); } }
We use the ConvertJString()
function to convert jstring
into std::string...