Git Product home page Git Product logo

iroha-android's Introduction

This repository is not maintained anymore. To create awesome Android apps on Iroha, please use Java library. It is compatable with Android and is carefully maintained.

Iroha Android bindings

The library, in essence, is a set of Java interfaces and binary libraries compiled for different architectures. Supported architectures are arm, x86, x86_64.

build status Codacy Badge

Where to Get

There are two ways to get Iroha library for Android:

  1. Grab via Gradle (see details in the section Importing the Library from jcenter)

    implementation 'jp.co.soramitsu.iroha.android:iroha-android-bindings:+'
    
  2. Compile the library on your own.

Both options are described in the following sections.

Manual Build

The guide was tested on systems running Ubuntu 16.04 and macOS.

Prerequisites

Android NDK
Please download and unpack NDK to any suitable folder.

automake

sudo apt install automake
automake --version
# automake (GNU automake) 1.15

bison

sudo apt install bison
bison --version
# bison (GNU Bison) 3.0.4

cmake

Minimum required version is 3.8, but we recommend to install the latest available version (3.10.3 at the moment).

Since Ubuntu repositories contain unsuitable version of cmake, you need to install the new one manually. Here is how to build and install cmake from sources.

wget https://cmake.org/files/v3.10/cmake-3.10.3.tar.gz
tar -xvzf cmake-3.10.3.tar.gz
cd cmake-3.10.3/
./configure
make
sudo make install
cmake --version
# cmake version 3.10.3

Building the Library

All you need now is to download build script android-build.sh to any empty folder and launch it there.

Launch parameters are listed in the table below.

Position Required Parameter name Description Possible Values
1 Yes Platform name Name of the target platform for binary part of the library. arm64-v8a, armeabi-v7a armeabi, x86, x86_64
2 Yes *Android API Level API level supported by your NDK. See the link under the table for details. 27 for android-ndk-r16b
3 Yes Android NDK Path Full path to unpacked NDK. Please ensure that path does not contain spaces. /home/user/lib/android-ndk-r16b
4 Yes Java Package Name Package name that will be used for Java interfaces generation. Note that the binary also depends on chosen package name. jp.co.soramitsu.iroha.android
5 No Build Type Defines build mode of binary part of the library. Release is the default option. Debug or Release

Android API levels

Please use the same root part of Java package name for library build as you use for your Android project. For example, your project is located in a package called com.mycompany.androidapp, so please consider to build the library in a package, which name starts with com.mycompany.androidapp (e.g. com.mycompany.androidapp.iroha).

A couple of launch commands examples:

# build Java bindings and binary library for arm64-v8a in Release mode
./android-build.sh arm64-v8a 27 /home/user/lib/android-ndk-r16b com.mycompany.iroha

# build Java bindings and binary library for x86 in Debug mode
./android-build.sh x86 27 /home/user/lib/android-ndk-r16b com.mycompany.iroha Debug

Build artefacts will be collected in lib directory near the script android-build.sh. There will be two files - an archive bindings.zip and libirohajava.so.

How to Use/Import

Importing the Library from jcenter

The easiest way to use Irohalib for Android is to import the library dependency from jcenter.

All you need to do is a simple set of four steps:

  1. Add to your build.gradle file the following line:

    implementation 'jp.co.soramitsu.iroha.android:iroha-android-bindings:+'
    
  2. Copy the latest version of *.proto files from develop branch of Iroha [repository] into app/src/main/proto/ folder inside your project in Android Studio.

    The resulting directory structure should look like as follows:

    app
    └── src
        └── main
            └── proto
                ├── google
                │   └── protobuf
                │       └── empty.proto
                ├── block.proto
                ├── commands.proto
                ├── endpoint.proto
                ├── loader.proto
                ├── ordering.proto
                ├── primitive.proto
                ├── proposal.proto
                ├── queries.proto
                ├── responses.proto
                └── yac.proto
    
  3. Create additional directories app/src/main/proto/google/protobuf/ and place there a file called empty.proto with the following contents:

syntax = "proto3";

package google.protobuf;

option java_package = "com.google.protobuf";
option java_outer_classname = "EmptyProto";
option java_multiple_files = true;

