スキップしてメイン コンテンツに移動

Evernote SDK for Androidを新しいバージョン1.0.2へ移行に伴い

昨年2012年の10月くらいのバージョンが、
  • Evernote SDK for Android version 0.2.3
  • Evernote API version 1.22
で、アプリの開発を進めてきたわけですが、既知の問題があり、
Known Issues
------------
The current version of the SDK performs OAuth network requests on the main thread, resulting in a NetworkOnMainThreadException when the targetSDK is set to 11 or higher.
 Android 2.3.3以下あたりでログインできませんでした。確かコミュニティで自分で直せ的に書かれて気がしますし、ソースを見たら大した問題じゃなかった気がしますし、確認に使ってるエミュレータは4.0.3なので、Evernote SDKがそのうちバージョンアップされるか、されなかったらそのうち自分で修正してやろうと思ってました。そろそろアプリをテストするしどうなったかGithubを見たら、新しいのがリリースされてました。
・evernote/evernote-sdk-android · GitHub
https://github.com/evernote/evernote-sdk-android
  • Evernote SDK for Android version 1.0.2
  • Evernote API version 1.23
「Known Issues」の表記も消えているので、修正されたのでしょう(まだ確認してません)
今まで当たり前のようにEvernoteのsandboxを使ってデバッグしてましたが...
あれ...どうやって導入したっけと忘れており、ハマってしまいました。というか、このgithubのReadMeに従ってやっておらず、旧式のjarファイルを突っ込む形でやってたので、一筋縄にいきませんでした。

同じことを繰り返さないよう、まあReadMeに書いてあるんですけど、メモしておきます。

  1. Githubから一式ダウンロード
  2. Eclipse上で新規プロジェクトの作成で、既存のコードを使ってプロジェクト生成
  3. Libraryディレクトリを指定して終了 ※1
  4. Evernote SDKを使うAndroidプロジェクト上で右クリック > プロパティ
  5. 表示されたプロパティのAndroidを選択
  6. [ライブラリ]の追加ボタンで、2~3で生成したプロジェクトを指定
  7. あとは、プロジェクトをクリーンしてビルドみたいなことを ※2
※1 ActionBarSherlockを入れてる場合は、プロジェクト名がかぶるので、適当にディレクトリ名をリネームして導入すればおk

※2 ビルドがうまくいってないとエラーが出たりします。503エラーとか出てファッ!?ってなりました。

バグフィックス程度のバージョンアップだったら良かったですが....
微妙に認証まわりが変更されてて地味にコードの修正が必要となりました。まぁでも、上記バグフィックスと、認証のブラウザが勝手にアプリ埋め込みで起動してくれるので、やる価値はあると思います。以前のバージョンでは、端末の標準ブラウザを勝手に起動して(アプリ外で認証し)、認証が終わったブラウザはそのまま放置みたいな仕様でしたから。アプリ内に勝手に埋め込みブラウザを立ち上げて、認証後は消してくれるので動作が実にスマートです。

以下、サンプルソースを基に変更点を。基本的には、
  1. 認証開始
  2. (アプリ内に勝手に起動する)ブラウザで認証してもらう
  3. 戻りはonResume
という流れは変らないですが、認証開始時等でSDKからonActivityResultに入ってくるようになりました。

switch (requestCode) {
  //Update UI when oauth activity returns result
  case EvernoteSession.REQUEST_CODE_OAUTH:
    if (resultCode == Activity.RESULT_OK) {
      updateUi();
    }
    break;
}

のようにrequestCodeを捌いてやる必要がありますが、認証の戻りはonResumeのようです..
また、セッションの生成はgetPreferencesの設定を基に行われてましたが、Activity等のContextに変更され、new EvernoteSessionしていた箇所を

mEvernoteSession = EvernoteSession.init(this, CONSUMER_KEY, CONSUMER_SECRET, EVERNOTE_HOST, null);

のようにstaticメソッドで初期化するようになったみたいです。ちなみに、EVERNOTE_HOSTは

