FireBreath find system path - npapi

I'm new to firebreath and I am developing an NPAPI plugin to be packaged to a Google Chrome Extension. I am having troubles with creating a method that retrieves where the DLL is currently in. Any ideas?

It's pretty easy; you can find instructions on the Tips and Tricks page of the FireBreath website:
// From inside your Plugin class (that extends PluginCore)
std::string MyPlugin::getFilesystemPath()
{
return m_filesystemPath;
}

Related

MissingManifestResourceException on Windows Phone 8.1 with .resx resources

I'm developing a Windows Phone 8.1 app that also targets Android(Xamarin)
As ever I added my string resources(.resx) on a PCL and referenced them on my launcher project to use it on my views, this all works fine on WP 8.1 silverlight but on the WinRt when I configure the project to release and run it on a device, for some reason I always get a MissingManifestResourceException. I've tried every solution for this problem out there without any success.
Note that on the emulator everything works fine, when the solution configurator is set to Debug it also works on both device and emulator. The only combination here is device and Release.
The app source code is on Github.
I was able to create a simple project to replicate this issue, basically it is a WP 8.1 app and a PCL project with the embedded resources, Download Link
Anyone has any ideas?
EDIT: After making some more testing I tried running an old Windows 8.1 app that I've done with the same localisation model and the same issue appeared so it seams to be a tool issue and not a configuration issue, since the Windows 8.1 app is on the market and everything went fine back there.
Our team ran into a similar issue which was tracked down to the runtime and not the PCL, WinRT component, or application package. That is, the resources exist within the PCL assembly, within the application package resources.pri file, but just cannot be found at runtime.
There is an active Microsoft Connect report here:
https://connect.microsoft.com/VisualStudio/feedback/details/991028/issue-using-resx-files-on-winrt-apps-windows-phone-and-windows
Our workaround was for the WinRT component to inject into each generated Resources class of each referenced PCL our own derived ResourceManager which redirected the call to the WinRT ResourceLoader instead. I've written a blog post that describes that workaround:
http://blogs.msdn.com/b/philliphoff/archive/2014/11/19/missingmanifestresourceexception-when-using-portable-class-libraries-in-winrt.aspx
I got to the bottom of this today. While bundling the app package, resources in dependencies that are not for a language being used by the app are stripped out. To prevent this from happening, add the following assembly-level attribute to your application.
using System.Resources;
[assembly: NeutralResourcesLanguage("en")]
I had the same behaviour. Today I created a new PCL Library (with another name) and copied the resx file to this project. I modified all references and everything just works fine in my WinRt (Windows Store) App now!
There was the string 'resources' in the portable class library name. Perhaps this was the problem!
I am able to reproduce this issue launching DVD sample and unfortunately in my project. I have an WP Silverlight 8.1 project registering a Windows Runtime Component Background Task and both of them using a Portable Class Library sharing some common localized strings as resources (.resx), among other things. The exception is thrown from Background Task when calling any property to get strings on generated .Design.cs class (only Release + Device).
In order to fix this I tried, without success, to use directly ResourceManager and/or to add .resx files directly into the Background Task.
I ended-up porting needed strings to .resw files and use the new "WinRT preferred" way via Windows.ApplicationModel.Resources.ResourceLoader in the Background Task project.
Seems to me that ResourceManager is not compatible with Windows Runtime anymore in release.
This is not necessary an answer, but is better than nothing since I do not have 50 reputation points for a comment.

Launch LibGDX project with Android Studio

