0
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Android 非公開APIの見分け方

Posted at

非公開APIとは

AndroidにはAPIの種類があります。
殆どの方が使用するのは、publicAPI(AndroidStudioで開発する際誰もが使用できるAPI)だと思います。
Android Code Serarch UserHandle#myUserId()を見てみるとMethodの上に@SystemApi@hideやらついています。

これらのAPIは普段3rdParty(GooglePlayからインストールするようなApp)では使用できないAPIになります。
じゃなぜこれの説明をするのって??
日々の業務の中でPre-inAppを作成しており、そのAppを配信化する事になりました。

しかし!!先ほど説明した非公開API(@SysteApi@hideがついているMethod)は使用しない方針で進める事になりました。
現状各Pre-inAppには大量の使っており、置き換えもしくは設計の見直しが必要になりました。

ということでまず非公開APIにも見分け方があるという事で今回はそちらを記載します。

なぜ見分け方を知る必要があるか??

Googleは非公開APIを見分けるToolを用意してくれています。veridex
しかし、なぜか出力されないAPIもあるという事に気が付き、自身でも見分け方を知っておく必要がありました。

見分け方1-APIのみに@SystemApi or @hideが付与

例:Android Code Serarch UserHandle#myUserId()

こちらは簡単です。APIの直下に付与されている場合、そのアノテーションが有効化されます。
SystemApiの場合は、@hide@SystemApiの2つが付与されSystemApiに識別されます。

hideApiは@hideのみが付与されhideApiに識別されます。

見分け方2-Classに@SystemApi or @hideが付与

例:VolumeInfo.java
Class自体にアノテーションが付与されている場合はClass全体が非公開APIと識別されます。
こちらは普段使用する方は殆どいないと思います。
もちろんAndroidStudio等で入力しても自動変換されず、buildすらできない状態になります。

見分け方3-Classに@SystemApi、APIに@hideが付与

Class全体はSystemApiですが、APIの上に@hideが付与されている場合はそちらが優先されます。

補足

他にも種類はありますが、殆どの非公開APIはこれでも網羅できます。
またSystemApiとhideの違いについてはAppをインストールする場所によって、利用可能か変わってきます。
Appをインストールするパーテーションという仕切りによって権限が変わり
system配下の場合hideApi, SystemApiも利用可能。product配下の場合SystemApiが利用可能になります。

最後に

もしこれからAppを作られる方は特別な理由がない限りはApp層のAppには非公開APIを使用しない事をお勧めします。
基本的にGoogle自体もhideApi, SystemApiの利用はお勧めしてません。

0
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?