private static final String EVERNOTE_HOST = EvernoteSession.HOST_SANDBOX;

のように固定の定義値を使えるようになりました。

[ログイン]
mEvernoteSession.authenticate(this);
[ログアウト]
mEvernoteSession.logOut(getApplicationContext());

以前のバージョンのサンプルで、setupSession()内に、
    ApplicationInfo info =
      new ApplicationInfo(CONSUMER_KEY, CONSUMER_SECRET, EVERNOTE_HOST,
          APP_NAME, APP_VERSION);

onResume内の
    // Complete the Evernote authentication process if necessary
    if (!session.completeAuthentication(getPreferencesForAuthData())) {
      // We only want to do this when we're resuming after authentication...
      Toast.makeText(this, "Evernote login failed", Toast.LENGTH_LONG).show();
    }
は丸ごと必要ないみたいです。

こんな感じでしょうか。あと、サンプルではノートや画像の処理でAsyncTaskを使うように修正されてましたが、詳しくは見てません。

今回の移行が面倒だったのは旧式のJarファイルをlibsディレクトリに入れてやってたのが問題で、

import org.apache.thrift.TException;
import org.apache.thrift.transport.TTransportException;

import com.evernote.thrift.TException;
import com.evernote.thrift.transport.TTransportException;


のような変更やTTransportExceptionの追加が必要だったためでした。

コメント

このブログの人気の投稿

Javaでprivateなfieldやmethodにアクセスする

JUnitでテストしてると、privateなフィールドにアクセスして、値を参照したりセットしたりしたくなるわけですが、よく使うのでメモしておきます。 例えば、次のような対象のクラスがあるとします。 public class ParentClass { private String hoge = "ParentClass!!"; public void dispMsg() { System.out.println("dispMsg:" + hoge); } private void privateDispMsg(String msg) { System.out.println("dispMsg:" + msg); } }

GolangでWindows GUIアプリケーション

GUIアプリ作成の前提 社内ツールとしてexeで配布 開発環境はGoLandを使う 社内ツールとしてexeを配布ということであれば、Visual StudioでC#による開発だと思います。しかしながら、Go言語を習得したいのと、GoLandの補完機能が便利で、Android Studio使っていたこともあり、とっつきやすいという点からGo縛りでGUIアプリケーションを考えたいと思います。 lxn/walk Windows application library kit for Go. Windows向けしか考えていないので、まずこのライブラリなのですが、ボタンやコンボボックスが思ったように並ばなかったり、手軽にイメージボタンを配置したりなど、簡単にレイアウトを変更できない課題に直面しました。レイアウト作成だけで時間を取られてしまいます。そう言えば、Androidアプリ開発のときは、XMLでデザイン部分を切り離してたのを思い出して、今回の調査の運びとなりました。 fyne-io/fyne Cross platform native GUIs designed for Go based on Material Design. Supports: Linux, macOS, Windows, BSD, iOS and Android. walkと比べると、クロスプラットフォームで作成できるのですが、こちらもコードの中にデザインを書いていく形でした。 therecipe/qt therecipe/qt allows you to write Qt applications entirely in Go or JavaScript. Qt Creatorなるものがあるようで、デザイン部分を切り離せる印象はあるものの、最新のPCでもビルドに時間がかかるようで、学習コストもかかるという記事を見かけて断念しました。 どうしたものかとツイートしましたら、下記のようにご助言をいただいた。 同じ課題に対し色々試した結果、PWAのフルキャッシュドに落ち着いた。中身はGo+WASMで。 https://t.co/e60whDTV16 — のぼのぼ📡 (@nobonobo) July 21, 2020 PWA 早速調べてみました。Googleが進めているプロジェクトで、ネイティブアプリのよ

Eclipseの高速化メモ

Eclipseが重いと一言に言っても、いろいろな工程での話があると思いますが、過去記事のなども含めてこの記事にピックアップしておきたいと思います。以下はWindows環境での話です。