Is there a way to build Android app from Android studio to a jar file that could be run on Windows/Mac/Ubuntu? If not then why?
Despite both is Java syntax, Oracle Java and Android Java have little in common. Gradle can certainly package JAR, but the Android classes are unknown to the regular JRE. Better use the plain IntelliJ IDEA instead, which is rather suitable for desktop Java applications - else you could only run Android applications on an emulator or Anbox, which isn't too portable.
Tl;DR No you cannot run Android apps on Windows/Mac/Linux. Only emulators and Android devices can run them.
You should check the steps that Gradle performs during building before running it on the destination device.
To run on a PC (I mean Windows/Mac/Linux), you need a jar. And the closest thing that the build step comes to making jar is javac.
After javac, it performs steps to transform the java .class files into an Android readable format or the dex format and then packages the dexes into an .apk.
Android's execution environment understands dex and not .class (if it did then Android apps could have been run on all Java supported systems).
Let's say that you managed to stop after the javac and then managed to build a jar. Once you try to run it on anything other than an Android environment, you will get a ton of NoClassDefFoundErros because all Android specific classes are not there in the libraries in the usual JVMs (non-Android JVMs).
You should check this about the legal dispute between Oracle and Google. You will find that Android's Java implementation is very different that what OpenJDK offered at that time.
Related
I wanna export my app to PC and Android devices. If i create a JavaFX project with sdk 13.0 and try to export as a JavaFX application it says fx:deploy not supported. So i tried gluon plugin. But when i open a project i cant run even the empty scene. I found one tutorial on the internet how to do that, but he had inside the build.grandle some long settings, and i have only one line
apply plugin: 'base'
And i get this error every time
The project uses Gradle 4.3.1 which is incompatible with Java 10 or newer.
What is the easiest way to export java app to exe or apk ?
Creating an installer for the desktop platforms (Windows, macOS, Linux) has become easy these days. The tool of choice is jpackage which started to be shipped with JDK 14. It can either be used on the command line on the finished project or you can use a Gradle plugin (https://github.com/beryx/badass-jlink-plugin). If your project is not modularized you could follow this tutorial https://github.com/dlemmermann/JPackageScriptFX which also uses jpackage but together with Maven and some other tools from the JDK. The Maven part could easily be rewritten to Gradle, if needed.
Building for Android or iOS is another story. You will need the Gluon client-gradle-plugin (https://github.com/gluonhq/client-gradle-plugin) to do that. But I think it is rather naive to believe that an application which is written for the desktop can be used one to one on a mobile platform. Technically this would work for a hello-world like demo but not for a real application just because your environment, the form-factor and many other things are just different. So you will have to adjust your project to accommodate for that.
Is it possible to develop Android apps using only the Android SDK, without any IDE like Android Studio?
Yes, see the Google SDK documentation.
However, with the current toolchain and documentation it'll be an uphill struggle. I'm trying to do this too (for a dev who lives in Vim and Unix tools, Android Studio is needlessly slow and bloated).
The main issues I've found so far:
The SDK documentation gives instructions to create an Ant-driven project, but the SDK is now geared towards using Gradle. If you're working through the Google documentation in a linear fashion, you'll find subsequent lessons have you issue Gradle build instructions. For your Ant-built project.
There is very little documentation on how to actually create a Gradle-built project from the command line. The command line I use is:
android create project --target android-22 --name MyProjectName --path my_project/ --activity MyProject --package com.example.android.myproject --gradle --gradle-version 1.2.2
The --gradle-version actually refers to the Gradle Android plugin version, not the version of Gradle itself. Finding this out wasn't easy.
Even if you get it to create a project properly, it probably won't build without further manipulation. One of the generated files (project/build.gradle) has an invalid directive name (runProguard - I'm guessing it's now deprecated). That must be changed to minifyEnabled before the project will build. And using the Gradle plugin 1.2.2, the file project/gradle/wrapper/gradle-wrapper.properties has the Gradle distribution incorrectly listed as gradle-1.2.2-all.zip. This should be gradle-2.2.1-all.zip.
These are files generated by the SDK with errors.
The documentation is focussed on IDE-based development. Once you get past the initial few pages on creating and managing a project using the command line, it's very IDE-focussed.
Instructions on things like changing an app Theme are difficult or impossible to follow as they omit steps that the IDE performs for you.
In general, fully IDE-less development for Android (at least in Java, using the official SDK) is very painful. And my personal opinion is that IDE-based development is equally painful (slow, bloated, ugly on high-DPI screens under Linux and evidently full of magic that's a pain to replicate on the command line).
Edit: I should add that the above refers to using SDK tools v24.2, SDK Platform-tools v22, SDK Build-tools v22.01 and Android API 22 (5.1.1).
For android the basic debugging environments are:
ADB
DDMS
Java Debugger
You can try with them.
More details are here : http://developer.android.com/tools/debugging/debugging-projects-cmdline.html
Writing an Android app on Notepad is what I do on my Windows Laptop.
First you configure your laptop as follows:
Download development Kits: Download a Java Development Kit 1.6 for Windows and an Android Development Kit . Similarly try downloading older version of Android kit GUI version of Kit Manager so that you can download essentials. Using kit Manager download Android-23 platform build tools. Android Studio may have slower performance, so try to avoid it.
Configure Kits: Set Windows PATH variable by right clicking My Computer -> Properties -> Advanced System Settings or change the appropriate settings in your Control Panel. PATH should include the Java's compiler executable
file in Java directory, and the android.bat file of Android Kit.
Download Build-Tool: (recommended, but Ant can be used too.) These
programs configure the command-line tools for easy usage for our
convenience. I downloaded version 2.2.1 as it can use old
Java & old Android.
I've also written about these instructions on my GitHub Page.
For the development of Android apps one doesn't even need a PC, and not even the Android SDK. One can develop them completely on a mobile Android device, so an emulator isn't necessary either.
For that one needs to the app Termux on the device, and the toolchain script apkbuilder, which stitches together all APK building programs that come with the Termux packages aapt, apksigner, clang, cmake, d8, ecj and unzip, including the OpenJDK.
Is it possible to run/execute a .jar file on Android from code especially with Android's shift to ART instead of Dalvik?
The older versions of Android used to come with DVM (Dalvic Virtual Machine), and the newer versions are used to come with ART (Android Run Time).
Both of them execute the .dex (Dalvic Executable).
You cannot run .jar files directly in Android, but you can try some apps or VMs.
I downloaded the project folder from :
https://android.googlesource.com/platform/packages/apps/Gallery2/
For some reason, when I opened it into my Eclipse environment, it is not compiling and it shows a lot of broken references. I am attaching screenshot for your reference:
Any ideas if I am doing something wrong or the code itself has issues?
This is a platform package, not a stand alone 3rd party package. It uses classes which are part of the platform, but not the Android SDK. It's built with the platform as a whole using make rather than Eclipse and ultimately is in the ROM (i.e. flash image.) You won't be able to build it with Eclipse and try to deploy it.
Many of Android's core apps depend on internal system APIs that are not available in the standard SDK that developers compile against. You can find some more information from this question.
In Android OS, I am able to run several Java JAR files compiled under desktop environment. For instance, jtransforms
May I know why is it so? I thought the JVM from Oracle and Dalvik VM from Google uses two different byte code formats? Why the JAR file compiled by Java SE able to execute in Android?
I assume you are simply including the jar file in your android project? Then it works, as during the build process it is converted (the same is done for your own class files!) to dex format. This is done with the dex (dx) tool. Using ADT in eclipse it is automatically done for you. It's available for manual use in the android sdk of course too:
Under android-sdk-windows\platform-tools\dx.bat if on windows.
According to wikipedia, dx is used to convert compiled .class files into the .dex format.
1. Java SE - Java (Swing + AWT) = Android
2.In 2005, when Java was undergoing changes, Android creator didnt wanted to base Android
totally on Java. So they included JVM as the 1st compilation unit, thats the reason
JRuby , Jython, etc can be used to write Android apps. And 2nd Compilation unit as Dalvik
Compiler.
3. So its quite natural that a jar file compiled under desktop environment works fine on Android.