diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml new file mode 100644 index 0000000000000000000000000000000000000000..b45a40613476f7c9da61ce1d5b2a923f0f0d9c59 --- /dev/null +++ b/android/AndroidManifest.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8"?> +<manifest xmlns:android="http://schemas.android.com/apk/res/android" + package="net.i2p.router" + android:versionCode="1" + android:versionName="1.0.0"> + <application android:label="@string/app_name"> + <activity android:name=".I2PAndroid" + android:label="@string/app_name"> + <intent-filter> + <action android:name="android.intent.action.MAIN" /> + <category android:name="android.intent.category.LAUNCHER" /> + </intent-filter> + </activity> + </application> +</manifest> diff --git a/android/README.txt b/android/README.txt new file mode 100644 index 0000000000000000000000000000000000000000..68719911f63d525e2a89def61e5feb574ce260d7 --- /dev/null +++ b/android/README.txt @@ -0,0 +1,18 @@ +#Unzip the android SDK in ../../ +#So then the android tools will be in ../../android-sdk-linux_x86-1.1_r1/tools/ + +#then build the android apk file: +ant + +#then run the emulator: +../../android-sdk-linux_x86-1.1_r1/tools/emulator & + +#then wait a couple minutes until the emulator is up +#then install the I2P app +ant install + +#then run the debugger +$A/ddms & + +#to rebuild and reinstall to emulator: +ant reinstall diff --git a/android/build.xml b/android/build.xml new file mode 100644 index 0000000000000000000000000000000000000000..9f4e7b0b9f093393760765a291808a52ebb5b170 --- /dev/null +++ b/android/build.xml @@ -0,0 +1,280 @@ +<?xml version="1.0" ?> +<project name="I2PAndroid" default="debug"> + <!-- SDK Locations --> + <property name="sdk-folder" value="../../android-sdk-linux_x86-1.1_r1" /> + <property name="android-tools" value="../../android-sdk-linux_x86-1.1_r1/tools" /> + + <!-- Application Package Name --> + <property name="application-package" value="net.i2p.router" /> + + <!-- The intermediates directory --> + <!-- Eclipse uses "bin" for its own output, so we do the same. --> + <property name="outdir" value="bin" /> + + <!-- ************************************************************************************* --> + <!-- No user servicable parts below. --> + + <property name="android-framework" value="${android-tools}/lib/framework.aidl" /> + + <!-- Input directories --> + <property name="resource-dir" value="res" /> + <property name="asset-dir" value="assets" /> + <property name="srcdir" value="src" /> + <condition property="srcdir-ospath" + value="${basedir}\${srcdir}" + else="${basedir}/${srcdir}" > + <os family="windows"/> + </condition> + + <property name="external-libs" value="lib" /> + <condition property="external-libs-ospath" + value="..\pkg-temp\${external-libs}" + else="../pkg-temp/${external-libs}" > + <os family="windows"/> + </condition> + + <!-- Output directories --> + <property name="outdir-classes" value="${outdir}/classes" /> + <condition property="outdir-classes-ospath" + value="${basedir}\${outdir-classes}" + else="${basedir}/${outdir-classes}" > + <os family="windows"/> + </condition> + + <!-- Create R.java in the source directory --> + <property name="outdir-r" value="src" /> + + <!-- Intermediate files --> + <property name="dex-file" value="classes.dex" /> + <property name="intermediate-dex" value="${outdir}/${dex-file}" /> + <condition property="intermediate-dex-ospath" + value="${basedir}\${intermediate-dex}" + else="${basedir}/${intermediate-dex}" > + <os family="windows"/> + </condition> + + <!-- The final package file to generate --> + <property name="resources-package" value="${outdir}/${ant.project.name}.ap_" /> + <condition property="resources-package-ospath" + value="${base`....${resources-package}" + else="${basedir}/${resources-package}" > + <os family="windows"/> + </condition> + + <property name="out-debug-package" value="${outdir}/${ant.project.name}-debug.apk" /> + <condition property="out-debug-package-ospath" + value="${basedir}\${out-debug-package}" + else="${basedir}/${out-debug-package}" > + <os family="windows"/> + </condition> + + <property name="out-unsigned-package" value="${outdir}/${ant.project.name}-unsigned.apk" /> + <condition property="out-unsigned-package-ospath" + value="${basedir}\${out-unsigned-package}" + else="${basedir}/${out-unsigned-package}" > + <os family="windows"/> + </condition> + + <!-- Tools --> + <condition property="aapt" value="${android-tools}/aapt.exe" else="${android-tools}/aapt" > + <os family="windows"/> + </condition> + <condition property="aidl" value="${android-tools}/aidl.exe" else="${android-tools}/aidl" > + <os family="windows"/> + </condition> + <condition property="adb" value="${android-tools}/adb.exe" else="${android-tools}/adb" > + <os family="windows"/> + </condition> + <condition property="dx" value="${android-tools}/dx.bat" else="${android-tools}/dx" > + <os family="windows"/> + </condition> + <condition property="apk-builder" value="${android-tools}/apkbuilder.bat" else="${android-tools}/apkbuilder" > + <os family="windows"/> + </condition> + + <property name="android-jar" value="${sdk-folder}/android.jar" /> + + <!-- Rules --> + + <!-- Create the output directories if they don't exist yet. --> + <target name="dirs"> + <echo>Creating output directories if needed...</echo> + <mkdir dir="${outdir}" /> + <mkdir dir="${outdir-classes}" /> + </target> + + <target name="clean"> + <delete dir="${outdir}" /> + <delete file="${outdir-r}/net/i2p/router/R.java" /> + </target> + + <!-- Generate the R.java file for this project's resources. --> + <target name="resource-src" depends="dirs"> + <echo>Generating R.java / Manifest.java from the resources...</echo> + <exec executable="${aapt}" failonerror="true"> + <arg value="package" /> + <arg value="-m" /> + <arg value="-J" /> + <arg value="${outdir-r}" /> + <arg value="-M" /> + <arg value="AndroidManifest.xml" /> + <arg value="-S" /> + <arg value="${resource-dir}" /> + <arg value="-I" /> + <arg value="${android-jar}" /> + </exec> + </target> + + <!-- Generate java classes from .aidl files. --> + <target name="aidl" depends="dirs"> + <echo>Compiling aidl files into Java classes...</echo> + <apply executable="${aidl}" failonerror="true"> + <arg value="-p${android-framework}" /> + <arg value="-I${srcdir}" /> + <fileset dir="${srcdir}"> + <include name="**/*.aidl"/> + </fileset> + </apply> + </target> + + <!-- Compile this project's .java files into .class files. --> + <target name="compile" depends="dirs, resource-src, aidl, buildrouter"> + <javac encoding="ascii" target="1.5" debug="true" extdirs="" + srcdir="." + destdir="${outdir-classes}" + bootclasspath="${android-jar}"> + <classpath> + <fileset dir="${external-libs-ospath}" includes="*.jar"/> + </classpath> + </javac> + </target> + + <target name="buildrouter"> + <ant dir=".." target="prepupdateRouter" /> + </target> + + <!-- Convert this project's .class files into .dex files. --> + <target name="dex" depends="compile"> + <echo>Converting compiled files and external libraries into ${outdir}/${dex-file}...</echo> + <apply executable="${dx}" failonerror="true" parallel="true"> + <!-- this is a bad sign that we need this --> + <arg value="-JXmx256m" /> + <arg value="--dex" /> + <arg value="--output=${intermediate-dex-ospath}" /> + <arg path="${outdir-classes-ospath}" /> + <fileset dir="${external-libs-ospath}" includes="*.jar"/> + </apply> + </target> + + <!-- Put the project's resources into the output package file. --> + <target name="package-res-and-assets"> + <echo>Packaging resources and assets...</echo> + <exec executable="${aapt}" failonerror="true"> + <arg value="package" /> + <arg value="-f" /> + <arg value="-M" /> + <arg value="AndroidManifest.xml" /> + <arg value="-S" /> + <arg value="${resource-dir}" /> + <arg value="-A" /> + <arg value="${asset-dir}" /> + <arg value="-I" /> + <arg value="${android-jar}" /> + <arg value="-F" /> + <arg value="${resources-package}" /> + </exec> + </target> + + <!-- Same as package-res-and-assets, but without "-A ${asset-dir}" --> + <target name="package-res-no-assets"> + <echo>Packaging resources...</echo> + <exec executable="${aapt}" failonerror="true"> + <arg value="package" /> + <arg value="-f" /> + <arg value="-M" /> + <arg value="AndroidManifest.xml" /> + <arg value="-S" /> + <arg value="${resource-dir}" /> + <!-- No assets directory --> + <arg value="-I" /> + <arg value="${android-jar}" /> + <arg value="-F" /> + <arg value="${resources-package}" /> + </exec> + </target> + + <!-- Invoke the proper target depending on whether or not + an assets directory is present. --> + <!-- TODO: find a nicer way to include the "-A ${asset-dir}" argument + only when the assets dir exists. --> + <target name="package-res"> + <available file="${asset-dir}" type="dir" + property="res-target" value="and-assets" /> + <property name="res-target" value="no-assets" /> + <antcall target="package-res-${res-target}" /> + </target> + + <!-- Package the application and sign it with a debug key. + This is the default target when building. It is used for debug. --> + <target name="debug" depends="dex, package-res"> + <echo>Packaging ${out-debug-package}, and signing it with a debug key...</echo> + <exec executable="${apk-builder}" failonerror="true"> + <arg value="${out-debug-package-ospath}" /> + <arg value="-z" /> + <arg value="${resources-package-ospath}" /> + <arg value="-f" /> + <arg value="${intermediate-dex-ospath}" /> + <arg value="-rf" /> + <arg value="${srcdir-ospath}" /> + <arg value="-rj" /> + <arg value="${external-libs-ospath}" /> + </exec> + </target> + + <!-- Package the application without signing it. + This allows for the application to be signed later with an official publishing key. --> + <target name="release" depends="dex, package-res"> + <echo>Packaging ${out-unsigned-package} for release...</echo> + <exec executable="${apk-builder}" failonerror="true"> + <arg value="${out-unsigned-package-ospath}" /> + <arg value="-u" /> + <arg value="-z" /> + <arg value="${resources-package-ospath}" /> + <arg value="-f" /> + <arg value="${intermediate-dex-ospath}" /> + <arg value="-rf" /> + <arg value="${srcdir-ospath}" /> + <arg value="-rj" /> + <arg value="${external-libs-ospath}" /> + </exec> + <echo>It will need to be signed with jarsigner before being published.</echo> + </target> + + <!-- Install the package on the default emulator --> + <target name="install" depends="debug"> + <echo>Installing ${out-debug-package} onto default emulator...</echo> + <exec executable="${adb}" failonerror="true"> + <arg value="install" /> + <arg value="${out-debug-package}" /> + </exec> + </target> + + <target name="reinstall" depends="debug"> + <echo>Installing ${out-debug-package} onto default emulator...</echo> + <exec executable="${adb}" failonerror="true"> + <arg value="install" /> + <arg value="-r" /> + <arg value="${out-debug-package}" /> + </exec> + </target> + + <!-- Uinstall the package from the default emulator --> + <target name="uninstall"> + <echo>Uninstalling ${application-package} from the default emulator...</echo> + <exec executable="${adb}" failonerror="true"> + <arg value="uninstall" /> + <arg value="${application-package}" /> + </exec> + </target> + +</project> diff --git a/android/res/layout/main.xml b/android/res/layout/main.xml new file mode 100644 index 0000000000000000000000000000000000000000..3bfc31cff91de609846d970197eb266788b2e170 --- /dev/null +++ b/android/res/layout/main.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:orientation="vertical" + android:layout_width="fill_parent" + android:layout_height="fill_parent" + > +<TextView + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:text="Hello World, I2PAndroid" + /> +</LinearLayout> + diff --git a/android/res/values/strings.xml b/android/res/values/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..983a304b91143c9280066744db4c5523523ae886 --- /dev/null +++ b/android/res/values/strings.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + <string name="app_name">I2PAndroid</string> +</resources> diff --git a/android/src/net/i2p/router/I2PAndroid.java b/android/src/net/i2p/router/I2PAndroid.java new file mode 100644 index 0000000000000000000000000000000000000000..6b65bac52bb639df20f44c7257de97f01663f381 --- /dev/null +++ b/android/src/net/i2p/router/I2PAndroid.java @@ -0,0 +1,18 @@ +package net.i2p.router; + +import android.app.Activity; +import android.os.Bundle; + +import net.i2p.router.Router; + +public class I2PAndroid extends Activity +{ + /** Called when the activity is first created. */ + @Override + public void onCreate(Bundle savedInstanceState) + { + super.onCreate(savedInstanceState); + setContentView(R.layout.main); + Router.main(null); + } +}