title: Android JNI bridge Toast C++ not working - How to fix it?
body: <p>I'm trying to solve a little problem with my hpp unit.
  I found some examples on the internet showing how to Toast an information on screen with an Android JNI bridge, but it was just in pascal (delphi), so I decided to use the same pas file but with it an hpp file for conversion.
  Till now I got it:</p>
  
  <pre><code>#ifndef Android_Jni_ToastHPP
  #define Android_Jni_ToastHPP
  
  #pragma delphiheader begin
  #pragma option push
  #pragma option -w-                                        // All warnings off
  #pragma option -Vx                                        // Zero-length empty class member 
  #pragma pack(push,8)
  #include &lt;FMX.Helpers.Android.hpp&gt;                        // Pascal unit
  #include &lt;Androidapi.JNIBridge.hpp&gt;                       // Pascal unit
  #include &lt;Androidapi.JNI.JavaTypes.hpp&gt;                   // Pascal unit
  #include &lt;Androidapi.JNI.GraphicsContentViewText.hpp&gt;     // Pascal unit
  #include &lt;Androidapi.JNI.Util.hpp&gt;                        // Pascal unit
  #include &lt;Androidapi.JNI.App.hpp&gt;                         // Pascal unit
  #include &lt;FMX.Surfaces.hpp&gt;                               // Pascal unit
  
  //-- user supplied -----------------------------------------------------------
  
  namespace Android
  {
  namespace Jni
  {
  namespace Toast
  {
  //-- type declarations -------------------------------------------------------
  
  extern DELPHI_PACKAGE Androidapi::Jni::Toast __fastcall Toast(const System::UnicodeString Msg, TToastLength duration);
  
  #pragma pack(pop)
  
  //-- type declarations -------------------------------------------------------
  //-- var, const, procedure ---------------------------------------------------
  
  }   /* namespace Android */
  }   /* namespace JNI     */
  }   /* namespace Toast   */
  #if !defined(DELPHIHEADER_NO_IMPLICIT_NAMESPACE_USE) &amp;&amp; !defined(NO_USING_NAMESPACE_ANDROID_JNI_TOAST)
  using namespace Android::Jni::Toast;
  #endif
  #if !defined(DELPHIHEADER_NO_IMPLICIT_NAMESPACE_USE) &amp;&amp; !defined(NO_USING_NAMESPACE_ANDROID_JNI)
  using namespace Android::Jni;
  #endif
  #if !defined(DELPHIHEADER_NO_IMPLICIT_NAMESPACE_USE) &amp;&amp; !defined(NO_USING_NAMESPACE_ANDROID)
  using namespace Android;
  #endif
  #pragma pack(pop)
  #pragma option pop
  
  #pragma delphiheader end.
  //-- end unit ----------------------------------------------------------------
  #endif  // Androidapi_Jni_ToastHPP
  </code></pre>
  
  <p>If you would like to have the pascal unit, here is it:</p>
  
  <pre><code>unit Android.JNI.Toast;
  
  interface
  
  {$IFDEF ANDROID}
  
  uses
    Androidapi.JNIBridge,
    Androidapi.JNI.JavaTypes,
    Androidapi.JNI.GraphicsContentViewText;
  {$ENDIF}
  {$IFDEF ANDROID}
  
  type
    TToastLength = (LongToast, ShortToast);
  
    JToast = interface;
  
    JToastClass = interface(JObjectClass)
      ['{69E2D233-B9D3-4F3E-B882-474C8E1D50E9}']
      { Property methods }
      function _GetLENGTH_LONG: Integer; cdecl;
      function _GetLENGTH_SHORT: Integer; cdecl;
      { Methods }
      function init(context: JContext): JToast; cdecl; overload;
      function makeText(context: JContext; text: JCharSequence; duration: Integer)
        : JToast; cdecl;
      { Properties }
      property LENGTH_LONG: Integer read _GetLENGTH_LONG;
      property LENGTH_SHORT: Integer read _GetLENGTH_SHORT;
    end;
  
    [JavaSignature('android/widget/Toast')]
    JToast = interface(JObject)
      ['{FD81CC32-BFBC-4838-8893-9DD01DE47B00}']
      { Methods }
      procedure cancel; cdecl;
      function getDuration: Integer; cdecl;
      function getGravity: Integer; cdecl;
      function getHorizontalMargin: Single; cdecl;
      function getVerticalMargin: Single; cdecl;
      function getView: JView; cdecl;
      function getXOffset: Integer; cdecl;
      function getYOffset: Integer; cdecl;
      procedure setDuration(value: Integer); cdecl;
      procedure setGravity(gravity, xOffset, yOffset: Integer); cdecl;
      procedure setMargin(horizontalMargin, verticalMargin: Single); cdecl;
      procedure setText(s: JCharSequence); cdecl;
      procedure setView(view: JView); cdecl;
      procedure show; cdecl;
    end;
  
    TJToast = class(TJavaGenericImport&lt;JToastClass, JToast&gt;)
    end;
  
  procedure Toast(const Msg: string; duration: TToastLength = ShortToast);
  
  {$ENDIF}
  
  implementation
  
  {$IFDEF ANDROID}
  
  uses
    FMX.Helpers.Android, Androidapi.Helpers;
  
  procedure Toast(const Msg: string; duration: TToastLength);
  var
    ToastLength: Integer;
  begin
    if duration = ShortToast then
      ToastLength := TJToast.JavaClass.LENGTH_SHORT
    else
      ToastLength := TJToast.JavaClass.LENGTH_LONG;
    CallInUiThread(
      procedure
      begin
        TJToast.JavaClass.makeText(SharedActivityContext, StrToJCharSequence(Msg),
          ToastLength).show
      end);
  end;
  {$ENDIF}
  
  end.
  </code></pre>
  
  <p>However I get error when compilling using this source...
  What con I do?</p>
  
  <p>PS.: I arrived on that state just comparing AppMetthod sources with what I was making...</p>
  
  <p>Log:</p>
  
  <pre><code>Checking project dependencies...
  Compiling WebBrowser.cbproj (Debug, Android)
  bccaarm command line for "uMain.cpp"
    c:\program files (x86)\embarcadero\studio\15.0\bin\bccaarm.exe -cc1 -D _DEBUG -isysroot 
    C:\Users\Public\Documents\Embarcadero\Studio\15.0\PlatformSDKs\android-ndk-r9c\platforms\android-14\arch-arm -idirafter =\usr\include -idirafter 
    C:\Users\Public\Documents\Embarcadero\Studio\15.0\PlatformSDKs\android-ndk-r9c\sources\cxx-stl\gnu-libstdc++\4.8\include -idirafter 
    C:\Users\Public\Documents\Embarcadero\Studio\15.0\PlatformSDKs\android-ndk-r9c\sources\cxx-stl\gnu-libstdc++\4.8\libs\armeabi-v7a\include -idirafter 
    C:\Users\Public\Documents\Embarcadero\Studio\15.0\PlatformSDKs\android-ndk-r9c\sources\android\native_app_glue -I 
    "C:\Users\Public\Documents\Embarcadero\Studio\15.0\Samples\CPP\Mobile Snippets\WebBrowser" -isystem "c:\program files 
    (x86)\embarcadero\studio\15.0\include" -isystem "c:\program files (x86)\embarcadero\studio\15.0\include\android\rtl" -isystem "c:\program files 
    (x86)\embarcadero\studio\15.0\include\android\fmx" -isystem "c:\program files (x86)\embarcadero\studio\15.0\include\android\crtl" -g 
    -fno-limit-debug-info -fborland-extensions -fborland-auto-refcount -nobuiltininc -nostdsysteminc -triple thumbv7-none-linux-androideabi -emit-obj 
    -mconstructor-aliases -pic-level 2 -target-abi aapcs-linux  -nostdinc++ -fdeprecated-macro -fexceptions -fcxx-exceptions -munwind-tables 
    -mstackrealign -fno-spell-checking -fno-use-cxa-atexit -main-file-name uMain.cpp -x c++ -std=c++11 -O0 -tU -o .\Android\Debug\uMain.o 
    -dependency-file .\Android\Debug\uMain.d -MT .\Android\Debug\uMain.o uMain.cpp 
  [bccaarm Error] Android.JNI.Toast.hpp(36): expected a class or namespace
  [bccaarm Error] Android.JNI.Toast.hpp(36): reference to 'Android' is ambiguous
    Android.JNI.Toast.hpp(28): candidate found by name lookup is 'Android'
    FMX.Helpers.Android.hpp(28): candidate found by name lookup is 'Fmx::Helpers::Android'
  [bccaarm Error] Android.JNI.Toast.hpp(36): expected unqualified-id
  [bccaarm Error] Android.JNI.Toast.hpp(47): expected a class or namespace
  [bccaarm Error] Android.JNI.Toast.hpp(47): reference to 'Android' is ambiguous
    Android.JNI.Toast.hpp(28): candidate found by name lookup is 'Android'
    FMX.Helpers.Android.hpp(28): candidate found by name lookup is 'Fmx::Helpers::Android'
  [bccaarm Error] Android.JNI.Toast.hpp(47): expected namespace name
  [bccaarm Error] Android.JNI.Toast.hpp(50): expected a class or namespace
  [bccaarm Error] Android.JNI.Toast.hpp(50): reference to 'Android' is ambiguous
    Android.JNI.Toast.hpp(28): candidate found by name lookup is 'Android'
    FMX.Helpers.Android.hpp(28): candidate found by name lookup is 'Fmx::Helpers::Android'
  [bccaarm Error] Android.JNI.Toast.hpp(50): expected namespace name
  [bccaarm Error] Android.JNI.Toast.hpp(53): reference to 'Android' is ambiguous
    Android.JNI.Toast.hpp(28): candidate found by name lookup is 'Android'
    FMX.Helpers.Android.hpp(28): candidate found by name lookup is 'Fmx::Helpers::Android'
  [bccaarm Error] uMain.cpp(32): use of undeclared identifier 'Toast'
  Failed
  Elapsed time: 00:00:05.8
  </code></pre>
  
  <p>EDIT:</p>
  
  <p>New log file:</p>
  
  <pre><code>[bccaarm Error] Androidapi.JNI.Toast.hpp(36): no type named 'Toast' in namespace 'Androidapi::Jni'
  [bccaarm Error] Androidapi.JNI.Toast.hpp(36): expected unqualified-id
  [bccaarm Error] uMain.cpp(32): unexpected namespace name 'Toast': expected expression
  Failed
  </code></pre>
  
  <p>Since now, thanks a lot.</p>