Basics
There are two tools: NDK and SDK. Each tool has a version.
Android has a concept of Android native API level.
There are three environment variables to set:
ANDROID_NDK_ROOT
ANDROID_SDK_ROOT
ANDROID_HOME
The name of the app is determined by <application android:label in
AndroidManifest.xml. We can use @string/app_name.
The title of the nav bar is determined by <activity android:label
in AndroidManifest.xml.
Button click:
val button: Button = findViewById(R.id.button1)
button1.setOnclickListener {
Toast.makeText(this, "Clicked me!", Toast.LengthShort).show()
}
The menu is added in res/menu The directory res/menu is created by
us manually. After creating the directory, we can right click it, and select
menu resource file. If we name it main, it will create a file main.xml
inside res/menu. Inside main.xml, each menu item contains something like
below:
<item android:id="@+id/add_item" android:title="Add" />
After creating main.xml, click the menu Code -> Override Method, select
onCreateOptionsMenu:
menuInflater.inflace(R.menu.main, menu)
return true
To define a function when a menu item is clicked, click the menu Code->Override Method,
select onOptionsItemSelected.
when (item.itemId) {
R.id.add_item -> { xxx }
R.id.remove_item -> { xxx }
}
return true
To destroy an activity, call finish().
TextView
It is a label in other GUI.
<TextView
android:id="@+id/textView"
android:text="hello world"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
To change the alignment, use android:gravity.
android:gravity="center"
// top, bottom, center, start, end
// center_vertical|center_horizontal
To change the color, use android::textColor
android::textColor="#00ff00"
To change the font size, use android::textSize="24sp"
EditText
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="this is some hint"
android:maxLines="10"
/>
To get the text of EditText in the kotlin code, use:
val inputText = editText.text.toString()
LinearLayout
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
orientation can also be horizontal.
view binding
Edit app/build.gradle, add the following:
android { ...
kotlinOptions {
jvmTarget = '1.8'
}
buildFeatures {
viewBinding true
}
}
Then in the main activity, use:
// activity_main.xml -> AcitvityMainBinding
import com.bignerdranch.android.geoquiz.databinding.ActivityMainBinding
private lateinit var binding: ActivityMainBinding
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.trueButton.setOnClickListener { view: View -> }
binding.falseButton.setOnClickListener { view: View -> }
directories
val nativeDirPath = context.applicationInfo.nativeLibraryDir
Log.i(TAG, "nativeDirPath: $nativeDirPath")
// nativeDirPath: /data/app/~~cqPVTPOsjtVv50X9wWpr1g==/com.k2fsa.sherpa.onnx.simulate.streaming.asr-LWDzOBpzdRoEuYbbcqyjTg==/lib/arm64
val assetFilePath = context.filesDir.absolutePath
Log.i(TAG, "assetFilePath: $assetFilePath")
// assetFilePath: /data/user/0/com.k2fsa.sherpa.onnx.simulate.streaming.asr/files
context.dataDir
// /data/user/0/com.k2fsa.sherpa.onnx.simulate.streaming.asr