« android-aptとは何か | トップページ | Eclipse4.4(Luna)以降ではショートカットキー一発でラムダ式に変換できる »

2015/07/10

AndroidプロジェクトにActiveAndroidを導入する

はじめに注意事項:

  • github上の溜まっているIssueやPull request、最終コミット日時などを見てみると明らかな通り、現在開発は停滞しているようです。導入するにあたっては(性能や機能比較だけでなく)このような状況も踏まえて、他プロダクトを含め検討した方がよいでしょう。
    • 別に私だけが難癖つけているわけではなく、例えば実際に使用しているらしいクックパッド開発者も同様の主張をしています

      ActiveAndroidの開発は停滞しており、issueやpull-requestは放置されていますから、ActiveAndroidの未来は明るくなさそうです。
      将来的にローカルのデータベースを使った機能を拡充したいことを考えると、ORMについてはそろそろ刷新する必要があると感じています。

    • ActiveAndroidの作者はより新しいOllieというORMの開発も行っているそうで、これもActiveAndroidの将来性の無さを感じさせます。(ちなみにOllieの開発も盛んではない模様…)
  • 私自身はかなり初期の評価段階で採用しないことを決めたので、ここに記載した以外の問題もあるかと思います。
ここで説明する導入の手順概要:
  1. ActiveAndroidのソースをcheckoutしてビルドする
  2. MavenローカルリポジトリにビルドしたActiveAndroidをインストールする
  3. Androidプロジェクト(gradle形式プロジェクト)に依存関係を加え使用できるようにする

ActiveAndroidのソースをcheckoutしてビルド、インストールする

公式モジュールが配布されているリポジトリがどこにあるかわからないので自前でビルドします。
Mavenのバージョン3.1.1をダウンロードして使用できるようにセットアップしてください。
これより古いバージョンではビルドできません。新しいバージョン(3.2.5以降?)でも問題が発生します。(補足を後述)

$ git checkout https://github.com/pardom/ActiveAndroid.git
$ cd ActiveAndroid
$ mvn clean source:jar javadoc:jar install -Dmaven.test.skip=true -Dandroid.sdk.path=$ANDROID_SDK_HOME

特定のバージョン(API 16)のシステムイメージに依存しています。ビルドに失敗する場合はその旨のエラーが出力されると思いますので、API16のSDK Platformをインストールしてください。

自分のプロジェクトからActiveAndroidを参照する

/build.gradle の allprojects > repositories を編集し、ローカルリポジトリを参照先に加えます(参考)。


allprojects {
    repositories {
        (略)
        mavenLocal()
    }
}

次に、/app/build.propertiesに依存関係を追加します。(参考)。
もしAndroid Studioが生成する/app/build.gradle をそのまま使用しているならば、 com.android.support:support-v4 が依存関係に追加されています。ActiveAndroidが依存している com.google.android:support-v4 とこれは競合するので除外しておきます。


dependencies {
    (略)
    compile ('com.activeandroid:activeandroid:3.1-SNAPSHOT') {
        exclude module: 'support-v4'
    }
}

以上でActiveAndroidが利用できるようになります。

補足: 最新バージョンのMavenでActiveAndroidをビルドできるようにする

Maven3.3.3でビルドすると以下の例外が出て失敗します。


Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/aether/spi/connector/Transfer$State
    at org.eclipse.aether.connector.wagon.WagonRepositoryConnector$GetTask.run(WagonRepositoryConnector.java:608)
    at org.eclipse.aether.util.concurrency.RunnableErrorForwarder$1.run(RunnableErrorForwarder.java:67)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassNotFoundException: org.eclipse.aether.spi.connector.Transfer$State
    at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:50)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.unsynchronizedLoadClass(ClassRealm.java:271)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:247)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:239)
    ... 5 more

これは利用しているandroid-maven-pluginというMavenプラグインのバージョンが古いのが原因らしいので、新しい物を使用するように設定変更すれば最新Mavenでもビルドできるようになります。
以下のPull requestをmergeしてください。

