Git Product home page Git Product logo

j2objc's Introduction

J2ObjC: Java to Objective-C Translator and Runtime

Project site: https://j2objc.org
J2ObjC blog: https://j2objc.blogspot.com
Questions and discussion: https://groups.google.com/group/j2objc-discuss

What J2ObjC Is

J2ObjC is an open-source command-line tool from Google that translates Java source code to Objective-C for the iOS (iPhone/iPad) platform. This tool enables Java source to be part of an iOS application's build, as no editing of the generated files is necessary. The goal is to write an app's non-UI code (such as application logic and data models) in Java, which is then shared by web apps (using GWT), Android apps, and iOS apps.

J2ObjC supports most Java language and runtime features required by client-side application developers, including exceptions, inner and anonymous classes, generic types, threads and reflection. JUnit test translation and execution is also supported.

J2ObjC is currently beta quality. Several Google projects rely on it, but when new projects first start working with it, they usually find new bugs to be fixed. If you run into issues with your project, please report them!

What J2ObjC isn't

J2ObjC does not provide any sort of platform-independent UI toolkit, nor are there any plans to do so in the future. We believe that iOS UI code needs to be written in Objective-C, Objective-C++ or Swift using Apple's iOS SDK (Android UIs using Android's API, web app UIs using GWT, etc.).

J2ObjC cannot convert Android binary applications. Developers must have source code for their Android app, which they either own or are licensed to use.

Requirements

  • JDK 11
  • Mac workstation or laptop
  • OS X 10.12 or higher
  • Xcode 8 or higher

License

This library is distributed under the Apache 2.0 license found in the LICENSE file. The protocol buffers library is distributed under the same BSD license as Google's protocol buffers. See its README and LICENSE.

Running on GNU/Linux

To build and run on GNU/Linux, install the Darling project, then following its Compile and Run a Program example. Please note that j2objc is only supported on iOS/macOS.

Artifact Signatures

This project publishes some artifacts through Maven Central with a groupId of com.google.j2objc. These artifacts are currently signed with [the following PGP/GPG key] (https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xeb1b3de71713c9ec2e87cc26ee92349ad86de446):

pub   rsa2048 2023-01-10 [SC] [expires: 2025-01-09]
      EB1B3DE71713C9EC2E87CC26EE92349AD86DE446
uid           [ unknown] Thomas Ball <[email protected]>
sub   rsa2048 2023-01-10 [E] [expires: 2025-01-09]

Older artifacts are signed with the following PGP/GPG key:

pub   rsa2048 2015-09-25 [SC]
      B801E2F8EF035068EC1139CC29579F18FA8FD93B
uid           [ unknown] Tom Ball <[email protected]>
sub   rsa2048 2015-09-25 [E]

j2objc's People

Contributors

adil-hussain-84 avatar advaydev1 avatar albertomisail avatar albouan avatar anjulij avatar antonio-cortes-perez avatar buggaboo avatar cpovirk avatar cushon avatar danieldickison avatar flovilmart avatar hohteri avatar ianroth avatar j2objc-copybara avatar kluever avatar kpgalligan avatar kstanger avatar limvot avatar lukhnos avatar manvithn avatar mthvedt avatar mzhang4 avatar priyankmal avatar sfuku7 avatar sjkirby avatar stefanhaustein avatar tkhho avatar tomball avatar weijunkong avatar zhouyanggao avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

j2objc's Issues

ByteTest hangs [moved]

This is Issue 5 moved from a Google Code project.
Added on 2012-09-05T22:54:38.000Z by [email protected].
Please review that bug for more context and additional comments, but update this bug.
Closed (Fixed).

Original labels: Type-Defect, Priority-Medium

Add Mockito support [moved]

This is Issue 17 moved from a Google Code project.
Added on 2012-09-05T23:07:46.000Z by [email protected].
Please review that bug for more context and additional comments, but update this bug.
Closed (Fixed).

Original labels: Type-Task, Priority-Medium, Testability

Labeled break statements translating to goto statements

It appears that labeled break statements are not being translated correctly. The translator is converting java's break label; to objective-c goto label;, but the semantics of each are different. Java's break label jumps to the next statement after label (http://docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.html), whereas goto jumps to the label.

Here's a code sample demonstrating the problem:

public class Breaks {
  public static void main(String[] args) {
    int counter = 0;

    label: {
      while (counter++ < 10) {
        if (counter >= 5) {
          break label;
        }
      }
    }

    System.out.println("Counter: " + counter);
  }
}

Converted into objective-c (snippet):

+ (void)mainWithNSStringArray:(IOSObjectArray *)args {
  int counter = 0;
  label: {
    while (counter++ < 10) {
      if (counter >= 5) {
        goto label;
      }
    }
  }
  [((JavaIoPrintStream *) nil_chk([JavaLangSystem out])) printlnWithNSString:[NSString stringWithFormat:@"Counter: %d", counter]];
}

Outputs
Java: Counter: 5
Objective-c: Counter: 11

I noticed this whilst running code generated by jflex, converted to objective c.

Possible solution: a second label, "label_end", could be generated in objective c after the label's statement, and a break label could be converted to goto label_end? Related code here:

// Objective-C doesn't have a labeled break, so use a goto.

Support JUnit test suites [moved]

This is Issue 7 moved from a Google Code project.
Added on 2012-09-05T22:57:18.000Z by [email protected].
Please review that bug for more context and additional comments, but update this bug.
Closed (Fixed).

Original labels: Type-Defect, Priority-Medium, Testability

Add java.util.EventObject [moved]

This is Issue 51 moved from a Google Code project.
Added on 2012-09-27T14:23:16.000Z by [email protected].
Please review that bug for more context and additional comments, but update this bug.
Closed (Verified).

Original labels: Type-Enhancement, Priority-Medium

Guice support [moved]

This is Issue 15 moved from a Google Code project.
Added on 2012-09-05T23:04:14.000Z by [email protected].
Please review that bug for more context and additional comments, but update this bug.

Original labels: Type-Enhancement, Priority-Medium

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.