Ruboto

General

Category
Free
Tag
Toolkits For Other PL
License
N/A
Registered
Jul 5, 2014
Favorites
0
Link
https://github.com/ruboto/ruboto
See also
Pindah
Kandy
AndroLua
Xtendroid
Anko

Additional

Language
Ruby
Version
v0.0.3 (Dec 19, 2010)
Created
Jun 17, 2010
Updated
May 15, 2023
Owner
Ruboto (ruboto)
Contributors
bootstraponline
Jan Berkel (jberkel)
Daniel Passos (danielpassos)
Anup Cowkur (anupcowkur)
Wei Zhang (saga64)
Adam Parrott (AtomicPair)
Scott Moyer (rscottm)
Charles Oliver Nutter (headius)
Daniel Jackoway (jackowayed)
Bruno Antunes (sardaukar)
Maddi Joyce (maddijoyce)
Andrew (mcandre)
Raúl Gutiérrez Segalés (rgs1)
Li Rongxi (Nyangawa)
Robert Rowe (CaptainJet)
Uwe Kubosch (donv)
Paritosh Piplewar (passion8)
Josef Ludvicek (jludvice)
Show all (33)33
Activity
Badge
Generate
Download
Source code

Ruboto 2

Ruboto 2 is a redesign based on an Android Studio workflow. This means that the JRuby and Ruboto components will integrate into the standard gradle tooling used by regular Android Studio projects.

Starting a new Ruboto project

  • Download and install Android studio.

  • Choose "Create New Project" in the startup screen.

    • Choose "Phone and Tablet" and "No Activity" for the project template.
    • Choose "Java" for your language and "Minimum SDK" should be "API 27: Android 8.1 (Oreo)" or higher.
  • Add a jcenter to the dependencyResolutionManagement/repositories section of your settings.gradle file:

    dependencyResolutionManagement {
        ...
        repositories {
            ...
            jcenter()
        }
    }
  • Add the these dependencies to your app/build.gradle file:

    dependencies {
      ...
      implementation fileTree(dir: 'libs', include: ['*.jar'])
      implementation 'com.linkedin.dexmaker:dexmaker:2.19.1'
      implementation 'me.qmx.jitescript:jitescript:0.4.1'
      implementation 'com.jakewharton.android.repackaged:dalvik-dx:7.1.0_r7'
    }
  • Add gems.rb file:

    source 'https://rubygems.org/'
    
    gem 'ruboto', '~>2.0.dev', git: 'https://github.com/ruboto/ruboto.git'
  • Ensure you are using JRuby on the command line

    Create a .ruby-version file:

      jruby
    
  • Initialize Ruboto:

    jruby -S bundle
    jruby -S bundle exec ruboto init

    This will copy the core files to your project.

  • Add app/gems.rb

    source 'https://rubygems.org/'
    
    gem 'activerecord', '~>7.0'
    gem 'activerecord-jdbc-adapter', '~>70.1'
    gem 'sqldroid', '~>1.0'
  • Add app/update_jruby_jar.sh:

    #!/usr/bin/env bash
    set -e
    
    VERSION="9.4.2.0"
    FULL_VERSION="${VERSION}"
    # FULL_VERSION="${VERSION}-SNAPSHOT" # Uncomment to use a local snapshot
    # FULL_VERSION="${VERSION}-20190822.050313-17" # Uncomment to use a remote snapshot
    JAR_FILE="jruby-complete-${FULL_VERSION}.jar"
    DOWNLOAD_DIR="$HOME/Downloads"
    DOWNLOADED_JAR="${DOWNLOAD_DIR}/${JAR_FILE}"
    SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
    
    cd $SCRIPT_DIR
    
    [ ! -d $HOME/Downloads ] && mkdir $HOME/Downloads  # Create the directory if we don't find it
    [ ! -d ./libs ] && mkdir ./libs                    # Create the directory if we don't find it
    
    cd libs
    rm -f bcpkix-jdk15on-*.jar bcprov-jdk15on-*.jar bctls-jdk15on-*.jar cparse-jruby.jar generator.jar jline-*.jar jopenssl.jar jruby-complete-*.jar parser.jar psych.jar readline.jar snakeyaml-*.jar
    
    if test -f "${DOWNLOADED_JAR}"; then
      echo "Found downloaded JAR"
    else
      echo No "${DOWNLOADED_JAR}" - Downloading.
      curl "https://oss.sonatype.org/service/local/repositories/releases/content/org/jruby/jruby-complete/${VERSION}/jruby-complete-${VERSION}.jar" -o "${DOWNLOADED_JAR}"
    fi
    cp ${DOWNLOADED_JAR} .
    
    unzip -o -j ${JAR_FILE} '*.jar'
    
    # FIXME(uwe): Why do we delete these files?
    zip generator.jar -d json/ext/ByteListTranscoder.class
    zip generator.jar -d json/ext/OptionsReader.class
    zip generator.jar -d json/ext/Utils.class
    zip generator.jar -d json/ext/RuntimeInfo.class
    
    cd - >/dev/null
    
    cd src/main/java
    find * -type f | grep "org/jruby/" | sed -e 's/\.java//g' | sort > ../../../overridden_classes.txt
    cd - >/dev/null
    
    while read p; do
      unzip -Z1 libs/${JAR_FILE} | grep "$p\\.class" > classes.txt
      unzip -Z1 libs/${JAR_FILE} | egrep "$p(\\\$[^$]+)*\\.class" >> classes.txt
      if [[ -s classes.txt ]] ; then
        zip -d -@ libs/${JAR_FILE} <classes.txt
        if [[ ! "$?" == "0" ]] ; then
          zip -d libs/${JAR_FILE} "$p\\.class"
        fi
      fi
      rm classes.txt
    done < overridden_classes.txt
    
    rm overridden_classes.txt
    
    cd libs
    rm -f digest.jar
    cd - >/dev/null
  • Make app/update_jruby_jar.sh executable:

      chmod u+x app/update_jruby_jar.sh
  • Generate jruby.jar:

      app/update_jruby_jar.sh
  • Generate the startup activity:

      bundle exec ruboto gen class Activity --name StartupActivity
  • Add the startup activity intent filter to the new activity tag in app/src/main/AndroidManifest.xml:

    <activity android:name='StartupActivity' android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
            <action android:name="android.intent.action.VIEW" />
        </intent-filter>
    </activity>
  • Declare the Ruboto components and SplashActivity in app/src/main/AndroidManifest.xml

    <activity android:name='org.ruboto.RubotoActivity' />
    <activity android:name='org.ruboto.RubotoDialog' android:theme='@android:style/Theme.Dialog' />
    <service
        android:name='org.ruboto.RubotoService'
        android:exported='false' />
    <activity
        android:name='org.ruboto.SplashActivity'
        android:configChanges='orientation|screenSize'
        android:exported='false'
        android:noHistory='true' />

    Rember to sync the gradle config after the changes.

  • Start your app!

Updating app gems

Update your app/gems.rb (or app/Gemfile) and run

bundle exec rake bundle

Adding Ruboto to an existing Android Studio project

HOWTO missing. Pull requests welcome!

Ruboto 1.x

Looking for Ruboto 1.x? Switch to the ruboto_1.x branch.