message Empty {
}
  1. Add protobuf and grpc dependecies and protobuf configuration block into your buld.gradle file.
apply plugin: 'com.google.protobuf' 

dependencies {

  implementation 'com.google.protobuf:protobuf-lite:3.0.1'
  implementation 'io.grpc:grpc-core:1.8.0'
  implementation 'io.grpc:grpc-stub:1.8.0'
  implementation 'io.grpc:grpc-okhttp:1.8.0'
  implementation('io.grpc:grpc-protobuf-lite:1.8.0') {
  // Otherwise Android compile will complain "Multiple dex files define ..."
  exclude module: "protobuf-lite"
}

protobuf {
        protoc {
            artifact = 'com.google.protobuf:protoc:3.5.1-1'
        }
        plugins {
            javalite {
                artifact = "com.google.protobuf:protoc-gen-javalite:3.0.0"
            }
            grpc {
                artifact = 'io.grpc:protoc-gen-grpc-java:1.10.0'
            }
        }
        generateProtoTasks {
            all().each { task ->
                task.plugins {
                    javalite {}
                    grpc {
                        // Options added to --grpc_out
                        option 'lite'
                        option 'generate_equals=true'
                    }
                }
            }
        }
    }

How to Use Manually Built Library

  1. Create directory structure inside your Android project according to the package name of build library. Put there all the .java files from bindings.zip archive. For example, the path could be app/src/main/java/com/mycompany/iroha if you built the library with com.mycompany.iroha package name.

  2. Create directory app/src/main/jniLibs/<platform> where <platform> is the name of target platform (e.g. arm64-v8a). Put there libirohajava.so. Repeat this step for all required platforms (in this case you need to build the library for each platform).

  3. Repeat steps 2-4 from the previous section [Importing the Library from jcenter].

    Example Code

    Explore sample package to view sample application.

Authors

Bulat Mukhutdinov

Ali Abdulmadzhidov

License

Copyright 2018 Soramitsu Co., Ltd.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

iroha-android's People

Contributors

bakhtin avatar bulatmukhutdinov avatar kobaken0029 avatar liralemur avatar mrzizik avatar ryjones avatar takemiyamakoto 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

iroha-android's Issues

iroha-android sample app - missing module?

Hi,

As I am trying to understand how the sample iroha-android app works I have come across the following:

in SendFragment.java there is the following import statement:

import jp.co.soramitsu.iroha.android.sample.databinding.FragmentSendBinding;

I cannot find FragementSendBinding

Where is it located?

Thanks for your help,

Alex

OSSに向けての準備

概要

OSSにするために必要な準備をする。

項目

  • README.mdの完成
  • LICENSEの追加
  • JavaDocの作成(クラスやメソッド等にJavaDocが記述されているか確認)

*.proto files structure different with README - No implementation found for long jp.co.soramitsu.iroha.android.irohaJNI.new_ModelCrypto()

I'm implement Iroha into my Android project with the first way:

implementation 'jp.co.soramitsu.iroha.android:iroha-android-bindings:+'

But where to copy *.proto files from? From this repo: iroha-android-sample/src/main/proto ?

Copy the latest version of *.proto files from develop branch of Iroha [repository] into app/src/main/proto/ folder inside your project in Android Studio.

Also the *.proto files structure in README is different from iroha-android-sample/src/main/proto structure.

Also on include *.proto from iroha-android-sample/src/main/proto I got this error:

E/htruong.irohat: No implementation found for long jp.co.soramitsu.iroha.android.irohaJNI.new_ModelCrypto() (tried Java_jp_co_soramitsu_iroha_android_irohaJNI_new_1ModelCrypto and Java_jp_co_soramitsu_iroha_android_irohaJNI_new_1ModelCrypto__)
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: com.example.nguyenmanhtruong.irohatx, PID: 3476
                  java.lang.UnsatisfiedLinkError: No implementation found for long jp.co.soramitsu.iroha.android.irohaJNI.new_ModelCrypto() (tried Java_jp_co_soramitsu_iroha_android_irohaJNI_new_1ModelCrypto and Java_jp_co_soramitsu_iroha_android_irohaJNI_new_1ModelCrypto__)
                      at jp.co.soramitsu.iroha.android.irohaJNI.new_ModelCrypto(Native Method)
                      at jp.co.soramitsu.iroha.android.ModelCrypto.<init>(ModelCrypto.java:51)
                      at com.example.nguyenmanhtruong.irohatx.IrohaConnection.<init>(IrohaConnection.kt:16)
                      at com.example.nguyenmanhtruong.irohatx.MainActivity.onCreate(MainActivity.kt:13)
                      at android.app.Activity.performCreate(Activity.java:7136)
                      at android.app.Activity.performCreate(Activity.java:7127)
                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
                      at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
                      at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
                      at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
                      at android.os.Handler.dispatchMessage(Handler.java:106)
                      at android.os.Looper.loop(Looper.java:193)
                      at android.app.ActivityThread.main(ActivityThread.java:6669)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

app crash in android api 16

i'm trying to control iroha in Android POS device. this device support android 4.4.4 from api 16 to 19. but i tested sample(develop version) in android studio, api level 16, it crashed when i started app. how can i apply iroha to android api level 16?

CommandService Stateless invalid tx - Wrongly formed creator_account_id, passed value: ''

I'm trying to create an Android app with Hyperledger Iroha. So first user will type Username and Account details to register an account.

enter image description here

Here is my IrohaConnection.kt file to form a request to send to Iroha server. Basically, I just copy and port from Java to Kotlin from this iroha-android-sample repo.

This is the message I get from Iroha console:

[2018-08-08 01:57:17.221326506][th:35][warning] CommandService Stateless invalid tx: Transaction: [[Transaction should contain at least one command Wrongly formed creator_account_id, passed value: ''. Field should match regex '[a-z_0-9]{1,32}\@([a-zA-Z]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)*[a-zA-Z]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?' bad timestamp: too old, timestamp: 0, now: 1533693437216 Quorum should be within range (0, 128] ]]
, hash: 2526b8c49021a34172deb7255509e34b45822c07c822808176498bec1f0cb1fe
[2018-08-08 01:57:17.270612531][th:38][warning] CommandService Stateless invalid tx: Transaction: [[Transaction should contain at least one command Wrongly formed creator_account_id, passed value: ''. Field should match regex '[a-z_0-9]{1,32}\@([a-zA-Z]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)*[a-zA-Z]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?' bad timestamp: too old, timestamp: 0, now: 1533693437270 Quorum should be within range (0, 128] ]]
, hash: 2526b8c49021a34172deb7255509e34b45822c07c822808176498bec1f0cb1fe
[2018-08-08 01:57:18.274183120][th:35][warning] CommandService StatusStream request processing timeout, hash: 7e184190581756a5d7192e9491b4f9bf9a33f077ecb0044782a5057aa8212eea

It's said that:

  • CommandService Stateless invalid tx
  • Transaction should contain at least one command
  • Wrongly formed creator_account_id, passed value: ''
  • bad timestamp: too old, timestamp: 0, now: 1533693437270
  • Quorum should be within range (0, 128] ]]