I've used "setup UI" to generate my LibGDX game projects.
Then I've imported them into Android Studio . It didn't show any errors at first , but when I've tried to run the android project , it gave me strange errors like :
java: cannot find symbol
symbol: variable super
location: class com.yan.waterworld.MainActivity
Here is an image :
How can it be solved (or worked around) ?
Update:
Since Android Studio 0.8.0 it is now possible to run Java and Android modules. This will not work by following these instructions (Android studio is based on Intellij).
Gradle Configuration
Old:
They have forums and notice here: https://code.google.com/p/libgdx/wiki/AndroidStudio
Using libgdx with Android Studio
At Google I/O 2013, the Android tools
team released Android Studio, and IDE based on IntelliJ IDEA, focusing
on pure Android development.
Android Studio is sadly unfit for libgdx projects at this time, as it
only allows the creation of Android projects. Standard Java projects
are not supported, and it is unclear if this will ever become
available.
Libgdx's cross-platform nature does not lend itself well to
development with Android Studio. This should not be a big hindrance,
as libgdx projects don't benefit much from Android Studios
capabilities. E.g. the layout preview is irrelevant for libgdx
applications, as they don't use native Android UI widgets. The inline
documentation support for Android APIs is also not needed for libgdx
applications.
However, we'll try to make developing libgdx applications with the new
Android Gradle build system possible in the near future.
If you must use Android Studio, check out this thread on the forums.
Alternatively you can use Intellij IDEA with libgdx, potentially with
Maven.
Creating games in gdx works perfectly fine in Android Studio. The best way to create a project for Android Studio is through gdx-setup. Please go to the following article
http://www.todroid.com/android-gdx-game-creation-part-i-setting-up-up-android-studio-for-creating-games/
It explains my experience in using the gdx-setup application, how to run it on the PC platform and steps for importing the gradle project and building a project in gradle.
When you have finished the article, hopefully you will have a fully working sample game template in which you can start building your game.
I tried to use a similiar method used for native libraries for now.
Last night, I was able to run examples; as a scratch project in Android Studio and wrote a quick guideline
Hope it helps you as well, but I am still learning so sorry in advance for any missing info or mistakes ;)
Here's the link.. http://bgnstudio.wordpress.com
I tried to use this way in detail:
create a new project in Android Studio.
From the libgdx nightly build, get;
Libgdx.so files within the armeabi/armeabi-v7a folders as needed.
Gdx.jar and gdx-source.jar
Gdx-backend-android.jar
Create lib and libs directories under project folder .
Copy armeabi* folders , gdx.jar and gdx-source.jar files under the “lib” directory.
Also copy the gdx-backend-android.jar into the “libs” directory.
*
In project tree; add gdx.jar and gdx-backend-android.jar as library.
In library settings, add gdx-source.jar under gdx.jar; Then open
module settings and add these libraries as dependencies. And check
them for compile.
Archive the armeabi folders together with parent directory to zip files and rename extension from zip to jar.
armeabi.jar : “/lib/armeabi/libgdx.so”
armeabi-v7a.jar :“/lib/armeabi-v7a/libgdx.so”
And move these jar files under “libs” directory.
Final apperance of the folders will be like this:
|-lib
|---gdx.jar
|---gdx-sorces.jar (added as source library of gdx.jar in library settings)
|-libs
|--- armeabi.jar
|--- armeabi-v7a.jar
|--- gdx-backend-android.jar
Now modify build.gradle file as well:
dependencies {
compile 'com.android.support:appcompat-v7:+'
compile files('lib/gdx.jar')
compile files('libs/gdx-backend-android.jar')
compile fileTree(dir: 'libs' , include:'*.jar')
}
Have you tried IntelliJ 13? Download it here . This new version covers most of the function of Android Studio, but still it can make Java Project. Take a look at this article
This EAP build includes all of the new features of Android Studio except for the new project wizard and the AppEngine cloud endpoints integration. These latter features will also appear in our EAP builds in the coming weeks.
take a look at libdgx documentation:
https://code.google.com/p/libgdx/wiki/IntelliJIDEALibgdx
mark the Advanced->IDEA checkbox at libgdx project setup tool, create the project and import it from android studio(you will need add the assets folder to desktop launcher or maybe somethings like this), it works for me.

mobile html5 launch phone's native navigation app

