GVKun编程网logo

如何将.jar或.class转换为.dex文件?(classes.jar转回dex文件)

10

针对如何将.jar或.class转换为.dex文件?和classes.jar转回dex文件这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展AndroidDex:[项目名称]无法创建class

针对如何将.jar或.class转换为.dex文件?classes.jar转回dex文件这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展Android Dex:[项目名称]无法创建classes.dex文件、Android Studio是否压缩classes.dex文件?、c# – 在将IClass转换为Class时应该检查NULL吗?、c# – 将Class转换为XML为string等相关知识,希望可以帮助到你。

本文目录一览:

如何将.jar或.class转换为.dex文件?(classes.jar转回dex文件)

如何将.jar或.class转换为.dex文件?(classes.jar转回dex文件)

我将编辑Opera Mini v6.5服务器,因为它在我们的国家/地区已被屏蔽。

现在我解压了.apk文件提取的类,然后通过dex2jar.bat将其转换为Dex,现在修改了服务器。

我的问题是我想将.jar或.class重新打包为classes.Dex。我该怎么做?

答案1

小编典典

这是一个对我的情况有用的解决方案…

假设.jar文件位于“ c:\ temp \ in.jar”中。在命令提示符窗口中,将cd转到.. \ android-sdk \ platform-
tools。要获取.apk,请执行:

dx --dex --output="c:\temp\app.apk" "c:\temp\in.jar"

要获取.dex文件,请执行:

dx --dex --output="c:\temp\dx.dex" "c:\temp\in.jar"

Android Dex:[项目名称]无法创建classes.dex文件

Android Dex:[项目名称]无法创建classes.dex文件

我正在使用IntelliJ IDEA 12.1.4,在我的项目中,我使用了几个库/项目:

> ActionBarSherlock
> ViewPagerIndicator
>凌空抽射
> ProgressSherlockFragment
> Google Play服务
>滑动菜单
> epublib.jar
> gson.jar

我从SVN中检出了所有项目,并修复了依赖项或缺少库,但是当我尝试创建项目时,我总是无所不在:

Android Dex: [Project name] Cannot create classes.dex file

没有其他警告/错误.该项目可在其他2台计算机上运行,​​但在我的笔记本电脑上则无法.我无法在其他计算机上检查“设置”,因为我目前无法访问它们.

如何解决此问题或获取更多详细信息?我不知道怎么了.
我试过了:

>删除模块设置中的错误/警告
>在每个项目上设置相同的API
>从源和maven两次导入它们
>以管理员身份运行IntelliJ

解决方法:

找到了一个对我有用的解决方案:

从项目文件夹以及内部文件夹和文件中删除“只读”属性

Android Studio是否压缩classes.dex文件?

Android Studio是否压缩classes.dex文件?

看起来输出文件夹中apk文件的classes.dex与已安装的应用程序不同.

我正在使用classes.dex文件来解决一些安全问题,所以通常我解压缩最终的apk文件并从classes.dex文件中获取信息.但是当我在运行时读取classes.dex文件时文件大小是如此不同. (8MB vs 46KB)

应用程序本身工作得很好.有人说Proguard使classes.dex文件更轻,但我关闭了Proguard. (useProguard false,build.gradle中minifyEnabled false)

有什么我可以尝试的吗?先感谢您.

一句话摘要:
Android Studio构建的app / build / outputs / apk / app.apk文件的classes.dex与我可以从Android设备的实际应用安装位置找到的classes.dex不同.

解决方法:

实际上,android studio会进行转换,并且在构建时默认使用“compress”这个术语.

Android应用程序的编译过程与其他Java应用程序有很大不同.但它以相同的方式开始:使用javac命令将您的Java源代码文件编译为.class文件:

conversion_to_class_file

.class文件包含标准的Oracle JVM Java字节码.但Android设备不使用此字节码格式.相反,Android有自己独特的字节码格式,称为Dalvik. Dalvik字节码,如Oracle JVM字节码,是理论处理器的机器代码指令.

编译过程需要将.class文件和任何.jar库转换为包含Dalvik字节码的单个classes.dex文件.这是通过dx命令完成的:
这是您的classes.dex文件的生成方式.

conversion_to_dex_file

然后将classes.dex文件和应用程序中的资源(如图像和布局)压缩为类似zip的文件,称为Android Package或.apk文件.这是通过Android资产包装工具或aapt完成的:

conversion_to_apk_file

在构建过程中,您的proguard规则有助于