I'm not really understand how Iroha receive variables but when debug I see:

enter image description here

createdTime_ , creatorAccountId_, quorum_ these 3 vars has value which is kind of what Iroha ask for, but somehow the server not get it.

Another weird things is, on this sample Iroha-android repo: build.gradle:

release {
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        resValue "string", "iroha_url", "199.247.26.56"
        resValue "integer", "iroha_port", "50051"
    }
    debug {
        resValue "string", "iroha_url", "199.247.26.56"
        resValue "integer", "iroha_port", "50051"
    }

You see those IP? When using this default IP 199.247.26.56, the app work, but when I change to my local IP, which is the same PC - my own Iroha deployment, it's not. I think that on this IP 199.247.26.56, you guys have deployed Iroha correctly.

So on that though, I have deploy Iroha following these:

But still the same error:

  • CommandService Stateless invalid tx
  • Transaction should contain at least one command
  • Wrongly formed creator_account_id, passed value: ''
  • bad timestamp: too old, timestamp: 0, now: 1533693437270
  • Quorum should be within range (0, 128] ]]

Open IrohaAndroid Library to Bintray

概要

Bintrayにライブラリをアップロードする。

コメント

BintrayへのアップロードのためのAPIキーが必要。
Bintray経由でjCenterに登録。

App crashes on Android 6.0

