我正在尝试制作一个安全的Android应用程序.我在我的应用程序中启用了proguard.但它在反编译时不会隐藏任何xml文件或清单.它只更改.java文件.
我尝试使用apktool从Play商店反编译另一个应用程序的apk .然后我得到以下异常
Exception in thread "main" brut.androlib.AndrolibException: brut.directory.Direc
toryException: java.util.zip.ZipException: error in opening zip file
at brut.androlib.ApkDecoder.hasSources(ApkDecoder.java:199)
at brut.androlib.ApkDecoder.decode(ApkDecoder.java:83)
at brut.apktool.Main.cmdDecode(Main.java:146)
at brut.apktool.Main.main(Main.java:77)
Caused by: brut.directory.DirectoryException: java.util.zip.ZipException: error
in opening zip file
at brut.directory.ZipRODirectory.<init>(ZipRODirectory.java:55)
at brut.directory.ZipRODirectory.<init>(ZipRODirectory.java:38)
at brut.androlib.res.util.ExtFile.getDirectory(ExtFile.java:55)
at brut.androlib.ApkDecoder.hasSources(ApkDecoder.java:197)
... 3 more
Caused by: java.util.zip.ZipException: error in opening zip file
at java.util.zip.ZipFile.open(Native Method)
at java.util.zip.ZipFile.<init>(Unknown Source)
at java.util.zip.ZipFile.<init>(Unknown Source)
at brut.directory.ZipRODirectory.<init>(ZipRODirectory.java:53)
... 6 more
Run Code Online (Sandbox Code Playgroud)
然后没有透露xml文件和清单.我也希望像这样保护我的应用程序.这怎么可能?
更改我的顶级build.gradle后使用Android Plugin for Gradle 3.0.0-beta3with Gradle 4.1,AirWatch无法从APK中读取信息(如versionCode和versionName).
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.0-beta3'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
ext {
roomVersion = '1.0.0-alpha9'
supportLibVersion = '26.0.1' …Run Code Online (Sandbox Code Playgroud) 使用DDMS我从手机上下载了APK并解压缩.
PNG看起来很棒,但是当我尝试读取XML时,它们的编码是这样的,我的文本编辑器都无法读取它(Word,Notepad,Visual Studio等)
是否在APK中对XML进行了某些操作以阻止我们阅读它们?
我正在尝试解析resources.arsc文件中包含的资源,如本问题中所述.我知道该androidmanifest.xml文件标识了.arsc文件中的资源.我已成功设法解析.arsc文件的标题,我无法弄清楚如何自己解析资源.
有人可以帮我弄清楚如何解析.arsc文件中包含的资源吗?
到目前为止我的解析代码:
<?php
$doc = fopen('resources.arsc', 'r+');
for($i=1;$i<10;$i++){
$res[$i] = _unpack('V', fread($doc, 4));
}
for ($i = 0, $j = $res[6]; $i <= $j; $i++) {
$word = fread($doc, 4);
$stroffs[] = _unpack('V', $word);
}
$strings = array();
$curroffs = 0;
foreach($stroffs as $offs){
//read length
$len = _unpack('v', fread($doc, 2));
//read string
if($len>0){
$str = fread($doc, $len*2);
}else{
$str = '';
}
//null
$wd = fread($doc, 2);
//utf-16le
$strings[] = mb_convert_encoding($str, 'gbk', 'UTF-16LE');
//curr …Run Code Online (Sandbox Code Playgroud) 我怎样才能获得versionCode,versionName从与PHP的APK应用程序图标和应用标签
我正在写一个应用程序。在应用程序中,我以编程方式下载 APK 并启动启动 APK 安装的意图。
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(Environment.getExternalStorageDirectory() + "/download/" + "app.apk")),
"application/vnd.android.package-archive");
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
一切都运转良好。
但是,例如,当我尝试启动损坏的 APK 的安装时,会出现一个对话框:

我希望在安装 APK 时出现问题(APK 损坏、空间不足等...)时收到通知。
那么,有没有一种方法(事件或其他东西)可以收到通知,以便我可以用我自己的对话框替换“解析错误”默认对话框?
谢谢!
我有一个.net webservice,应该知道apk其文件夹中的文件版本.我知道,apktool但我需要阅读apk我的.net webserice 的清单.
我怎样才能做到这一点?你知道c#中的任何示例代码用于解码和读取apk文件的清单吗?
解压缩apk和决定清单文件是我的主要问题
我需要以编程方式阅读apk文件(包括AndroidManifest.xml)的内容。我知道有一些类似的工具apktool,dex2jar,aapt提取的apk的内容,但是,我需要做同样通过Android应用程序。顺便说一下,我的出发点是一个有效的apk文件路径。
我想解码 AndroidManifest.xml
我不想使用APKTOOL或其任何相关的依赖项,因为我正在尝试编写一个程序,该程序将在不支持它们的机器/设备上执行.
是否有编码类型的名称AndroidManifest.xml?
我正在尝试用Java编写程序,是否有任何受支持的库可以提供帮助?
我想读取res文件夹中的所有xml文件。我能够使用jar读取清单文件。AXMLPrinter2.jar
我尝试以相同方式读取res文件夹中的xml文件,如下所示,
java -jar 'AXMLPrinter2.jar' 'account_list_item.xml' >'account_list_item.txt'
Run Code Online (Sandbox Code Playgroud)
但它显示了一些异常,例如波纹管,
java.lang.ArrayIndexOutOfBoundsException: 109
at android.content.res.StringBlock.getShort(StringBlock.java:231)
at android.content.res.StringBlock.getString(StringBlock.java:91)
at android.content.res.AXmlResourceParser.getName(AXmlResourceParser.java:140)
at test.AXMLPrinter.main(AXMLPrinter.java:56)
Run Code Online (Sandbox Code Playgroud)
有什么办法吗?
我必须使用命令行在android模拟器上启动一个应用程序.因为我知道adb命令有一个方法;
adb shell am start -a android.intent.action.MAIN -n com.example.myApplication
Run Code Online (Sandbox Code Playgroud)
但是我必须在执行这个命令之前找到应用程序包名称,所以任何人都帮我找到包名,或者在模拟器上运行apk的任何替代解决方案
我经常将新构建的APK大小与生产构建进行比较,我正在寻找使该活动自动化的选项,以便它比较新的和产品的APK大小并向我报告。我知道Android Studio的APK分析器,但是我想使用命令行工具来做到这一点。该文档列出了apkanalyzer的用法,但是在运行此命令时
apkanalyzer -h apk file-size myapk.apk
Run Code Online (Sandbox Code Playgroud)
它说:“ 'apkanalyzer'未被识别为内部或外部命令,可操作程序或批处理文件。” 尽管我已经将环境路径设置为\ Android \ sdk \ tools \ bin。
不知道为什么命令行无法识别该命令,您能否让我知道我可能出了错的地方,还是有其他方法可以使用命令行检查apk文件的大小?
感谢您的任何帮助。
android ×11
apk ×7
java ×3
adb ×2
php ×2
.net ×1
airwatch ×1
apktool ×1
c# ×1
command-line ×1
decoding ×1
decompiling ×1
dex ×1
encoding ×1
encryption ×1
exception ×1
installation ×1
manifest ×1
parsing ×1
resources ×1