Android Builds of OpenJDK Mobile project now available

Bob Vandette bob.vandette at oracle.com
Wed Feb 17 13:27:14 UTC 2016


Thanks.  These issues are most likely related to the r10e NDK version.  We've been using r10b.

I’ll try to build with the latest NDK to see if I encounter the same issues that you are seeing.

Bob.

> On Feb 17, 2016, at 6:38 AM, Ali Ebrahimi <ali.ebrahimi1781 at gmail.com> wrote:
> 
> Hi Bob,
> I finally built mobile jdk for x86 and arm with some modifications:
> I used:
> OS: Ubuntu 15.10
> NDK: android-ndk-r10e-linux-x86_64 with --platform=android-21 for building toolchain
> 
> But my modifications:
> JDK:
> Errors:
> 1) error: static declaration of <some method> follows non-static declaration
> 
> diff -r 91482de10f40 src/java.base/linux/native/libjava/ProcessHandleImpl_linux.c
> --- a/src/java.base/linux/native/libjava/ProcessHandleImpl_linux.c	Wed Feb 10 14:17:12 2016 -0500
> +++ b/src/java.base/linux/native/libjava/ProcessHandleImpl_linux.c	Tue Feb 16 21:06:55 2016 +0330
> @@ -242,7 +242,7 @@
>  }
>  
>  #ifdef __ANDROID__
> -static int getline(char **line, size_t *len, FILE *fp) {
> +int getline(char **line, size_t *len, FILE *fp) {
>    char *buf;
>    size_t bufLen;
>    if (*line != NULL) {
>  
> diff -r 91482de10f40 src/java.base/linux/native/libnio/fs/LinuxNativeDispatcher.c
> --- a/src/java.base/linux/native/libnio/fs/LinuxNativeDispatcher.c	Wed Feb 10 14:17:12 2016 -0500
> +++ b/src/java.base/linux/native/libnio/fs/LinuxNativeDispatcher.c	Tue Feb 16 21:06:55 2016 +0330
> @@ -174,7 +174,7 @@
>  }
>  
>  #ifdef __ANDROID__
> -static struct mntent* getmntent_r(FILE* fp, struct mntent* m, char* buf, int buflen) {
> +struct mntent* getmntent_r(FILE* fp, struct mntent* m, char* buf, int buflen) {
>      if (m) {
>          char *str;
>          char *last;
> diff -r 91482de10f40 src/java.base/unix/native/libjava/ProcessHandleImpl_unix.c
> --- a/src/java.base/unix/native/libjava/ProcessHandleImpl_unix.c	Wed Feb 10 14:17:12 2016 -0500
> +++ b/src/java.base/unix/native/libjava/ProcessHandleImpl_unix.c	Tue Feb 16 21:06:55 2016 +0330
> @@ -115,7 +115,7 @@
>   * support.  Determine if the following are the most suitable alternatives.
>   *
>   */
> -static int getpwuid_r(uid_t uid, struct passwd* pwd, char* buf, size_t buflen, struct passwd** result)
> +int getpwuid_r(uid_t uid, struct passwd* pwd, char* buf, size_t buflen, struct passwd** result)
>  {
>    *result = NULL;
>    errno = 0;
> diff -r 91482de10f40 src/java.base/unix/native/libnio/fs/UnixNativeDispatcher.c
> --- a/src/java.base/unix/native/libnio/fs/UnixNativeDispatcher.c	Wed Feb 10 14:17:12 2016 -0500
> +++ b/src/java.base/unix/native/libnio/fs/UnixNativeDispatcher.c	Tue Feb 16 21:06:55 2016 +0330
> @@ -160,7 +160,7 @@
>   * support.  Determine if the following are the most suitable alternatives.
>   *
>   */
> -static int getpwuid_r(uid_t uid, struct passwd* pwd, char* buf, size_t buflen, struct passwd** result)
> +int getpwuid_r(uid_t uid, struct passwd* pwd, char* buf, size_t buflen, struct passwd** result)
>  {
>    *result = NULL;
>    errno = 0;
> @@ -173,7 +173,7 @@
>    return 0;
>  }
>  
> -static int getpwnam_r(const char *name, struct passwd* pwd, char* buf, size_t buflen, struct passwd** result)
> +int getpwnam_r(const char *name, struct passwd* pwd, char* buf, size_t buflen, struct passwd** result)
>  {
>    *result = NULL;
>    errno = 0;
> @@ -186,7 +186,7 @@
>    return 0;
>  }
>  
> -static int getgrgid_r(gid_t gid, struct group* grp, char* buf, size_t buflen, struct group** result)
> +int getgrgid_r(gid_t gid, struct group* grp, char* buf, size_t buflen, struct group** result)
>  {
>    *result = NULL;
>    errno = 0;
> @@ -199,7 +199,7 @@
>    return 0;
>  }
>  
> -static int getgrnam_r(const char *name, struct group* grp, char* buf, size_t buflen, struct group** result)
> +int getgrnam_r(const char *name, struct group* grp, char* buf, size_t buflen, struct group** result)
>  {
>    *result = NULL;
>    errno = 0;
> diff -r 91482de10f40 src/jdk.security.auth/unix/native/libjaas/Unix.c
> --- a/src/jdk.security.auth/unix/native/libjaas/Unix.c	Wed Feb 10 14:17:12 2016 -0500
> +++ b/src/jdk.security.auth/unix/native/libjaas/Unix.c	Tue Feb 16 21:06:55 2016 +0330
> @@ -39,7 +39,7 @@
>  #include <errno.h>
>  
>  #ifdef __ANDROID__
> -static int getpwuid_r(uid_t uid, struct passwd* pwd, char* buf, size_t buflen, struct passwd** result)
> +int getpwuid_r(uid_t uid, struct passwd* pwd, char* buf, size_t buflen, struct passwd** result)
>  {
>    *result = NULL;
>    errno = 0;
> 
> 2) 
> Error “initializer element is not constant” when trying to initialize variable <http://stackoverflow.com/questions/3025050/error-initializer-element-is-not-constant-when-trying-to-initialize-variable-w>
> I only commented line: this is only workaound
> 
> diff -r 91482de10f40 src/java.base/linux/native/libnet/linux_close.c
> --- a/src/java.base/linux/native/libnet/linux_close.c	Wed Feb 10 14:17:12 2016 -0500
> +++ b/src/java.base/linux/native/libnet/linux_close.c	Tue Feb 16 21:06:55 2016 +0330
> @@ -57,7 +57,7 @@
>   * Signal to unblock thread
>   */
>  #ifdef __ANDROID__
> -#define __SIGRTMAX SIGRTMAX
> +//#define __SIGRTMAX SIGRTMAX
>  #endif
>  static int sigWakeup = (__SIGRTMAX - 2);
> 
> Hotspot:
> 
> 1) error: static declaration of <some method> follows non-static declaration
> 
> diff -r de1d92b01bae src/os/linux/vm/perfMemory_linux.cpp
> --- a/src/os/linux/vm/perfMemory_linux.cpp	Wed Feb 10 14:15:17 2016 -0500
> +++ b/src/os/linux/vm/perfMemory_linux.cpp	Tue Feb 16 20:32:38 2016 +0330
> @@ -44,7 +44,7 @@
>  # include <pwd.h>
>  
>  #ifdef __ANDROID__
> -static int getpwuid_r(uid_t uid, struct passwd* pwd, char* buf, size_t buflen, struct passwd** result)
> +int getpwuid_r(uid_t uid, struct passwd* pwd, char* buf, size_t buflen, struct passwd** result)
>  {
>    *result = NULL;
>    errno = 0;
>   
> 2) error: conflicting declaration 'typedef elf_greg_t greg_t'
> android-x86-toolchain/sysroot/usr/include/sys/ucontext.h:123:13: note: previous declaration as 'typedef int greg_t'
> 
> I forced redefinition with #define macro. I don't know if redefinition is required here
> 
> diff -r de1d92b01bae src/os_cpu/linux_x86/vm/os_linux_x86.cpp
> --- a/src/os_cpu/linux_x86/vm/os_linux_x86.cpp	Wed Feb 10 14:15:17 2016 -0500
> +++ b/src/os_cpu/linux_x86/vm/os_linux_x86.cpp	Tue Feb 16 20:32:38 2016 +0330
> @@ -89,6 +89,7 @@
>  #endif
>  
>  #ifdef __ANDROID__
> +#define greg_t elf_greg_t
>  typedef elf_greg_t greg_t;
>  #define SPELL_REG_SP "esp"
>  #define SPELL_REG_FP "ebp"
>  #define CTX_REG_AX eax
> 
> 3) error: conflicting declaration 'typedef struct asm_ucontext ucontext_t'
>  typedef struct ucontext ucontext_t;
> ..
> android-x86-toolchain/sysroot/usr/include/sys/ucontext.h:161:3: note: previous declaration as 'typedef struct ucontext ucontext_t'
>  } ucontext_t;
> 
> This is my hack��
> 
> diff -r de1d92b01bae src/share/vm/utilities/globalDefinitions_gcc.hpp
> --- a/src/share/vm/utilities/globalDefinitions_gcc.hpp	Wed Feb 10 14:15:17 2016 -0500
> +++ b/src/share/vm/utilities/globalDefinitions_gcc.hpp	Tue Feb 16 20:32:38 2016 +0330
> @@ -78,15 +78,18 @@
>  #include <asm/sigcontext.h>
>  /* avoid conflicting ucontext definitions */
>  #define ucontext asm_ucontext
> -struct ucontext {
> +struct custom_ucontext {
>    unsigned long uc_flags;
> -  struct ucontext *uc_link;
> +  struct custom_ucontext *uc_link;
>    stack_t uc_stack;
>    struct sigcontext uc_mcontext;
>    sigset_t uc_sigmask;
>  };
> -
> -typedef struct ucontext ucontext_t;
> +#define ucontext_t custom_ucontext
> +typedef struct custom_ucontext ucontext_t;
>  #endif //__ANDROID__
> 
> 
> Also in my toolchain for platform android-21 following files is missing I copied them from android-19
> asm/elf.h
> asm/user.h
> 
> 
> With all of this and adding:
> export CC=$ANDROID_DEVKIT/bin/arm-linux-androideabi-gcc
> export CXX=$ANDROID_DEVKIT/bin/arm-linux-androideabi-g++
> export LD=$ANDROID_DEVKIT/bin/arm-linux-androideabi-ld
> export AR=$ANDROID_DEVKIT/bin/arm-linux-androideabi-ar
> export MT=$ANDROID_DEVKIT/bin/arm-linux-androideabi-mt
> export NM=$ANDROID_DEVKIT/bin/arm-linux-androideabi-nm
> export OBJDUMP=$ANDROID_DEVKIT/bin/arm-linux-androideabi-objdump
> export RANLIB=$ANDROID_DEVKIT/bin/arm-linux-androideabi-ranlib
> export STRIP=$ANDROID_DEVKIT/bin/arm-linux-androideabi-strip
> 
> I ran my Hello World program in android jvm.
> 
> On Thu, Feb 11, 2016 at 10:33 PM, Bob Vandette <bob.vandette at oracle.com <mailto:bob.vandette at oracle.com>> wrote:
> The OpenJDK Mobile project was recently merged with JDK 9 build 102 and
> as of today nows has the ability to build both iOS and Android Java 9 binaries
> for execution on both x86 and arm devices.
> 
> I’ve updated the iOS and Android Platform specific project pages with up to date
> build instructions.
> 
> http://openjdk.java.net/projects/mobile/ios.html <http://openjdk.java.net/projects/mobile/ios.html>
> http://openjdk.java.net/projects/mobile/android.html <http://openjdk.java.net/projects/mobile/android.html>
> 
> Enjoy,
> Bob Vandette
> Mobile Project Lead
> 
> 
> 
> 
> 
> 
> 
> 
> -- 
> 
> Best Regards,
> Ali Ebrahimi



More information about the mobile-dev mailing list