>收缩 – 检测并删除未使用的类,字段,方法和属性.
>优化 – 分析和优化方法的字节码.
> Obfuscate – 使用简短无意义的名称重命名剩余的类,字段和方法.

希望它在某种程度上对你有所帮助.
如果您想了解有关Android应用程序如何构建和运行的更多信息,
Read this.
资源:
https://github.com/dogriffiths/HeadFirstAndroid/wiki/How-Android-Apps-are-Built-and-Run

.

c# – 在将IClass转换为Class时应该检查NULL吗?

c# – 在将IClass转换为Class时应该检查NULL吗?

问题1>在以下情况下应该检查NULL吗?
public interface INewClass {}
public class NewClass : INewClass {}

public void FunMeA(INewClass obj)
{
    NewClass n = (NewClass) obj;
    ... // Should I check (n == null) here?
    // call methods defined inside INewClass (updated from NewClass to INewClass)
    ...
}

A concrete example,public void FunMeB(IAsyncResult itfAR)
{
    AsyncResult ar = (AsyncResult) itfAR;
    ... // Should I check (ar == null) here?
    // access ar.AsyncDelegate
    ...
}

问题2>我刚刚开始从C转移到C#.
当在C编码时,我知道检查何时应该完成.
但是,我完全迷失在C#世界.所以问题是:是吗
一般的规则,可以告诉我什么时候我必须检查NULL?

谢谢

解决方法

这样做时
NewClass n = (NewClass) obj;

没有任何意义,因为如果不转换它将抛出一个无效的转换异常.

如果您对您是否可以实际投下任何疑问,您可以这样做:

NewClass n = obj as NewClass;

然后

if(n != null) ...

你正在做的演员称为直播,系统将假定它可以制作. n = obj作为NewClass被称为间接转换,是为那些你想告诉程序的情况“嘿,我认为这将工作,但如果不是不翻转和抛出一个异常…我会交易如果它不起作用.“

使用的是vs,在铸造.

根据你想要的情况,一个会比另一个更好.从技术上来说,从性能的角度来看是首选. .Net将使用原子式尝试来转换为所需类型,如果不是,则返回null,那么它将不得不将继承树进行两次,以查看它是否匹配该类型,然后将其转换.所以在大多数情况下,如果你想看看是否要转换并使用该类型,最好是:

var obj = o as type
if (obj != null)

相反

if(o is type)
{
   var obj = (type); 
}

c# – 将Class转换为XML为string

c# – 将Class转换为XML为string

我正在使用 XMLSerializer将类序列化为XML.有很多例子可以将XML保存到文件中.但是我想要的是将XML放入字符串而不是将其保存到文件中.

我正在尝试下面的代码,但它不起作用:

public static void Main(string[] args)
        {

            XmlSerializer ser = new XmlSerializer(typeof(TestClass));
            MemoryStream m = new MemoryStream();

            ser.Serialize(m,new TestClass());

            string xml = new StreamReader(m).ReadToEnd();

            Console.WriteLine(xml);

            Console.ReadLine();

        }

        public class TestClass
        {
            public int Legs = 4;
            public int NoOfKills = 100;
        }

有想法该怎么解决这个吗 ?

谢谢.

解决方法

在读取之前,您必须将内存流放回到开头,如下所示:

XmlSerializer ser = new XmlSerializer(typeof(TestClass));
        MemoryStream m = new MemoryStream();

        ser.Serialize(m,new TestClass());

        // reset to 0 so we start reading from the beginning of the stream
        m.Position = 0;
        string xml = new StreamReader(m).ReadToEnd();

最重要的是,通过调用dispose或close来关闭资源始终很重要.您的完整代码应该是这样的:

XmlSerializer ser = new XmlSerializer(typeof(TestClass));
        string xml;

        using (MemoryStream m = new MemoryStream())
        {
            ser.Serialize(m,new TestClass());

            // reset to 0
            m.Position = 0;
            xml = new StreamReader(m).ReadToEnd();
        }

        Console.WriteLine(xml);
        Console.ReadLine();

今天关于如何将.jar或.class转换为.dex文件?classes.jar转回dex文件的介绍到此结束,谢谢您的阅读,有关Android Dex:[项目名称]无法创建classes.dex文件、Android Studio是否压缩classes.dex文件?、c# – 在将IClass转换为Class时应该检查NULL吗?、c# – 将Class转换为XML为string等更多相关知识的信息可以在本站进行查询。

本文标签: