IC4J API Docs
Search…
Android Development
IC4J Agent library can be also used for development of native Android application written in Java or Kotlin. Use Android Studio to start a new Android application or add support for the Internet Computer to your existing application.
To add required IC4J libraries to your Android project open gradle.build file and add dependencies:
implementation 'commons-codec:commons-codec:1.15'
implementation 'org.ic4j:ic4j-candid:0.6.12'
// https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on
implementation 'org.bouncycastle:bcprov-jdk15on:1.70'
// https://mvnrepository.com/artifact/org.bouncycastle/bcpkix-jdk15on
implementation 'org.bouncycastle:bcpkix-jdk15on:1.70'
implementation('org.ic4j:ic4j-agent:0.6.12') {
exclude group: 'org.apache.httpcomponents.client5', module: 'httpclient5'
}
implementation 'org.slf4j:slf4j-api:1.7.36'
Android application preferably uses OkHttp HTTP client so Apache HTTP 5 library can be excluded.
To be able to connect to the Internet Computer Canister set uses-permission in project AndroidManifest.xml descriptor.
<uses-permission android:name="android.permission.INTERNET"/>

Use IC4J with Kotlin

AndroidHelloWord sample application demonstrates use or QueryBuilder and UpdateBuilder in Kotlin Android project. Project properties ic.location and ic.canister are stored in strings.xml file.
MainActivity.kt has a simple code for QUERY and UPDATE invocation of the Canister code main.mo.
main.mo
actor {
stable var name = "Me";
public func greet(value : Text) : async Text {
name := value;
return "Hello, " # name # "!";
};
public shared query func peek() : async Text {
return name;
};
};
Using QueryBuilder in Kotlin.
MainActivity.kt
val url: String = getString(R.string.url)
val canister: String = getString(R.string.canister)
val identity: Identity = AnonymousIdentity()
val transport: ReplicaTransport =
ReplicaOkHttpTransport.create(url)
val agent: Agent = AgentBuilder().identity(identity).transport(transport).build()
val buf = IDLArgs.create(ArrayList<IDLValue>()).toBytes()
val principal = Principal.fromString(canister);
val response = QueryBuilder.create(
agent,
principal,
"peek"
).arg(buf).call()
val output = response.get()
val outArgs = IDLArgs.fromBytes(output)
name = outArgs.args[0].getValue<String>()
Using UpdateBuilder in Kotlin.
MainActivity.kt
val url : String = getString(R.string.url)
val canister : String = getString(R.string.canister)
val identity : Identity = AnonymousIdentity()
val transport: ReplicaTransport =
ReplicaOkHttpTransport.create(url)
val agent: Agent = AgentBuilder().identity(identity).transport(transport).build()
val arg : IDLValue = IDLValue.create(message)
var args : ArrayList<IDLValue> = ArrayList<IDLValue>()
args.add(arg)
val buf = IDLArgs.create(args).toBytes()
val response = UpdateBuilder.create(
agent,
Principal.fromString(canister),
"greet"
).arg(buf).callAndWait(Waiter.create(60, 5))
val output = response.get()
val outArgs = IDLArgs.fromBytes(output)
val outputMessage = outArgs.args[0].getValue<String>()
Last modified 3mo ago
Copy link