I'm developing a phonegap/cordova app. Is there a way to open a phone's native navigation app within the browser view? Or is there a best practice on opening native map applications from html5 apps? Or are they all platform specific?
I've read some places that the following works for certain versions of Android
<a href="geo:some address here" />Navigate to here</a>
and that this works for iOS
Directions
I'm amazed that Phonegap hasn't implemented something like this.
You can open the native navigation app on iOS 5 (Google Maps) and iOS 6 (Apple Maps) by using the magic "maps:" protocol, e.g. window.location = "maps:daddr=50.4,-4.5"
But to launch the native Google Navigator app on Android you need to use a phonegap plugin. I wrote this one for my own purposes.
Update
The plugin has now been updated for Phonegap 3.x and supports Android, iOS and Windows Phone, including an option to prefer Google Maps on iOS.
The plugin is here: https://github.com/dpa99c/phonegap-launch-navigator
The plugin is great! Thanks for sharing!
I tried it in my app but unfortunately I have Phonegap version 3.x and your plugin is only working for Phonegap 2.x :(
So in order to get it working on Phonegap 3.x I got the plugin from your github repo and made some changes so that it works for 3.x
The modified PhoneNavigator Plugin for Phonegap 3.x can be downloaded from my github repo:
https://github.com/viktor0710/PhoneNavigator-Phonegap-3.x.git
How to integrate it in your Phonegap 3.x project:
Open a console window
Go to your Phonegap app root
Then execute: phonegap local plugin add https://github.com/viktor0710/PhoneNavigator-Phonegap-3.x.git
Copy "phonenavigator.js" from the repo (www/phonenavigator.js) in your app (ex: yourapp/www)
include "phonenavigator.js" in you app:
Copy "cordova.js" from the repo (www/cordova.js) in your app (ex: yourapp/www)
include "cordova.js" in you app:
How to use it:
//function declaration
function navigateTo (lat, lon, successFn, errorFn) {
cordova.require('cordova/plugin/phonenavigator').doNavigate(lat, lon, successFn, errorFn);
}
//set lat and lon variables. Most probably read them from the UI
var latitude = 48.137607;
var longitude = 11.568569;
//call function
navigateTo(
latitude,
longitude,
function(){
console.log("Successfully opened navigator");
},
function(){
console.log("Error opening navigator");
}
);
As mentioned above, the following works on Galaxy S4 Android (just tested it), to bring up the Google Maps/Navigation app and waze:
Wikimedia Headquarters
Credit: http://en.wikipedia.org/wiki/Geo_URI#Example
Please also see the answer here: https://stackoverflow.com/a/19765368/2728686
For the record, if someone find this thread by looking on Google like I did, it worked for me directly, working with Ionic framework, by doing two things :
In the myapp.config(...) of your app add
$compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|geo):/);
(dont forget to add $compileProvider as a dependency)
In the config.xml, add the line
<access origin="geo:*" launch-external="yes"/>
That's all.
Cordova 3.6.0 introduces a second whitelist, for restricting which URLs are allowed to launch external applications. In previous versions of Cordova, all non-http URLs, such as mailto:, geo:, sms: and intent, were implicitly allowed to be the target of an a tag. Because of the potential for an application to leak information, if an XSS vulnerability allows an attacker to construct arbitrary links, these URLs must be whitelisted as well, starting in Cordova 3.6.0.
Cordova 3.6.0 Whitelist Guide
So you need to add explicitly in the config.xml:
<access origin="tel:*" launch-external="yes" />
<access origin="mailto:*" launch-external="yes" />

NPAPI load third-party DLL

I am developing an NPAPI Firefox plugin and I have a question.
I need to load a third-party DLL (such as D:\mydll.dll), but on some computers mydll.dll is not in the system path or in c:\windows\system32 and I get loading errors.
Here is the code:
SetCurrentDirectory ("d:\");
m_hModule = LoadLibrary ("mydll.dll");
LoadLibrary returns 126. I checked with DEPENDS.EXE to view the dependent modules and everything looks fine. I do not know what the problem is.
Another problem is that I want the plug-in to work in Safari (my safari is version 5.17). I copy it into Safari's Plugins directory and it tells me it cannot find the plug-in. I want to know how to solve this.
Thank you, and please excuse my poor English.
Setting the current directory will not always work when in a plugin because you don't own the process. The command that you want is SetDllDirectory.
SetDllDirectory("D:\");
m_hModule = LoadLibrary("mydll.dll");
Of course, I don't recommend that you ever assume a DLL is in the root of the drive =] What I would do is put the DLL you need in the same directory as the plugin DLL and then you can get the path of the DLL using GetModuleFilename.
For installing, rather than putting the plugin in the plugins/ directory in the firefox (or safari) directory you should install it through the windows registry. This will make it visible for firefox, chrome, and safari.
You may want to consider using FireBreath instead of implementing the NPAPI interfaces yourself; it takes care of most of the tricky parts and leaves you free to focus on the important parts of your plugin.

Loading NPAPI plugin in Chrome

I have a NPAPI API based (scriptable) plugin developed using Gecko SDK 1.9.2. This plugin works fine on FF3.6 & FF4 beta, but it fails to get detected on chrome.
Also I cannot see the plugin listed - when I do a "about:Plugins" in chrome.
I've registered the plugin as described in the "Windows Installation Using the Registry".
When monitored the chrome startup using Sysinternals tool Procmon.exe, I could find that the chrome tries to do a LoadImage on my Plugin dll, whoever it quickly unloads it.
Any ideas why this plugin is not detected by chrome will help.
It would be helpful to have an example of exactly what keys you used and where you put them; FireBreath plugins (works on all npapi and activex browsers) register themselves in the registry using that method and they work fine on chrome.
Depending on your needs, might even be worth looking into building your plugin in FireBreath instead of using npapi directly -- it's a lot less work and workarounds for various browsers have already been done.
One thing to try is to make sure you have the file name correct in the registry; Many versions of firefox just use the directory specified in the registry and search for any plugin files (this isn't documented, AFAIK, it's just my observations), whereas Chrome actually uses the path and file. It's also possible you could have a permissions issue.
The issue was that the plugin dll didn't have the resource like file description, MIME type and language set. Adding the proper resource strings fixed the issue.