android 에서 url을 통해 apk를 cache 폴더에 다운로드 후 appstore를 통하지 않고 업데이트를 하는 기능을 구현하였다. 아래 기술된 내용은 cache 폴더에서 apk 파일을 읽어와 업데이트를 하는 방법에 대한 것이다.
android {
signingConfigs {
release {
storePassword 'password'
keyAlias 'password'
keyPassword 'password'
storeFile file('./key/signing_key.jks')
}
debug {
storePassword 'password'
keyAlias 'password'
keyPassword 'password'
storeFile file('./key/signing_key.jks')
}
}
}
<paths>
<cache-path name="cache" path="."/>
</paths>
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
<application>
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/path" />
</provider>
</application>
if(!packageManager.canRequestPackageInstalls()){
val intent = Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES)
intent.data = Uri.parse(String.format("package:%s", packageName))
startActivity(intent)
}
private fun executeFile(
context: Context,
file: File
) {
try {
val intent = Intent(Intent.ACTION_VIEW)
val uri = FileProvider.getUriForFile(context, context.applicationContext.packageName + ".provider", file)
intent.setDataAndType(uri, "application/vnd.android.package-archive")
intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
intent.putExtra(Intent.EXTRA_NOT_UNKNOWN_SOURCE, true)
context.startActivity(intent)
} catch (e: Exception) {
println("executeFile(): ${e.message}")
}
}