0

Android での compileSdkVersion の使用に関する私の理解を確認するために、これを求めています。

Android sdk は、パス (Your sdk root)/Sdk/platforms/android-(sdk version) の下の各バージョンの実装を提供します。したがって、compileSdkVersion を 20 に設定し、Activity を拡張するクラスをコードに追加すると、 apk の構築 apk は、(あなたの SDK ルート)/Sdk/platforms/android-20/andriod.jar から取得した Activity.class 実装を使用してパッケージ化されます。

したがって、Google が android-22/android.jar のアクティビティ実装に「public void f1()」というメソッドを追加し、compileSdkVersion 22 でコードをコンパイルし、コードからメソッド f1() を呼び出しているとします。 Android バージョン 20 のデバイスでアプリを実行するには、.

質問 1 : メソッド f1() が Java レイヤー メソッドであり、C/C++ 実装を呼び出すものではない場合、デバイスで正しく動作しますか?

Android Studio で compileSdkVersion を 23 に設定して View.class ファイルを開くと、インポート リストに項目 'android.widget.ScrollBarDrawable' が表示されました。 android-23/android.jar ウィジェットフォルダー内にクラス「ScrollBarDrawable」を見つけることができませんでした(そして、このようなAndroid SDKには存在しない多くの実装に出くわしました)

質問 2 : apk がパッケージ化されると、apk ビルダーはどこから実装 android.widget.ScrollBarDrawable.class を取得しますか?

私の悪い英語でごめんなさい:(

4

1 に答える 1

2

apk をビルドした後、apk は (Your sdk root)/Sdk/platforms/android-20/andriod.jar から取得した Activity.class 実装を使用してパッケージ化されます

私はそれを次のように表現します:あなたのサブクラスは、そのJARファイルActivityに対してコンパイルされます。バイトコードにインライン化されている値などをActivity.class除いて、その JAR からは何も APK にパッケージ化されません。final static int

メソッド f1() が Java レイヤー メソッドであり、C/C++ 実装を呼び出すものではない場合、デバイスで正しく実行されますか?

いいえ、そのメソッドが古いデバイスに存在しない場合。

では、apk がパッケージ化されると、apk ビルダーはどこから実装 android.widget.ScrollBarDrawable.class を取得するのでしょうか?

そのクラスは Android SDK にないため、「apk ビルダー」はそのようなクラスを認識も気にもしません。

デバイスでは、別のJAR がアプリのクラスパスの一部であり、実際の実装などが含まれていますActivity。その JAR に隠しファイルが含まれているかどうかはandroid.widget.ScrollBarDrawable、おそらく OS のリリースによって異なります。

于 2016-05-25T14:16:23.733 に答える