这似乎很基本,但我无法找到我在任何地方寻找的信息,特别是关于Android应用程序.
我正在创建我的发布密钥(自签名),我被要求提供大量信息:
考虑到这一点,我有两个关于用于分发Android应用程序的自签名证书的基本问题:
提前致谢!
编辑:上面#1的更多信息:如果这与SSL证书类似,那么名称,组织和国家应该足够了.但那是这样的吗?将任何/所有其他字段留空的利弊?我不可能是唯一一个在应用程序方面对此感到疑惑的人......而我到目前为止所阅读的Android文档并没有帮助澄清这一点.
对于#2,似乎更改证书意味着重新生成它,并且使用该新证书进行签名并不能避免市场问题(就像一个全新的应用程序,即使您同时使用新的旧证书进行签名).因此,第一次签署应用程序时,更正确(在移动时充分通用)更为重要.
从v4.1 Jelly Bean开始,Google为Google Play引入了一项新的应用程序资产加密功能.似乎在升级包含持久性数据的应用程序时出现了一些问题,这些问题是由apk目录中的更改引起的(旧的/data/app
,现在是/mnt/asec
).
因此,在Google Play上发布(或更新已发布的应用)时,对于OS 2.3+,
除了这个问题,提供额外的防盗版保护的想法似乎没问题,但是在文档的任何地方都有一些我无法解释的额外注意事项:
提前致谢
更新:
修改以包含指向Google代码问题的链接.
问题34880(关闭,但有些开发者仍抱怨;状态:未来发布)
问题35962(已关闭;状态:已发布)
更新#2:由第一期中的一位开发人员链接的此博客文章的
有趣信息.同样在这里,在德国.
用户和开发人员报告说,在最近几天,使用最新版Google Play(3.7.15)安装的应用程序的问题似乎已经消失.以前安装有问题的应用程序的用户需要卸载,然后免费重新下载.根据一份报告,新版Google Play现在再次将付费应用程序保存到/ data/app,这意味着Google暂时停用了复制保护功能.谷歌没有公开评论这个问题.该错误被标记为中等优先级,状态为"FutureRelease"以进行可能的修复.
我有一个应用程序(这里),除了其他功能,允许共享APK文件.
为了做到这一点,它通过访问packageInfo.applicationInfo.sourceDir(这里是 docs链接)的路径到达文件,并且只是共享文件(在需要时使用ContentProvider,就像我在这里使用的那样).
这在大多数情况下都可以正常工作,尤其是从Play商店或独立的APK文件安装APK文件时,但是当我使用Android-Studio本身安装应用程序时,我在此路径上看到多个APK文件,而且没有一个是有效的,可以安装和运行没有任何问题.
这是从"Alerter"github repo中试用样本后该文件夹内容的屏幕截图 :
我不确定这个问题何时开始,但至少在我的Nexus 5x和Android 7.1.2上确实发生过.也许甚至以前.
这似乎只是因为在IDE上启用了即时运行这一事实,因此它可以帮助更新应用程序,而无需一起重新构建它:
禁用它后,我可以看到有一个APK,就像过去一样:
您可以在正确的APK和分割的APK之间看到文件大小的差异.
此外,似乎有一个API来获取所有分裂的APK的路径:
什么应该是最简单的方式来共享一个被分成多个的APK?
真的需要以某种方式合并它们吗?
根据文档似乎有可能:
零或更多拆分APK的完整路径,当与sourceDir中定义的基本APK结合使用时,形成一个完整的应用程序.
但是这样做的正确方法是什么,并且有一种快速有效的方法吗?也许没有真正创建文件?
是否有一个API可以从所有拆分的APK中获得合并的APK?或者也许这样的APK已经存在于其他路径中,并且不需要合并?
编辑:刚刚注意到,我尝试过的所有第三方应用程序都应该共享已安装的应用程序的APK,在这种情况下无法执行此操作.
我正在尝试在运行AOSP构建的Jelly Bean(4.2)的设备上安装APK.
当我"adb install my.apk"时,我收到错误消息:
[INSTALL_FAILED_VERIFICATION_FAILURE]
我已经尝试使用"testsign.jar"来"签署"apk但它并没有改变结果
我已经使用Android Studio创建了一个已签名的apk,我现在要对它进行zipalign,我已经读过这个:http: //developer.android.com/tools/help/zipalign.html 但是我还是不确定在哪里添加代码行,是否在Gradle文件中以及文件中的哪些位置添加行?
我有一个Android项目,它使用Gradle进行构建过程.现在我想添加两个额外的构建类型登台和生产,所以我的build.gradle包含:
android {
buildTypes {
release {
runProguard false
proguardFile getDefaultProguardFile('proguard-android.txt')
}
staging {
signingConfig signingConfigs.staging
applicationVariants.all { variant ->
appendVersionNameVersionCode(variant, defaultConfig)
}
}
production {
signingConfig signingConfigs.production
}
}
}
Run Code Online (Sandbox Code Playgroud)
和我的appndVersionNameVersionCode看起来像:
def appendVersionNameVersionCode(variant, defaultConfig) {
if(variant.zipAlign) {
def file = variant.outputFile
def fileName = file.name.replace(".apk", "-" + defaultConfig.versionName + "-" + defaultConfig.versionCode + ".apk")
variant.outputFile = new File(file.parent, fileName)
}
def file = variant.packageApplication.outputFile
def fileName = file.name.replace(".apk", "-" + defaultConfig.versionName + "-" + defaultConfig.versionCode + ".apk")
variant.packageApplication.outputFile = …
Run Code Online (Sandbox Code Playgroud) 我现在将在Google Play商店发布我的第一个应用程序.我已经压缩了我的应用程序中使用的图像.我对应用程序的大小有一些疑问.
如果应用程序的大小小于2 MB,那么用户卸载应用程序的可能性就会降低,对于属于教育领域的应用程序,我的这种说法是否属实?
但是,当我在Windows中看到我的apk文件时,它显示3.10 MB但是当它从设备中安装时从应用信息中显示它显示:
Total............................8.68 MB
App..............................7.02 MB
USB storage app..................0.00 B
Data.............................1.66 MB (perhaps it is the size of sqlite db + ttf's)
SD card..........................0.00B
Run Code Online (Sandbox Code Playgroud)
那么,为什么我看到我的应用程序大小增加了很多,它可以最小化吗?
而且,我在我的项目中使用了4个库(jars)Android Private Libraries
,但是这些库也在这个文件夹之外.
删除它们是否更安全,删除它们有助于减少apk大小?
此外,我访问了许多网页,描述了什么Proguard
,我真正理解Proguard如何减小apk的大小,它通过删除未使用的代码并使用语义模糊的名称重命名类,字段和方法来缩小,优化和混淆我们的代码.结果是较小的.apk文件,更难以进行逆向工程.但我不知道proguard-project.txt
应该怎么样?
我使用4个图书馆在我的应用程序,即easyfacebookandroidsdk_2.3.jar
,android-support-v7-appcompat.jar
,google-play-services.jar
和android-support-v4.jar
.
目前我proguard-properties.txt
看起来像这样,也不使用WebView
# To enable ProGuard in your project, edit project.properties
# to define the proguard.config property as described in that file.
#
# Add project specific ProGuard rules here. …
Run Code Online (Sandbox Code Playgroud) 我想使用存储在我的Yubikey的OpenPGP小程序中的OpenPGP密钥来签署APK文件.
我知道,有一个使用Yubikey的PIV applet进行APK签名的解决方案.但是,PIV applet只能处理密钥长度最多2048位的RSA密钥.
该BSI TR-02102-1加密机制技术指南(翻译英文版本)规定,从2023年(或2023年和以后的使用),只能用密钥长度大于或等于3000位RSA密钥是允许的.第一个可用的标准密钥长度是3072位.我必须遵守BSI TR-02102.
这总结为要求,我必须使用3072位的密钥长度和RSA作为算法,我不能使用PIV APK唱歌方法.
有没有办法使用Yubikey 4的OpenPGP小程序使用标准程序或使用自定义程序签署APK文件?
注意:私钥是在Yubikey上生成的,不可导出.这是由于Yubikey的设计和我的最低安全要求.因此,出口和对话不是一种可能的解决方案.
我有两个使用相同内容提供程序的应用程序,但我不能在两个应用程序中放置相同的内容提供程序 - 它显示INSTALL_FAILED_CONFLICTING_PROVIDER错误.所以我把我的内容提供商放在第三个.apk中,并从两个应用程序中使用它,它运行良好.
现在问题是 - 必须先安装内容提供程序apk,然后才能在设备上安装这两个应用程序中的任何一个.否则,它会在安装期间显示Provider not found错误.
那么,在安装任何其他apks之前,如何确保安装提供程序apk?
有没有办法将内容提供程序apk与其他两个apks单独合并,因此它们将作为两个应用程序一起安装,并且不会显示INSTALL_FAILED_CONFLICTING_PROVIDER错误?
我需要将内容提供程序apk与两个应用程序合并,因为用户可能无法安装这两个应用程序,也可能将它们安装在单个设备上.
有人能告诉我这是什么意思吗?
一切都很顺利,我没有改变任何事情,它刚刚发生,这是Binder 565中的代码:
try {
res = onTransact(code, data, reply, flags);
} catch (RemoteException | RuntimeException e) {
if (LOG_RUNTIME_EXCEPTION) {
Log.w(TAG, "Caught a RuntimeException from the binder stub implementation.", e);
}
if ((flags & FLAG_ONEWAY) != 0) {
if (e instanceof RemoteException) {
Log.w(TAG, "Binder call failed.", e);
} else {
Log.w(TAG, "Caught a RuntimeException from the binder stub implementation.", e);
}
} else {
reply.setDataPosition(0);
reply.writeException(e);
}
res = true;
}
Run Code Online (Sandbox Code Playgroud) android ×10
apk ×10
java ×3
gradle ×2
certificate ×1
code-signing ×1
encryption ×1
google-play ×1
jar ×1
jar-signing ×1
proguard ×1
signing ×1
zipalign ×1