リフレクション+ try catchを使用してsdkを実装し、依存ライブラリをオンデマンドで導入します
Android SDK開発の過程で、SDK内に他のサードパーティSDKライブラリを導入することは非常に可能です。たとえば、GoogleやFacebookなどのSDKがSDK開発プロセスに含まれる場合があります。しかし、アクセス側がGoogleログインを含むSDKにのみアクセスしたい場合はどうなりますか?gradleはGoogleのライブラリのみに依存し、Facebookには依存できませんか?この記事では、リフレクション+ try catchを使用して、新しいモジュールを作成したりコードの分離を検討したりすることなく、オンデマンドアクセスを実現します。
SDKコードでサードパーティのSDKを使用する場合は、次の処理を実行します。
- 元のコード:
Intent googleSignInIntent = GoogleSignIn.getClient(mLoginActivity, mSignInOption).getSignInIntent();
if (googleSignInIntent != null)
{
mLoginActivity.startActivityForResult(googleSignInIntent, requestCode);
}
- 処理されたコード:
try
{
Class classGoogleSignIn = Class.forName("com.google.android.gms.auth.api.signin.GoogleSignIn");
Intent googleSignInIntent = GoogleSignIn.getClient(mLoginActivity, mSignInOption).getSignInIntent();
if (googleSignInIntent != null)
{
mLoginActivity.startActivityForResult(googleSignInIntent, requestCode);
}
}
catch (Exception e)
{
e.printStackTrace();
}
つまり、サードパーティのSDKコードを使用する前にクラスリフレクションのコードを追加し、それをtry + catchでラップします。パラメータは、サードパーティのSDKの完全なクラス名(パッケージ名+クラス名)です。
Class classGoogleSignIn = Class.forName("xxx");
このようにして、アクセスパーティはアクセスしたいライブラリを直接引用し、引用されていないクラスエラーがキャッチによって受信され、クラッシュしません。これは簡単で便利です〜