Android用uts
この記事は、Android 開発者が UTS をすぐに使い始めるのに役立つことを目的としています。
読者は Android ネイティブ アプリケーションの開発経験があることが必要です。
# 1 UTS プラグインとは何かを理解する
UTS插件
これはuni-app
新しいプラグイン形式であり、クロスプラットフォーム、高効率、デバッグが容易という利点があります。詳細(新しいウィンドウが開きます)
Android 開発者にとって、知っておくべきことは次のとおりです。
UTS
コンパイル時:ソース コード ファイルを保存すると、IDE はそれを対応する Kotlin コードに同期的にコンパイルします。- ランタイム: 実際のマシンが実行中/クラウド パッケージ化されている場合、これらのコンパイルされた kotlin ソース コードも APK の一部になります。
# 2 UTS文法をマスターする
# 2.1 kotlin言語を使いこなす人向け
UTS 構文は kotlin に非常に似ているため、ざっと読んだ後、実際に UTS 構文をマスターすることをお勧めします。uts 構文の概要 (新しいウィンドウが開きます)。
# 2.2 Java言語だけをマスターする人向け
js と比較すると、uts の構文は Java に似ています。ただし、依然として大きな違いがあるため、2.3 の文法のセクションを詳しく読む必要があります。
UTS プラグインの開発には kotlin をマスターする必要はありませんが、UTS
現在 Android プラットフォーム上にあることを考慮すると、kotlin ソース コードにコンパイルされます。複雑な機能のトラブルシューティングと実装を容易にするために、kotlin 言語を学習します。
したがって、kotlin 構文を学習することをお勧めします。
-
Android 用 kotlin https://developer.android.com/kotlin(新しいウィンドウが開きます)
# 2.3 データ型の違い
UTS と koltin は基本的にデータ型が一致していますが、いくつかのシナリオではまだ相違点があり、ここで具体的に説明します。
原則として:
データ型は UTS の組み込み型に従い、各ネイティブ プラットフォームは自動的にそれに適応します。
ただし、UTS 自体はクロスプラットフォーム言語であるため、特定のプラットフォームの API に明確な要件がある場合には、相手が明確に要求するデータ型が優先されます。
#例1: Int と Number
デフォルトでは、開発者は プラットフォームで使用される シーンに オーバーレイUTS
を使用できます 。Number
android
Int
ただし、開発者が Service
コンポーネントonStartCommand
メソッドを書き直す場合、Android
API 要件では、最後の 2 つのパラメーターが Int である必要があることが明確に要求されます。
ネイティブ開発環境では、次のように記述する必要があります。
override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {
return super.onStartCommand(intent, flags, startId);
}
コードをコピーする
Number
標準の TS 環境では、タイプのみが存在し、Int
タイプは存在しません。
この状況に適応するために、UTS では開発者がネイティブ プラットフォームのデータ型 Int を使用して、ネイティブ API のデータ型要件を満たすことができます。
override onStartCommand(intent:Intent ,flags:Int ,startId:Int):Int {
return super.onStartCommand(intent, flags, startId);
}
コードをコピーする
#例2:MutableList
MutableList
これはandroid
プラットフォーム固有のデータ型であり、一般的なシナリオでは、 UTS の組み込み型でArray
置き換えることができます。
ただし、onAppActivityRequestPermissionsResult
許可申請の結果を監視する関数を呼び出す場合は、このタイプのパラメータを使用することが明示的に必要です。
ネイティブ環境では次のように記述する必要があります。
onAppActivityRequestPermissionsResult(fun(requestCode: Number, permissions: MutableList<String>, grantResults: MutableList<Number>){
});
コードをコピーする
標準の TS 環境では型は存在せずMutableList
、同様のデータ型は次のとおりです。 Array
この状況に適応するために、UTS では開発者がネイティブ プラットフォームのデータ型を使用して、MutableList
ネイティブ プラットフォーム API のデータ型要件を満たすことができるようになります。
onAppActivityRequestPermissionsResult((requestCode: number,permissions: MutableList<string>,grantResults: MutableList<number>) => {
});
コードをコピーする
# 3 Androidネイティブ環境の構成
Android プロジェクトの場合、ソース コードに加えて、依存関係、リソース、構成などの一般的な問題も関係します。
この章では、UTS プラグイン開発環境でこれらのプロパティを設定する方法を紹介します。
知らせ:
- 1 この章のコード例は、Hello UTS プロジェクトのアドレスから取得されています(新しいウィンドウが開きます)
- 2 この章で設計した構成は、ベースをカスタマイズした後にのみ有効になります。
- 3 HX 3.6.8 の時点では、R ファイルの自動生成はまだサポートされていないため、この章の R ファイルの生成に関連する部分はまだサポートされていません。これは従来の問題であり、今後のリリースでサポートされる予定です。
# 3.1 AndroidManifest.xmlの設定
例として、hello UTS のネイティブ ページ プラグインの構成ファイルを取り上げます。
hello uts でのファイルの場所の例:
~\uni_modules\uts-nativepage\utssdk\app-android\AndroidManifest.xml
AndroidManifest.xml の例:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"
// 配置包名
package="io.dcloud.uni_modules.uts_nativepage">
// 配置权限
<!--创建前台服务权限-->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<application>
// 配置service / activity
<service android:name="uts.sdk.modules.utsNativepage.ForeService" />
<activity android:name="uts.sdk.modules.utsNativepage.DemoActivity"></activity>
</application>
</manifest>
コードをコピーする
AndroidManifest.xml 構成ルールは Android の構成ルールと一致しています。
特記事項:
各 UTS プラグインは、Android プロジェクトの lib モジュールに対応します。
Android Studio でパッケージ名を手動で入力するのとは異なり、手動のパッケージ名がない場合、HX は次のルールに従ってデフォルトでパッケージ名を生成します。
uts插件默认包名规则:
如果是根目录utssdk下的uts插件
包名:uts.sdk.(插件ID转驼峰)
如果是uni_modules目录下的uts插件
包名:uts.sdk.modules.(插件ID转驼峰)
举例:
uni-getbatteryinfo -> uts.sdk.modules.uniGetbatteryinfo;
uts-nativepage -> uts.sdk.modules.utsNativepage
コードをコピーする
# 3.2 res リソースの設定
hello uts でのファイルの場所の例:
~\uni_modules\uts-nativepage\utssdk\app-android\res
ここにリストされているレイアウトと値のディレクトリに加えて、anim などのすべての Android 標準リソース ディレクトリもサポートしています
# 3.3 アセットリソースの構成
hello UTS の uts-advance プラグインを例に挙げます。
キーコード:
// 获取asset管理器
let assetManager = getAppContext()!.getAssets();
// 加载free.mp3 资源
let afd = assetManager.openFd("free.mp3");
// 使用android 自带的媒体组件进行播放
let mediaPlayer = new MediaPlayer();
mediaPlayer.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(), afd.getLength());
mediaPlayer.prepare();
mediaPlayer.start();
コードをコピーする
hello uts 内の完全なコードの場所:
~\uni_modules\uts-advance\utssdk\app-android\assets
# 3.4 libs 依存リソースの追加
例として、Hello UTS プロジェクトの uts-tencentgeolocation プラグインを取り上げます。
hello uts でのファイルの場所の例:
~\uni_modules\uts-tencentgeolocation\utssdk\app-android\libs
HX3.6.7 バージョンには次の組み込みの依存関係があります。
開発者は、リスト内の依存関係を使用する場合、次の 2 つの点に注意する必要があります。
- 実マシンの実行中は、依存関係をリストに追加せずに、関連するクラスを直接参照できます。
- jar/aar を手動で追加して同じ依存関係を導入しないでください。手動で追加すると、依存関係の競合によりクラウド パッケージ化が失敗します。
+--- my-imageloader.jar
+--- my-nineoldandroids-2.4.0.jar
+--- zip4j-2.8.0.jar
+--- uts-runtime-jvm-1.0.jar
+--- [email protected]
+--- msa_mdid_1.0.13.aar
+--- breakpad-build-release.aar
+--- androidx.multidex:multidex:2.0.0@aar
+--- androidx.recyclerview:recyclerview:1.0.0@aar
+--- androidx.legacy:legacy-support-v4:1.0.0@aar
+--- androidx.appcompat:appcompat:1.0.0@aar
+--- com.github.bumptech.glide:glide:4.9.0@aar
+--- com.alibaba:fastjson:1.1.46.android@jar
+--- androidx.fragment:fragment:1.0.0@aar
+--- androidx.vectordrawable:vectordrawable-animated:1.0.0@aar
+--- androidx.legacy:legacy-support-core-ui:1.0.0@aar
+--- androidx.media:media:1.0.0@aar
+--- androidx.legacy:legacy-support-core-utils:1.0.0@aar
+--- androidx.vectordrawable:vectordrawable:1.0.0@aar
+--- androidx.viewpager:viewpager:1.0.0@aar
+--- androidx.coordinatorlayout:coordinatorlayout:1.0.0@aar
+--- androidx.drawerlayout:drawerlayout:1.0.0@aar
+--- androidx.slidingpanelayout:slidingpanelayout:1.0.0@aar
+--- androidx.customview:customview:1.0.0@aar
+--- androidx.swiperefreshlayout:swiperefreshlayout:1.0.0@aar
+--- androidx.asynclayoutinflater:asynclayoutinflater:1.0.0@aar
+--- androidx.loader:loader:1.0.0@aar
+--- androidx.core:core:1.0.0@aar
+--- androidx.versionedparcelable:versionedparcelable:1.0.0@aar
+--- androidx.collection:collection:1.0.0@jar
+--- androidx.cursoradapter:cursoradapter:1.0.0@aar
+--- com.github.bumptech.glide:gifdecoder:4.9.0@aar
+--- androidx.lifecycle:lifecycle-runtime:2.0.0@aar
+--- androidx.interpolator:interpolator:1.0.0@aar
+--- androidx.documentfile:documentfile:1.0.0@aar
+--- androidx.localbroadcastmanager:localbroadcastmanager:1.0.0@aar
+--- androidx.print:print:1.0.0@aar
+--- androidx.lifecycle:lifecycle-viewmodel:2.0.0@aar
+--- androidx.lifecycle:lifecycle-livedata:2.0.0@aar
+--- androidx.lifecycle:lifecycle-livedata-core:2.0.0@aar
+--- androidx.lifecycle:lifecycle-common:2.0.0@jar
+--- androidx.arch.core:core-runtime:2.0.0@aar
+--- androidx.arch.core:core-common:2.0.0@jar
+--- androidx.annotation:annotation:1.0.0@jar
+--- com.github.bumptech.glide:disklrucache:4.9.0@jar
\--- com.github.bumptech.glide:annotations:4.9.0@jar
コードをコピーする
# 4 Kotlin と UTS の主な違い (継続的に更新)
上記の章を最後まで読んでください。
ここまでで、UTS 構文、基本的な Kotlin 構文、Android リソースの UTS サポートをマスターしたと思います。
ただし、Android 開発に慣れている kotlin 言語ユーザーにとっては、多くの共通の習慣が変わっているため、開発者が理解を深めることができるように、この章で具体的に指摘します。
# 4.1 構文の違い
# 4.1.1 Null 許容構文フラグ
kotlin では、nullable 構文は型として統合されてから追加されます?
。例として次のコードを取り上げます。
// 一个可为空的字符串变量,变量名为user
var user:String? = null
コードをコピーする
ただし、tsには2つのケースがあり、グローバル変数の場合は空にすることができ、次のように記述する必要があります
let user:string | null
コードをコピーする
メンバー変数の場合は kotlin に似ていますが、違いは ? が型の後ろではなく変数の後に書かれることです。
let user?:string
コードをコピーする
# 4.1.2 letとvar
kotlin
変数 variable in は var
、 ,として変更されますval
。違いは、val が不変であり、var が可変であることです。
uts
var
対応する変数の 型var/let
範囲内でのみ効果を発揮するため使用推奨、行動範囲が広いためlet
使用には注意が必要var
# 4.1.3 メソッド定義
メソッド定義 kotlin
でメソッドを定義する方法は 1 つだけです
fun startListener():void{
}
コードをコピーする
utsではグローバルメソッドとメンバーメソッドを区別する必要があります
// 成员方法
startListener():void{
}
コードをコピーする
// 全局方法
function startListener():void{
}
コードをコピーする
# 4.1.4の拡張
kotlin
入力: 継承演算子。次のようにextends
置き換える必要があります。
文法 | コトリン | うーん |
---|---|---|
継承クラス | : | 伸びる |
インターフェースを実装する | : | 伸びる |
class MediaContentObserver : ContentObserver {
}
コードをコピーする
class MediaContentObserver extends ContentObserver {
}
コードをコピーする
# 4.1.5 非nullアサーション
kotlin の非 null アサーションは!!
、ts では!
user!.sayHello();
コードをコピーする
user!!.sayHello();
コードをコピーする
# 4.1.6 親クラスの実装を素早く呼び出す
//ts 中快速实现super
constructor() : super() {
}
コードをコピーする
//kotlin 中快速实现super
constructor (){
super();
}
コードをコピーする
# 4.1.7 匿名の内部クラス
kotlin
匿名の内部クラスは以下で使用できます。
// kotlin 新建事件监听
user.setListener(Listener(){
//todo
});
コードをコピーする
UTS の現在のバージョンは匿名内部クラスをサポートしておらず、新しい内部クラスを作成するには明示的な宣言が必要です。
// 声明一个新的类,实现Listener
class MyListener extends Listener{
// todo
}
// 新建实例
let myListener = new MyListener();
user.setListener(myListener);
コードをコピーする
# 4.1.8 空関数でも呼び出せる
以下の成功や失敗など、いくつかの null 許容関数変数を定義する必要がある特別なシナリオがあります。
type Option = {
success?: (res: object) => void;
fail?: (res: object) => void;
};
コードをコピーする
現時点では、次のように呼び出す必要があります
options.success?.(res)
コードをコピーする
このような呼び出しメソッドは kotlin では不正であり、TS の固有の構文に属しているため、特別な注意が必要です。
# 4.2 警告の最適化
以下は機能の使用には影響しませんが、UTS 環境では適切な解決策があります
# 4.2.1 Java langパッケージの導入
kotlin
または、java
java.lang.* は特別に処理され、インポートせずに直接使用できます。
// 获取当前时间戳
System.currentTimeMillis()
コードをコピーする
UTS 環境では、lang パッケージは特別に扱われないため、手動でインポートする必要があります。
// 手动引入lang包下的类
import System from 'java.lang.System';
// 获取当前时间戳
System.currentTimeMillis()
コードをコピーする
# 4.2.2 UTS
ショートカット構築は非推奨
kotlin
() のメソッドをサポートし、引数なしのコンストラクターの宣言を迅速に実現します。
// 获取当前时间戳
class ScreenReceiver extends BroadcastReceiver(){
}
コードをコピーする
UTS 環境では、これを行うことはお勧めできません (ただし、現時点ではコンパイルには影響しません)。引数なしの構築の手動宣言を使用することをお勧めします。
class ScreenReceiver extends BroadcastReceiver{
constructor (){
super();
}
}
コードをコピーする
# 4.2.3 の先頭にアンダースコアが付いた変数はUTS
、未使用の警告をシールドする意味を持ちます。
// IDE会提示 name,status,desc 变量未使用
onStatusUpdate(name:string, status:Int, desc:string){
}
// 不会警告变量未使用
onStatusUpdate(_name:string, _status:Int, _desc:string){
}
コードをコピーする
# 5 よくある質問 (継続的に更新されます)
# 5.1 UTS 環境で新しいものを作成するにはactivity
?
Hello UTS プロジェクトの uts-nativepage プラグインを参照してください。
パス:
~\uni_modules\uts-nativepage
# 5.2 UTS 環境で新しいものを作成するにはservice
?
Hello UTS プロジェクトの uts-nativepage プラグインを参照してください。
パス:
~\uni_modules\uts-nativepage