Edit - I know there are similar questions to this on SO, but I feel my specific questions are not duplicates at all. If you disagree with me please bring them to my attention before downnvoting or closevoting! If you can prove to me that my question is a true duplicate I will delete this question myself!
My understanding of the GWT is that it provides an SDK and API that allows you to code in Java, and it generates all the client-side HTML, CSS and JavaScript required to run a full-fledged web (or mobile web) app.
My understanding of PhoneGap is that it allows you to code against its JavaScript API and, through configuration, allows you to tell it which native mobile platforms (Android, iOS, Windows Phone, etc.) it should create nativee wrappers for. Hence you "write once, run many" with it, turning your JavaScript code into a native Android app, native iOS app, etc.
If these two assumption are incorrect, please begin by correcting me! And, if there are any caveats to these assumptions, please let me know!
Assuming my understanding on GWT and PhoneGap are more or less correct, I want to try and use them together for an app that would be available as (1) a web app, (2) a mobile web app, (3) an Android app and (4) as an iOS app.
I want to "daisy-chain" these two in my Ant build, whereby my pure Java code is converted (via GWT) into JavaScript (that complies to the PhoneGap API), and then a second build process uses PhoneGap to create and deploy:
A Java WAR (web and mobile web app)
An Android APK
An iOS binary (I believe this is an IPA file, but I may be wrong)
So with those as the "givens", here are my questions:
Is this possible? If not, why? Any way to hack- or juryrig-together a solution that forces this to work?
I've noticed something called gwt-phonegap - will I need this in order for my proposed solution to work, or would this library just be a "nice to have"? Why or why not?
Any other considerations I am not thinking of here? Other libraries or tools that would behoove me?
Note: I have heard (but am not asserting!) that Titanium is superior to PhoneGap. Titanium, however, is not free. And I am quite broke. Thanks in advance for any help here!
There is an open source project out there combining GWT & Phonegap to build mobile apps:
mgwt - http://www.m-gwt.com
There are many people out there using it to build mobile apps and there is quite a lot on documentation including videos there, especially this one:
http://www.youtube.com/watch?v=0V0CdhMFiao&feature=plcp
Related
I have a development environment where web apps can be hosted. We generally use angular for our web apps so ionic should already be a pretty close match.
What I'm looking for is a way to be able to take a web application in angular and basically "generate" the ionic app out of it. We can assume that the app has been "modified" to correctly import the ionic module(s) and the necessary code.
Other than that, the site must remain functional on a desktop client (but I assume this is not an issue) and we want to "generate" the apk (or whatever target environment is required) based on the original web app.
Ideally the generation should be triggered by basically right clicking in a menu and selecting "Generate APK". This means I'm looking for programmatic access to whatever API cordova/ionic has.
My google-fu is letting me down though because all I can find though is command line references, I would prefer to stay away from commandline-level integration unless absolutely required. Other than that any search for API just brings up the javascript API they expose, not any API they might expose to programmatically generate artifacts like an APK.
UPDATE: I don't mind a downvote (the question is rather hard to phrase correctly) but at least state why so I can improve upon it.
Building a native APK in command line should be possible using the Android Gradle toolchain. You can go thru the process in the IDE and then just replace the files for your created app with the newly generated files and invoke gradle. For other OS's this becomes harder e.g. for iOS using xcodebuild is pretty hairy and if you add into it complexities like hosting Macs in the cloud (required for xcode) and the changes Apple makes all the time...
We implemented pretty much that (and a lot more) for Java at Codename One, we also support including Cordova plugins which might work for you. We also provide white label services for 3rd parties.
I'm currently working on an Android application built with Adobe Air sdk, in AS3. I was wondering if it's possible to compile a kind of UI library that I can import in a Android native application (Java). Basically, I would like to build my UI with Adobe Air, but the main part of my application with Java, the native way.
What I have in mind is to convert the adobe air-generated APK into a Jar file I would import in the native application project, and call some functions that display something on the Screen.
Is it possible? I think it may be possible, because when I don't import Adobe Air SDK in the application, I must install Adobe Air application with the Play Store to make my application working. I don't find lot of things on Google about that :s.
Thank you for your help.
Yes it can be done (in theory), but hold on to your hat, it's a bumpy ride!
I see it is a very old question, with a new bounty (the questioner has not logged on for 3 years!), but here we go...
This method goes to the heart of how android java apps are constructed and run (i.e. DEX, so it will work with adobe-air or ANYTHING, it is fundamental [general method]). (by the way you use the word native in a confusing way, native is commonly understood to mean the JNI (c++) library element of an app).
You say:
"What I have in mind is to convert the adobe air-generated APK into a
Jar file I would import in the native application project, and call
some functions that display something on the Screen."
Android programs are compiled into .dex (Dalvik Executable)[now called ART but binary compatible] files,
which are in turn zipped into a single .apk file on the device (with other things like the manifest and resources). (unzip a .apk and look inside).
A .jar file contains DEX files (zipped). (unzip a compiled .jar and look inside).
I have done some work like this before, here's a link to a tutorial and coding examples [tested by me] (in android studio + gradle) [custom build elements are usually needed (I also give an ant example)].
See my stack-overflow answer Dynamic loading of DEX files
This in theory answers your question, but it's fundamental stuff, complex and has limitations that make it hard to code and maintain (resources are a real pain in the a**e).
Question: This all seems very complicated and hard !
Yes it is ! It is an increadably silly an difficult thing to do! That is why we invented cross platform frameworks, (and for web based code javascript/css/html5...). Failing that PORT the code.
I'm more of a Flash/AS3 coder than Java so can't give you a full answer but...
A better approach might be to just render your SWF-based User Interface itself via Java code (as opposed to compiling SWF into APK format then trying to embed Flash APK inside Android APK).
This way your SWF can also communicate with Java functions (via AS3's external Interface class). Making it easier to trigger Java functions when a button on the SWF U.I is pressed etc..
You just have to find an SWF render library for Java.
Maybe check out SWFTools. Particularly the SWF Class looks promising. I have not tested this library but it might help you.
I am not a Adobe AIR developer at all, however, I have developed a few Android App with both native environment and with some kind of framework (specifically PhoneGap). So, may this can help you.
I don't think that there would be any tool which could directly convert mobile apps build using frameworks like Adobe AIR, PhoneGap or any other HTML5 based framework to a native Android app because technically it is very difficult and unfeasible to do a proper mapping between each and every element of HTML5 (or Flex element in your case) to a corresponding native control or logic. The best you can do is use plugin mechanism provided by your framework to interact with Java and vice-versa and basically that is why the framework is there. For most of HTML5 based frameworks there is a plugin mechanism which allows developer to interact with native functionality (like Background Services, Activity or any other native resource). Even these frameworks are build using the same modular or plugin based approach and there major functionality (accessing Camera, Audio, SD Card etc native resources) works like this. We have to enable that feature before using that in our app.
So, look for plugin type of mechanism in Adobe AIR.
Hope this helps.
Maybe this is a dirty way to help you, but you can :
Install the adobe air program in one computer
Copy the files of the install folder of the adobe air program
Embed all this files in the java application
Install the java application
Save the adobe air files in one folder
Start the adobe air with java (like you will do it with the console, a simple call to YourAirApp.exe)
There are a lot of solutions for creating an app online like http://www.theappbuilder.com.
How do they build these apps? Is there any example source code to look at cause these tools are all over the internet?
This app builder uses Webview, set to full screen what shows HTML5 page that you can make with this tool. I think it might be possible to see some code. These kinds of tools are helpful for some easy apps, if you want full control and make something more complicated you will need to use Android-sdk or some other hybrid sdk-s(appcelerator, corona-sdk, adobe flash buider and so on).
You can use Ionic for that, i have similar project that i am working on right now since ionic is built in top of angular and html and produce /www folder for you and you can simply use command ionic cordova build android to convert to the apk, if you want it to run on server you can call those command using php exec() command.
In a comment above, you ask about open source alternatives. Take a look at something like PhoneGap. It is close enough that it should give you an understanding of the general approach.
It seems as if every Android application I really want to make is impossible to make with the current SDK. It doesn't give me access to certain things I would like to work with. This is an example of one of these things.
I know it is possible since I've seen apps in the market that do things that the SDK cannot do. My basic question is can someone point me in the direction of how to create such an application. I've searched around, but all of the links I've found are for developing with the SDK. A simple link to a tutorial that can show me how to access Android elements that aren't available through the SDK would be great.
Thanks.
You will not find a tutorial on it because the NDK is in flux..
What I have found is ..
One of the Eclipse CDT has blog posts on how to setup NDK projects in Eclipse.
The people who know Android Embedded C and frameworks are usually on certain IRc channel.
Plenty of code documentation..
Google search for android jni wrapper blog posts.
But keep this in mind several areas require state management as hey interact with hardware buffers in a certain way..ie audio..video..etc.
Lately I've been doing a lot of web development on my Droid via ssh using the ConnectBot app and a few other apps for reference. I've also been doing a lot of Android development back home in eclipse, and I wondered: would it be possible to develop and test my android projects right on my phone? All I can do at the moment is either write the code via ssh and then open it later with eclipse to finish it up, or remotely use eclipse via LogMeIn Ignition or VNC. Does anyone know a native way to do what I'm trying to do, preferably offline?
Try AIDE. I use it because it supports Eclipse projects. https://play.google.com/store/apps/details?id=com.aide.ui
Not sure if this hits the target you're looking for, but The Scripting Layer for Android (formerly known as the Android Scripting Environment) is available and has a lot of power available to it.
Scripting Layer for Android (SL4A,
formerly known as Android Scripting
Environment or ASE) brings scripting
languages to Android by allowing you
to edit and execute scripts and
interactive interpreters directly on
the Android device. These scripts have
access to many of the APIs available
to full-fledged Android applications,
but with a greatly simplified
interface that makes it easy to get
things done.
Scripts can be run interactively in a
terminal, in the background, or via
Locale. Python, Perl, JRuby, Lua,
BeanShell, JavaScript, Tcl, and shell
are currently supported, and we're
planning to add more. See the SL4A
Video Help playlist on YouTube for
various demonstrations of SL4A's
features.
I found DroidScript. It's a quite powerful JavaScript interpreter thats based on the Rhino-library. It can import every Java-package and even create activities for starting from the launcher. The URL is http://droidscript.se for the Live-Editor with which you can edit scripts online and send them to your phone, and the droidscript-app has an editor, too but it cant save at the moment, i think. DroidScript is Open-Source and embeddable in an own app, I think. More info on news of DroidScript are found on droidscript.blogspot.com.
check out JAVAIDEDROID on the market
You can if you have a remote linux machine that you normaly develop on.
ssh into the machine with some ssh app.
edit the code with some console text editor (vim for example).
build the application with ant
copy the generated apk into the android phone and install it
repeat from point 2.
Good luck!
I really don't know if it's possible, but to do it, you should:
"Install" java inside Android.
"Install" ant
run ant debug
Check this link for more instructions.
PS: Please let us know if you could do it :)