The issue

Can not run android application on Android 6.0 (crash in runtime), but it works correctly on Android 5.0

Environment

Android Nexus, Android 6.0

Steps to reproduce

  1. Clone the repo
  2. Run the application on Android 6.0

Observed result

App mingles with screen and Android return back to launcher window

Expected result

App shows registration screen

Stacketrace from unit test:


java.io.IOException: Error while finalizing cipher
at javax.crypto.CipherInputStream.fillBuffer(CipherInputStream.java:104)
at javax.crypto.CipherInputStream.read(CipherInputStream.java:130)
at io.soramitsu.irohaandroid.security.KeyStoreManager.decrypt(KeyStoreManager.java:172)
at io.soramitsu.iroha.CipherTest.testDecryptionOnEmptyString(CipherTest.java:21)
at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:214)
at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:199)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:555)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1879)
Caused by: javax.crypto.IllegalBlockSizeException
at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineDoFinal(AndroidKeyStoreCipherSpiBase.java:486)
at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineDoFinal(AndroidKeyStoreCipherSpiBase.java:498)
at javax.crypto.Cipher.doFinal(Cipher.java:1476)
at javax.crypto.CipherInputStream.fillBuffer(CipherInputStream.java:102)
... 15 more
Caused by: android.security.KeyStoreException: Unknown error
at android.security.KeyStore.getKeyStoreException(KeyStore.java:632)
at android.security.keystore.KeyStoreCryptoOperationChunkedStreamer.doFinal(KeyStoreCryptoOperationChunkedStreamer.java:224)
at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineDoFinal(AndroidKeyStoreCipherSpiBase.java:473)
... 18 more

.jar file release

For xamarin projects, it would help to have a .jar file under the releases.

Can NOT register account

Description

After uninstalling the application on Android that has been registered once, I try to reinstall and register the account. However it had failed and returned to the registration screen.

Actually, the registration process is successful, and account information can be obtained from the server. This is a local problem.

Cause

The cause is that specified file already existed and file writing did not start. Because FileManager check the existence of this file in writeToFile.

Solution

The solution is to delete the specified directory and to re-save it in Account#save or KeyPair#save.

Sample app crashed on ZTE Blade v7 lite

Hello,
I tried run app on ZTE Blade v7 Lite and got crash on native library initialization, on emulator it works fine.

Log:
10-13 12:47:13.379 8359-8359/jp.co.soramitsu.iroha.android.sample E/AndroidRuntime: FATAL EXCEPTION: main
Process: jp.co.soramitsu.iroha.android.sample, PID: 8359
java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "__aeabi_atexit" referenced by "/data/app/jp.co.soramitsu.iroha.android.sample-1/lib/arm/libirohajava.so"...
at java.lang.Runtime.loadLibrary(Runtime.java:372)
at java.lang.System.loadLibrary(System.java:1076)
at jp.co.soramitsu.iroha.android.sample.SampleApplication.(SampleApplication.java:17)
at java.lang.Class.newInstance(Native Method)
at android.app.Instrumentation.newApplication(Instrumentation.java:1001)
at android.app.Instrumentation.newApplication(Instrumentation.java:986)
at android.app.LoadedApk.makeApplication(LoadedApk.java:582)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4932)
at android.app.ActivityThread.access$1600(ActivityThread.java:175)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1549)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:207)
at android.app.ActivityThread.main(ActivityThread.java:5728)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)

Add Copyright into all source files

Add copyright to the top of all files.

