はじめに注意事項:
- github上の溜まっているIssueやPull request、最終コミット日時などを見てみると明らかな通り、現在開発は停滞しているようです。導入するにあたっては(性能や機能比較だけでなく)このような状況も踏まえて、他プロダクトを含め検討した方がよいでしょう。
- 別に私だけが難癖つけているわけではなく、例えば実際に使用しているらしいクックパッド開発者も同様の主張をしています。
ActiveAndroidの開発は停滞しており、issueやpull-requestは放置されていますから、ActiveAndroidの未来は明るくなさそうです。
将来的にローカルのデータベースを使った機能を拡充したいことを考えると、ORMについてはそろそろ刷新する必要があると感じています。
- ActiveAndroidの作者はより新しいOllieというORMの開発も行っているそうで、これもActiveAndroidの将来性の無さを感じさせます。(ちなみにOllieの開発も盛んではない模様…)
- 私自身はかなり初期の評価段階で採用しないことを決めたので、ここに記載した以外の問題もあるかと思います。
ここで説明する導入の手順概要:
- ActiveAndroidのソースをcheckoutしてビルドする
- MavenローカルリポジトリにビルドしたActiveAndroidをインストールする
- 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してください。
最近のコメント