« android-aptとは何か | トップページ | Eclipse4.4(Luna)以降ではショートカットキー一発でラムダ式に変換できる »

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: AndroidプロジェクトにActiveAndroidを導入する:

« android-aptとは何か | トップページ | Eclipse4.4(Luna)以降ではショートカットキー一発でラムダ式に変換できる »

other sites

  • follow us in feedly
  • github
  • stackoverflow

ソフトウェアエンジニアとして影響を受けた書籍

  • Christain Bauer: HIBERNATE イン アクション

    Christain Bauer: HIBERNATE イン アクション
    理論と実践が双方とも素晴らしい製品であるHibernate。本書はそのプロダクトを書名に冠していますが、Hibernateを使うつもりがなく、ORマッピングの解説書として読むにしても十分な良書です。Second EditionとしてJava Persistence With Hibernateという書籍も出版されていますが、残念ながら現在のところ 和訳はされていません。-インアクションは2.xの、Java Persistence-は3.1の頃のものなので、最新版とはちょっと違うところもあることに注意。 (★★★★★)

  • アンドリュー・S・タネンバウム: 分散システム 原理とパラダイム 第2版

    アンドリュー・S・タネンバウム: 分散システム 原理とパラダイム 第2版
    クライアント/サーバシステムを構築する上で必要となる知識が総論されてます。Web技術者も、フレームワーク部分を開発するのであれば必読。 (★★★★★)

  • Joel Spolsky∥著: ジョエル・オン・ソフトウェア

    Joel Spolsky∥著: ジョエル・オン・ソフトウェア
    前述の書籍「ソフトウエア開発プロフェッショナル」をより砕いたもの、という感じでしょうか。 前書きではプログラマでなくSE向けの本のように書かれているが、プログラマが読んでも面白い本であると思われます。 SEになった新人(あるいはそういう会社に入る/入りたての人)にとっては、これからどういったことが仕事を遂行していく上で起こりえるのか、どのように考えて行なっていけばいいのか決定する助けになると思います。 元は″Joel on Software″というブログの記事で、web上でも一部日本語で読めます。 http://japanese.joelonsoftware.com/ (★★★)

  • ドナルド・C・ゴース,ジェラルド・M・ワインバーグ: ライト、ついてますか

    ドナルド・C・ゴース,ジェラルド・M・ワインバーグ: ライト、ついてますか
    問題解決(一昔前のの流行語で言うところの『ソリューション』)能力は、システムエンジニアのスキルとして備えるべきもののうちのひとつです。しかし、これは難しい。学校で出されるテストと違い、唯一の、(問題提出者が想定している)解を求めるだけが「問題解決」では無いからです。そもそも、何が問題なのか、それは本当に問題なのか、それは本当に解決すべき問題なのか、その問題解決方法は正しいのか、などを解決しなければ、「その解は正しいのか」に辿りつくことができません。この本の最も良いところのひとつは、本があまり厚くないこと。すぐに読めるし、何回も読み返す気になるでしょう。 (★★★★★)

  • スティーブ・マコネル: ソフトウエア開発プロフェッショナル

    スティーブ・マコネル: ソフトウエア開発プロフェッショナル
    コードコンプリートで有名なスティーブマコネルの著書。新人SEに読んで欲しい。個人として業界の中でどうあるべきか、組織としてどうあるべきか、SEのプロ意識とは?SEの心構え概論、といったところでしょうか。また、業界における資格の重要性についても説かれています。この業界では資格が特に軽んじられる傾向がありますが、この傾向はどんな弊害をもたらすのか、将来的にこの業界は資格に対してどのような姿勢で臨んでいくべきなのか。日経BP社では(他の出版社もだが)最近、似たような類いのあまり面白くない書籍が乱出版されていますが、この本は別格だと思うので安心して購入して欲しいと思います。 (★★★★★)

無料ブログはココログ