/*
Copyright Soramitsu Co., Ltd. 2016 All Rights Reserved.
http://soramitsu.co.jp

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

         http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

APIとの連携

概要

APIとの紐付けをする。

項目

  • NetworkUtilのENDPOINT_URLを対応させる。

Introduce CI

概要

CIを導入したい。
他のプロジェクトでCIしてたらそれを参考に。

Can not share money beetwen two devices

The issue

From physical device scan QR code of app on emulator and make a transfer. However even after half an hour app on emulator hasn't receive the money

Environment

Nexus 7, Android 4.4.
Genymotion emulator, Android 5.0

Steps to reproduce

  1. Run application on both devices
  2. Register users with two different names
  3. Take a physical device and sent money to app on emulator
  4. Get a confirmation dialog that;s transfer pass well
  5. Wait some period of time to let devices sync up (up to 30 minutes)

Observed behavior

Amount of money on both devices remain the same

Expected behavior

In a few minutes amount of money on physical device reduce on value equal to value in transaction and amount of money on emulator increase on the value equal to value in transaction

Asset payload

Hi I am new to Iroha hyperledger.

In my android app integrated with Bigchaindb blockchain, I can include a number of different data structures as asset payload

What are the limitations regarding asset payload in the Iroha blockchain?

I looked at the Iroha-androd sample application. I could not find an example of asset creation and transaction creation and transmission. Could you please point me in the right direction?

Is the Iroha-android sample application broken?

Thanks,

Alex Donnini

Transaction meet "CommandService Stateless invalid tx" warining message

Hi, I am new in both android app developing and hyperledger iroha. I am now designing an app with hyperledger iroha. When I was sending transaction request through the app to iroha server, the server-side showed below message:
[2018-11-30 05:46:16.131450474][th:118][warning] CommandService Stateless invalid tx: Signature: [[Wrong signature [073920b66487c3e6196db291cba7815236c24f9629a82a785bf9c852a79befbc13382e2939797b4683d68e88cf0adb2c35908b02ef41c5da67cfac02649b0505;313a07e6384776ed95447710d15e59148473ccfc052a681317a72a69f2a49910] ]] Transaction: [[Transaction should contain at least one command Wrongly formed creator_account_id, passed value: ''. Field should match regex '[a-z_0-9]{1,32}\@([a-zA-Z]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)*[a-zA-Z]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?' bad timestamp: too old, timestamp: 0, now: 1543556776120 Quorum should be within range (0, 128] ]] , hash: 708713afdb215a7fdd1b3246ec662a3d992648dc262ca1d5360be94b6d75313b

The error returned from my app is "Error: java.lang.RuntimeException: Transaction failed " and without any other information.

The code transaction part in my app is simply copied from iroha-android-sample, i.e.

protected  Completable TransferAsset(String[] data){
    return Completable.create(emitter -> {
       long currentTime = System.currentTimeMillis();
       Keypair userKeys = crypto.convertFromExisting(PUB_KEY, PRIV_KEY);
       String username = "admin";

       UnsignedTx sendAssetTx = txBuilder.creatorAccountId(username + "@" + DOMAIN_ID)
               .createdTime(BigInteger.valueOf(currentTime))
               .transferAsset(username + "@" + DOMAIN_ID,
                       data[0] + "@" + DOMAIN_ID, "hkd#test", "initail", data[1])
               .build();

       protoTxHelper = new ModelProtoTransaction(sendAssetTx);
       ByteVector txblob = protoTxHelper.signAndAddSignature(userKeys).finish().blob();
       byte[] bsq = toByteArray(txblob);
       TransactionOuterClass.Transaction protoTx = null;

       try{
           protoTx = TransactionOuterClass.Transaction.parseFrom(bsq);
       }catch (InvalidProtocolBufferException e){
           emitter.onError(e);
       }

        CommandServiceGrpc.CommandServiceBlockingStub stub = CommandServiceGrpc.newBlockingStub(channel)
                .withDeadlineAfter(CONNECTION_TIMEOUT_SECONDS, TimeUnit.SECONDS);

       stub.torii(protoTx);

       if (!isTransactionSuccessful(stub, sendAssetTx)){
           emitter.onError(new RuntimeException("Transaction failed"));
       } else {
           emitter.onComplete();
       }

    });
}

I found same issue was reported by truongnmt but no one answered. Can anyone tell what is this issue and teach me how to solve it?

DaggerApplicationComponent

Hi there, trying to emulate the sample app, and Android Studio can't resolve the DaggerApplicationComponent. Any advice would be much appreciated, thank you.

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.