當前位置:首頁 » 安卓系統 » android23編譯

android23編譯

發布時間: 2024-08-16 04:06:11

㈠ QT 5.2.1 編譯ANDROID 問題

情況,之前電腦安裝Qt5.1.0 msvc2012正常運行,都可以用,後來安裝了Qt5.2.0 for Android 發現Qt5.1.0 msvc2012就不能編譯任何東西了,但是Qt5.2.0 for Android卻可以編譯桌面應用,另外vs2012卻可以正常運行。
網上找到方法都不能解決,說什麼添加環境變數啊之類的
錯誤圖片如下:
偶爾構建時到這樣就不動了:
最經常是出現如下:
Plain Text code
jom: xx\Makefile.Debug [debug\main.obj] Error 2
jom: xx\Makefile [debug] Error 2
09:34:23: 進程"D:\Qt\Qt5.2.1_vc2012\Tools\QtCreator\bin\jom.exe"退出,退出代碼 2 。
Error while building/deploying project untitled (kit: Desktop Qt 5.2.1 MSVC2012 32bit)
當執行步驟 'Make'時
09:34:23: Elapsed time: 00:01.
在把使用jom代替nmake的勾去掉後,編譯錯誤如下:
NMAKE : fatal error U1077: 「"C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\cl.EXE"」: 返回代碼「0xc0000135」
Stop.
NMAKE : fatal error U1077: 「"C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\nmake.exe"」: 返回代碼「0x2」
Stop.
09:38:27: 進程"C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\nmake.exe"退出,退出代碼 2 。
Error while building/deploying project untitled (kit: Desktop Qt 5.2.1 MSVC2012 32bit)
當執行步驟 'Make'時
09:38:27: Elapsed time: 00:01.eclispse如何運行C?哥哥救救make: *** 沒有指明目標並且找不到 makefile。 停止。????ubuntu下編譯ACE-6.2.0windows下makefile編寫問題關於linux makefile的問題關於linux編程的菜鳥問題大俠幫忙改個makefile文件能支持交叉編譯第一步就遇到問題,makefile不知道怎麼回事了

㈡ android studio怎麼設置android版本

android studio 設置安卓版本有很多種,以下介紹常用的2種方式。

【常用方式】

  1. 通過build.gradle進行配置。

  2. 通過File-->Project structure 進行配置。

【原理】

都是通過設置當前開發環境的編譯版本進行改版studio的android 版本。

【詳細實現方式】

通過build.gradle進行配置,前提是studio有相應的android sdk版本。

優缺點:方便快速。

代碼如下:




java">android{
compileSdkVersion23//x修改這個即可
buildToolsVersion"24.0.0"
defaultConfig{
applicationId"com.start.nonxinyin"
minSdkVersion15
targetSdkVersion23
versionCode2
versionName"1.0.1.20170210_Beta"
testInstrumentationRunner"android.support.test.runner.AndroidJUnitRunner"
}
  1. 通過File-->Project structure 進行配置。

    優缺點:方便快速。

    右鍵工程,open moudle setting,或者通過 File-->Project structure進行設置


【最後】

2種方法看個人使用情況進行選用。

㈢ 濡備綍鍙嶇紪璇慳ndroid搴旂敤騫墮噸鏂版墦鍖

涓.鐪媋ndroid鐨勬簮浠g爜

銆銆1)灝咥pkd.apk 鐢▃ip瑙e帇鍚庯紝鍑虹幇浜嗕竴涓猚lasses.dex鏂囦歡
銆銆2014/02/19 19:42
銆銆.
銆銆2014/02/19 19:42
銆銆..
銆銆2014/02/19 15:35 1,656 AndroidManifest.xml
銆銆2014/02/19 15:35 687,024 classes.dex
銆銆2014/02/19 15:49
銆銆META-INF
銆銆2014/02/19 15:49
銆銆res
銆銆2014/02/19 15:35 2,200 resources.arsc
銆銆2)榪涘叆鍒癲ex2jar鐩褰曚腑錛岃繍琛屾儏鍐靛備笅錛
銆銆D:\developer\tools\test_apk\dex2jar-0.0.9.15>dex2jar.bat "..\Apkd(d2j)\classes.d
銆銆ex"
銆銆this cmd is deprecated, use the d2j-dex2jar if possible
銆銆dex2jar version: translator-0.0.9.15
銆銆dex2jar ..\Apkd(d2j)\classes.dex -> ..\Apkd(d2j)\classes_dex2jar.jar
銆銆Done.
銆銆鍦╝pk鎵鍦ㄧ殑鐩褰曚細鍑虹幇 classes_dex2jar.jar 鏂囦歡銆
銆銆3) 鐢↗D-GUI瀵筳ar鍖呰繘琛屾煡鐪嬶紝鍙浠ユ煡鐪嬫簮鏂囦歡

銆銆浜.鍙嶇紪璇慳pk

銆銆1.鍦ㄣ涓嬭澆銆APKTOOL涓鐨勪笁涓鏂囦歡錛坅apt.exe銆乤pktool.bat銆乤pktool.jar錛夎В鍘嬬緝鍒頒綘鐨刉indows瀹夎呯洰褰曚笅錛屼互鏂逛究浣跨敤Dos鍛戒護.
銆銆2012/12/06 11:44 854,016 aapt.exe
銆銆2014/02/19 17:15 277,372 Apkd.apk銆//紺轟緥鐢ㄣapk鏂囦歡
銆銆2012/12/23 23:39 92 apktool.bat
銆銆2013/02/03 02:37 2,655,843 apktool.jar
銆銆2.榪涘叆鍒癮pktool.bat鎵鍦ㄧ殑鐩褰曪紝榪愯岋細
銆銆apktool d Apkd.apk decode_dir
銆銆鍙嶇紪璇戝悗,decode_dir鐩褰曚笅鐨勫唴瀹瑰備笅錛
銆銆2014/02/19 17:16 716 AndroidManifest.xml
銆銆2014/02/19 17:16 237 apktool.yml
銆銆2014/02/19 17:18
銆銆build
銆銆2014/02/19 17:16
銆銆res
銆銆2014/02/19 17:16
銆銆smali
銆銆姝ゆ椂鎴戝彲浠ユ煡鐪嬪師鏂囦歡AndroidManifest.xml浜嗭紝涔熸槸鏌ョ湅smali婧愭枃浠訛紙鏄鐢╯mali璇璦鍐欑殑錛屽彲浠ュ圭収java鐪嬶級銆

銆銆涓.APKTOOL鐨勪嬌鐢

銆銆1).decode
銆銆璇ュ懡浠ょ敤浜庤繘琛屽弽緙栬瘧apk鏂囦歡錛屼竴鑸鐢ㄦ硶涓
銆銆apktool d

銆銆浠h〃浜嗚佸弽緙栬瘧鐨刟pk鏂囦歡鐨勮礬寰勶紝鏈濂藉啓緇濆硅礬寰勶紝姣斿侰:\MusicPlayer.apk
銆銆浠h〃浜嗗弽緙栬瘧鍚庣殑鏂囦歡鐨勫瓨鍌ㄤ綅緗錛屾瘮濡侰:\MusicPlayer
銆銆濡傛灉浣犵粰瀹氱殑宸茬粡瀛樺湪錛岄偅涔堣緭鍏ュ畬璇ュ懡浠ゅ悗浼氭彁紺轟綘錛屽苟涓旀棤娉曟墽琛岋紝闇瑕佷綘閲嶆柊淇鏀瑰懡浠ゅ姞鍏-f鎸囦護
銆銆apktool d 鈥揻

銆銆榪欐牱灝變細寮鴻岃嗙洊宸茬粡瀛樺湪鐨勬枃浠
銆銆2).build
銆銆璇ュ懡浠ょ敤浜庣紪璇戜慨鏀瑰ソ鐨勬枃浠訛紝涓鑸鐢ㄦ硶涓
銆銆apktool b

銆銆榪欓噷鐨
銆銆灝辨槸鍒氭墠浣犲弽緙栬瘧鏃惰緭鍏ョ殑
銆銆錛堝侰:\MusicPlayer錛,杈撳叆榪欒屽懡浠ゅ悗錛屽傛灉涓鍒囨e父錛屼綘浼氬彂鐜癈:\MusicPlayer鍐呭氫簡2涓鏂囦歡澶筨uild鍜宒ist錛屽叾涓鍒嗗埆瀛樺偍鐫緙栬瘧榪囩▼涓閫愪釜緙栬瘧鐨勬枃浠朵互鍙婃渶緇堟墦鍖呯殑apk鏂囦歡銆
銆銆3).install-framework
銆銆璇ュ懡浠ょ敤浜庝負APKTool瀹夎呯壒瀹氱殑framework-res.apk鏂囦歡錛屼互鏂逛究榪涜屽弽緙栬瘧涓浜涗笌ROM鐩鎬簰渚濊禆鐨凙PK鏂囦歡銆傚叿浣撴儏鍐佃風湅甯歌侀棶棰

銆銆鍥.smali涓巎ava婧愮爜瀵圭収錛屽苟鍋氬嚭鐩稿簲鐨勪慨鏀

銆銆java婧愪唬鐮侊細

銆銆import android.os.Bundle;
銆銆import android.app.Activity;
銆銆import android.view.Menu;
銆銆import android.widget.*;

銆銆public class MainActivity extends Activity {

銆銆@Override
銆銆protected void onCreate(Bundle savedInstanceState) {
銆銆super.onCreate(savedInstanceState);
銆銆setContentView(R.layout.activity_main);
銆銆TextView a = (TextView)this.findViewById(R.id.test) ;
銆銆a.setText("raoliang");
銆銆}

銆銆@Override
銆銆public boolean onCreateOptionsMenu(Menu menu) {
銆銆// Inflate the menu; this adds items to the action bar if it is present.
銆銆getMenuInflater().inflate(R.menu.main, menu);
銆銆return true;
銆銆}

銆銆}

銆銆瀵瑰簲鐨剆mali婧愪唬鐮侊細
銆銆.class public Lali/text/apkd/MainActivity;
銆銆.super Landroid/app/Activity;
銆銆.source "MainActivity.java"

銆銆# direct methods
銆銆.method public constructor ()V
銆銆.locals 0

銆銆.prologue
銆銆.line 8
銆銆invoke-direct {p0}, Landroid/app/Activity;->()V

銆銆return-void
銆銆.end method

銆銆# virtual methods
銆銆.method protected onCreate(Landroid/os/Bundle;)V
銆銆.locals 2
銆銆.parameter "savedInstanceState"

銆銆.prologue
銆銆.line 12
銆銆invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V

銆銆.line 13
銆銆const/high16 v1, 0x7f03

銆銆invoke-virtual {p0, v1}, Lali/text/apkd/MainActivity;->setContentView(I)V

銆銆.line 14
銆銆const/high16 v1, 0x7f08

銆銆invoke-virtual {p0, v1}, Lali/text/apkd/MainActivity;->findViewById(I)Landroid/view/View;

銆銆move-result-object v0

銆銆check-cast v0, Landroid/widget/TextView;

銆銆.line 15
銆銆.local v0, a:Landroid/widget/TextView;
銆銆const-string v1, "raoliang"

銆銆invoke-virtual {v0, v1}, Landroid/widget/TextView;->setText(Ljava/lang/CharSequence;)V

銆銆.line 16
銆銆return-void
銆銆.end method

銆銆.method public onCreateOptionsMenu(Landroid/view/Menu;)Z
銆銆.locals 2
銆銆.parameter "menu"

銆銆.prologue
銆銆.line 21
銆銆invoke-virtual {p0}, Lali/text/apkd/MainActivity;->getMenuInflater()Landroid/view/MenuInflater;

銆銆move-result-object v0

銆銆const/high16 v1, 0x7f07

銆銆invoke-virtual {v0, v1, p1}, Landroid/view/MenuInflater;->inflate(ILandroid/view/Menu;)V

銆銆.line 22
銆銆const/4 v0, 0x1

銆銆return v0
銆銆.end method

銆銆閫氳繃瀵規瘮鍙浠ョ湅鍒幫紝甯擱噺鏄娌℃湁蹇呭彉鐨勶紝鍙浠ユ牴鎹鐨剆mali鐨勮娉曪紝榪涜岀浉搴旂殑淇鏀

銆銆浜.3銆佹墦鍖呫佺懼悕鍜屽畨瑁呬慨鏀瑰悗鐨刟pk

銆銆淇鏀瑰畬浜嗭紝灝卞彲浠ユ墦鍖呭洖apk浜嗐傛墽琛屼互涓嬪懡浠わ細
銆銆apktool b decode_dir
銆銆鍦╩ygame鐩褰曚笅鐨刣ist鍦ㄤ細鐪嬪埌鎵撳寘濂界殑apk銆
銆銆褰撶劧錛岀幇鍦ㄤ竴鑸鏄鏃犳硶瀹夎呯殑錛屽洜涓篴pk榪樻病鏈夌懼悕銆備笅闈㈠氨鏉ョ懼悕銆傜懼悕闇瑕乲eystore鏂囦歡錛屾垜宸茬粡鏈変笓鐢ㄧ殑keystore浜嗭紝濡傛灉榪樻病鏈夛紝璇峰弬闃呰繖閲岃繘琛岀敓鎴愩
銆銆鎵ц屼互涓嬪懡浠や負閲嶆柊緙栬瘧鐨刴y_game.apk絳懼悕錛
銆銆jarsigner -verbose -keystore demo.keystore Apkd.apk demo.keystore
銆銆鏈鍚庯紝鍦ㄥ畨瑁呭埌鎵嬫満鍓嶏紝闇瑕佹妸鎵嬫満涓鐨勫凡鏈夌増鏈鍏堝嵏杞斤紝鍥犱負濡傛灉絳懼悕涓嶅悓錛屾槸涓嶈兘瑕嗙洊瀹夎呯殑錛屼細鎻愮ず鈥滃簲鐢ㄧ▼搴忔湭瀹夎呪濋敊璇銆
銆銆瀹屾暣鐨勮繍琛屾儏鍐靛備笅錛

銆銆D:\developer\tools\test_apk\new\decode\dist>keytool -genkey -alias demo.keystore -keyalg RSA -validity 40000 -keystore demo.keystore
銆銆杈撳叆keystore瀵嗙爜錛
銆銆鍐嶆¤緭鍏ユ柊瀵嗙爜:
銆銆鎮ㄧ殑鍚嶅瓧涓庡撴皬鏄浠涔堬紵
銆銆[Unknown]錛 rao
銆銆鎮ㄧ殑緇勭粐鍗曚綅鍚嶇О鏄浠涔堬紵
銆銆[Unknown]錛 rao
銆銆鎮ㄧ殑緇勭粐鍚嶇О鏄浠涔堬紵
銆銆[Unknown]錛
銆銆鎮ㄦ墍鍦ㄧ殑鍩庡競鎴栧尯鍩熷悕縐版槸浠涔堬紵
銆銆[Unknown]錛
銆銆鎮ㄦ墍鍦ㄧ殑宸炴垨鐪佷喚鍚嶇О鏄浠涔堬紵
銆銆[Unknown]錛
銆銆璇ュ崟浣嶇殑涓ゅ瓧姣嶅浗瀹朵唬鐮佹槸浠涔
銆銆[Unknown]錛
銆銆CN=rao, OU=rao, O=Unknown, L=Unknown, ST=Unknown, C=Unknown 姝g『鍚楋紵
銆銆[鍚]錛 y

銆銆杈撳叆鐨勪富瀵嗙爜
銆銆錛堝傛灉鍜 keystore 瀵嗙爜鐩稿悓錛屾寜鍥炶濺錛夛細

銆銆D:\developer\tools\test_apk\new\decode\dist>jarsigner -verbose -keystore demo.keystore Apkd.apk demo.keystore
銆銆杈撳叆瀵嗛掗搴撶殑鍙d護鐭璇錛
銆銆姝e湪娣誨姞錛 META-INF/MANIFEST.MF
銆銆姝e湪娣誨姞錛 META-INF/DEMO_KEY.SF
銆銆姝e湪娣誨姞錛 META-INF/DEMO_KEY.RSA
銆銆姝e湪絳懼悕錛 res/drawable-hdpi/ic_launcher.png
銆銆姝e湪絳懼悕錛 res/drawable-mdpi/ic_launcher.png
銆銆姝e湪絳懼悕錛 res/drawable-xhdpi/ic_launcher.png
銆銆姝e湪絳懼悕錛 res/drawable-xxhdpi/ic_launcher.png
銆銆姝e湪絳懼悕錛 res/layout/activity_main.xml
銆銆姝e湪絳懼悕錛 res/menu/main.xml
銆銆姝e湪絳懼悕錛 AndroidManifest.xml
銆銆姝e湪絳懼悕錛 classes.dex
銆銆姝e湪絳懼悕錛 resources.arsc

銆銆D:\developer\tools\test_apk\new\decode\dist>
銆銆鍒版や負姝錛屼慨鏀瑰悗鐨刟pk鍙浠ユe父鐨勫畨瑁呬簡錛屼笉榪囷紝鍦ㄥ畨瑁呬箣鍓嶏紝蹇呴』瑕佸厛鍗歌澆浠ュ墠鐨刟pk錛屼笉鑳界洿鎺ユ浛鎹錛堝洜涓虹懼悕涓嶄竴鏍鳳級

㈣ Android如何代碼混淆,防止apk程序被反編譯

下面具體說一說怎麼樣讓SDK2.3下的proguard.cfg文件起作用,先來看看android-sdk-windows\tools\lib\proguard.cfg的內容:view plain 1. -optimizationpasses 5 2. -dontusemixedcaseclassnames 3. - 4. -dontpreverify 5. -verbose 6. -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 7. 8. -keep public class * extends android.app.Activity 9. -keep public class * extends android.app.Application 10. -keep public class * extends android.app.Service 11. -keep public class * extends android.content.BroadcastReceiver 12. -keep public class * extends android.content.ContentProvider 13. -keep public class * extends android.app.backup.BackupAgentHelper 14. -keep public class * extends android.preference.Preference 15. -keep public class com.android.vending.licensing.ILicensingService 16. 17. -keepclasseswithmembernames class * { 18. native <methods>; 19. } 20. 21. -keepclasseswithmembernames class * { 22. public <init>(android.content.Context, android.util.AttributeSet); 23. } 24. 25. -keepclasseswithmembernames class * { 26. public <init>雀緩(android.content.Context, android.util.AttributeSet, int); 27. } 28. 29. -keepclassmembers enum * { 30. public static **[] values(); 31. public static ** valueOf(java.lang.String); 32. } 33. 34. -keep class * implements android.os.Parcelable { 35. public static final android.os.Parcelable$Creator *; 36. } 從腳本中可以看到,混淆中保留了繼承自Activity、Service、Application、頃困模BroadcastReceiver、ContentProvider等基本組件以及com.android.vending.licensing.ILicensingService, 並保留了所有的Native變數名及類名,所有類中部分以設定了固定尺旁參數格式的構造函數,枚舉等等。) 讓proguard.cfg起作用的做法很簡單,就是在eclipse自動生成的default.properties文件中加上一句「proguard.config=proguard.cfg」就可以了 完整的default.properties文件應該如下:view plain 1. # This file is automatically generated by Android Tools. 2. # Do not modify this file -- YOUR CHANGES WILL BE ERASED! 3. # 4. # This file must be checked in Version Control Systems. 5. # 6. # To customize properties used by the Ant build system use, 7. # "build.properties", and override values to adapt the script to your 8. # project structure. 9. 10. # Project target. 11. target=android-9 12. proguardproguard.config=proguard.cfg 大功告成,正常的編譯簽名後就可以防止代碼被反編譯了。

㈤ 如何在Mac上面進行AndroidApk反編譯

最新的反編譯不用此方法, 有最新的一鍵自動反編譯工具:

這段時間在學Android應用開發,在想既然是用Java開發的應該很好反編譯從而得到源代碼吧,google了一下,確實很簡單,以下是我的實踐過程。

在此鄭重聲明,貼出來的目的不是為了去破解人家的軟體,完全是一種學習的態度,不過好像通過這種方式也可以去漢化一些外國軟體。

註:本Android反編譯教程,在Windows7-Ultimate-64bit操作系統上,測試通過!

下述所需的反編譯工具包 下載

一、反編譯Apk得到Java源代碼
首先要下載兩個工具:dex2jar和JD-GUI

前者dex2jar是將apk中的classes.dex轉化成Jar文件,而JD-GUI是一個反編譯工具,可以直接查看Jar包的源代碼。以下是下載地址:

dex2jar:

JD-GUI:

具體步驟:

首先將apk文件,將後綴改為zip,解壓,得到其中的classes.dex,它就是java文件編譯再通過dx工具打包而成的;

解壓下載的dex2jar,將classes.dex復制到dex2jar.bat所在目錄。在命令行下定位到dex2jar.bat所在目錄(在DOS命令下CD 目錄)

運行

dex2jar.bat classes.dex

生成

classes.dex.dex2jar.jar

生成jar文件的截圖如下:

運行JD-GUI(jd-gui.exe),打開上面生成的jar包,即可看到源代碼了

HelloAndroid源碼(編譯前的apk源碼對照)如下:

二、反編譯apk生成程序的源代碼和圖片、XML配置、語言資源等文件

如果是漢化軟體,這將特別有用。首先還是下載工具,這次用到的是apktool

下載地址:

下載:apktool1.4.1.tar.bz2 和 apktool-install-windows-r04-brut1.tar.bz2(兩個包都下載)

具體步驟:

將下載的兩個包解壓到同一個文件夾下,應該會有三個文件:aapt.exe,apktool.bat,apktool.jar

在命令行下定位到apktool.bat文件夾,輸入以下命令:apktool d C:\*.apk C:\*文件夾,如下圖:

命令行解釋:apktool d [apk文件 ] [輸出文件夾]

反編譯的文件如下(AndroidManifest.xml為例):

特別注意:你要反編譯的文件一定要放在C盤的根目錄里(其實不用放在C盤根目錄也行)

例如:在D盤目錄D:\apktool1.4.1

cd /d D:\apktool1.4.1 //切換到D盤目錄,包含HelloAndroid.apk以及aapt.exe,apktool.bat,apktool.jar三個文件

apktool.bat d -f HelloAndroid.apk HelloAndroid // apktool反編譯命令,注意 d和
-f 的寫法

將反編譯完的文件重新打包成apk,很簡單,輸入apktool b c:\***文件夾(你編譯出來文件夾)即可,命令如下:這個主意你文件所在盤

打包apk後的文件在目錄C:\HelloAndroid下,生成了兩個文件夾:

build

dist

其中,打包生成的HelloAndroid.apk,在上面的dist文件夾下,Ok

最後,再介紹一款剛出來的反編譯工具 Androidfby ,它是一款對上述步驟進行了封裝的圖形界面工具,下載地址

但是,針對部分簽名的apk,無法實現反編譯,但本博客方法則仍然可以反編譯成功!僅供參考使用

另外,作為應用開發者,肯定不希望自己的代碼被反編譯的,下一遍博客將講述如何通過混淆代碼防止被別人反編譯

Android如何防止apk程序被反編譯

作為Android應用開發者,不得不面對一個尷尬的局面,就是自己辛辛苦苦開發的應用可以被別人很輕易的就反編譯出來。

Google似乎也發現了這個問題,從SDK2.3開始我們可以看到在android-sdk-windows\tools\下面多了一個proguard文件夾

proguard是一個java代碼混淆的工具,通過proguard,別人即使反編譯你的apk包,也只會看到一些讓人很難看懂的代碼,從而達到保護代碼的作用。

下面具體說一說怎麼樣讓SDK2.3下的proguard.cfg文件起作用,先來看看android-sdk-windows\tools\lib\proguard.cfg的內容:

[html] view
plainprint?

1. -optimizationpasses 5

2. -dontusemixedcaseclassnames

3. -

4. -dontpreverify

5. -verbose

6. -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

7.

8. -keep public class * extends android.app.Activity

9. -keep public class * extends android.app.Application

10. -keep public class * extends android.app.Service

11. -keep public class * extends android.content.BroadcastReceiver

12. -keep public class * extends android.content.ContentProvider

13. -keep public class * extends android.app.backup.BackupAgentHelper

14. -keep public class * extends android.preference.Preference

15. -keep public class com.android.vending.licensing.ILicensingService

16.

17. -keepclasseswithmembernames class * {

18. native ;

19. }

20.

21. -keepclasseswithmembernames class * {

22. public (android.content.Context, android.util.AttributeSet);

23. }

24.

25. -keepclasseswithmembernames class * {

26. public (android.content.Context, android.util.AttributeSet, int);

27. }

28.

29. -keepclassmembers enum * {

30. public static **[] values();

31. public static ** valueOf(java.lang.String);

32. }

33.

34. -keep class * implements android.os.Parcelable {

35. public static final android.os.Parcelable$Creator *;

36. }

從腳本中可以看到,混淆中保留了繼承自Activity、Service、
Application、BroadcastReceiver、ContentProvider等基本組件以及
com.android.vending.licensing.ILicensingService,

並保留了所有的Native變數名及類名,所有類中部分以設定了固定參數格式的構造函數,枚舉等等。(詳細信息請參考/examples中的例子及注釋。)

讓proguard.cfg起作用的做法很簡單,就是在eclipse自動生成的default.properties文件中加上一句「proguard.config=proguard.cfg」就可以了

完整的default.properties文件應該如下:

[html] view
plainprint?

1. # This file is automatically generated by Android Tools.

2. # Do not modify this file -- YOUR CHANGES WILL BE ERASED!

3. #

4. # This file must be checked in Version Control Systems.

5. #

6. # To customize properties used by the Ant build system use,

7. # "build.properties", and override values to adapt the script to your

8. # project structure.

9.

10. # Project target.

11. target=android-9

12. proguard.config=proguard.cfg

大功告成,正常的編譯簽名後就可以防止代碼被反編譯了。反編譯經過代碼混淆的apk得到的代碼應該類似於下面的效果,是很難看懂的:

如果您使用的是2.3之前的SDK版本也沒關系,把上面的proguard.cfg文件復制一份放到項目中,然後進行相同的操作即可
/

㈥ apk反編譯,回編出錯了

不影響正常運行,只是編譯環境,
compileSdkVersion 告訴 Gradle 用哪個 Android SDK 版本編譯你的應用。使用任何新添加的 API 就需要使用對應 Level 的 Android SDK。
需要強調的是修改 compileSdkVersion 不會改變運行時的行為。當你修改了 compileSdkVersion 的時候,可能會出現新的編譯警告、編譯錯誤,但新的 compileSdkVersion 不會被包含到 APK 中:它純粹只是在編譯的時候使用。(你真的應該修復這些警告,他們的出現一定是有原因的)
因此我們強烈推薦總是使用最新的 SDK 進行編譯。在現有代碼上使用新的編譯檢查可以獲得很多好處,避免新棄用的 API ,並且為使用新的 API 做好准備。
注意,如果使用 Support Library ,那麼使用最新發布的 Support Library 就需要使用最新的 SDK 編譯。例如,要使用 23.1.1 版本的 Support Library ,compileSdkVersion 就必需至少是 23 (大版本號要一致!)。通常,新版的 Support Library 隨著新的系統版本而發布,它為系統新增加的 API 和新特性提供兼容性支持。
解決辦法有兩種(我測試的前提是反編譯的母包是沒有包含這兩個屬性的):
(1)使用apktool 2.3.2版本,因為2.3.3之後版本針對appt和appt2做了修改,最後AndroidManifest.xml裡面不在包含compileSdkVersion和compileSdkVersionCodename
(2)清除原本的1.apk,重新指定framework-dir:java -jar apktool_2.4.0.jar empty-framework-dir --force,最後發現可以回編譯成功,但是AndroidManifest.xml還是會包含compileSdkVersion和compileSdkVersionCodename。

㈦ android系統編譯能用分布式編譯嗎

項目越來越大,每次需要重新編譯整個項目都是一件很浪費時間的事情。Research了一下,找到以下可以幫助提高速度的方法,總結一下。
1. 使用tmpfs來代替部分IO讀寫
2.ccache,可以將ccache的緩存文件設置在tmpfs上,但是這樣的話,每次開機後,ccache的緩存文件會丟失
3.distcc,多機器編譯
4.將屏幕輸出列印到內存文件或者/dev/null中,避免終端設備(慢速設備)拖慢速度。

tmpfs
有人說在Windows下用了RAMDisk把一個項目編譯時間從4.5小時減少到了5分鍾,也許這個數字是有點誇張了,不過粗想想,把文件放到內存上做編譯應該是比在磁碟上快多了吧,尤其如果編譯器需要生成很多臨時文件的話。
這個做法的實現成本最低,在Linux中,直接mount一個tmpfs就可以了。而且對所編譯的工程沒有任何要求,也不用改動編譯環境。
mount -t tmpfs tmpfs ~/build -o size=1G
用2.6.32.2的Linux Kernel來測試一下編譯速度:
用物理磁碟:40分16秒
用tmpfs:39分56秒
呃……沒什麼變化。看來編譯慢很大程度上瓶頸並不在IO上面。但對於一個實際項目來說,編譯過程中可能還會有打包等IO密集的操作,所以只要可能,用tmpfs是有益無害的。當然對於大項目來說,你需要有足夠的內存才能負擔得起這個tmpfs的開銷。
make -j
既然IO不是瓶頸,那CPU就應該是一個影響編譯速度的重要因素了。
用make -j帶一個參數,可以把項目在進行並行編譯,比如在一台雙核的機器上,完全可以用make -j4,讓make最多允許4個編譯命令同時執行,這樣可以更有效的利用CPU資源。
還是用Kernel來測試:
用make: 40分16秒
用make -j4:23分16秒
用make -j8:22分59秒
由此看來,在多核CPU上,適當的進行並行編譯還是可以明顯提高編譯速度的。但並行的任務不宜太多,一般是以CPU的核心數目的兩倍為宜。
不過這個方案不是完全沒有cost的,如果項目的Makefile不規范,沒有正確的設置好依賴關系,並行編譯的結果就是編譯不能正常進行。如果依賴關系設置過於保守,則可能本身編譯的可並行度就下降了,也不能取得最佳的效果。
ccache
ccache工作原理:
ccache也是一個編譯器驅動器。第一趟編譯時ccache緩存了GCC的「-E」輸出、編譯選項以及.o文件到$HOME/.ccache。第二次編譯時盡量利用緩存,必要時更新緩存。所以即使"make clean; make"也能從中獲得好處。ccache是經過仔細編寫的,確保了與直接使用GCC獲得完全相同的輸出。

ccache用於把編譯的中間結果進行緩存,以便在再次編譯的時候可以節省時間。這對於玩Kernel來說實在是再好不過了,因為經常需要修改一些Kernel的代碼,然後再重新編譯,而這兩次編譯大部分東西可能都沒有發生變化。對於平時開發項目來說,也是一樣。為什麼不是直接用make所支持的增量編譯呢?還是因為現實中,因為Makefile的不規范,很可能這種「聰明」的方案根本不能正常工作,只有每次make clean再make才行。
安裝完ccache後,可以在/usr/local/bin下建立gcc,g++,c++,cc的symbolic link,鏈到/usr/bin/ccache上。總之確認系統在調用gcc等命令時會調用到ccache就可以了(通常情況下/usr/local /bin會在PATH中排在/usr/bin前面)。
安裝的另外一種方法:
vi ~/.bash_profile
把/usr/lib/ccache/bin路徑加到PATH下
PATH=/usr/lib/ccache/bin:$PATH:$HOME/bin
這樣每次啟動g++的時候都會啟動/usr/lib/ccache/bin/g++,而不會啟動/usr/bin/g++
效果跟使用命令行ccache g++效果一樣
這樣每次用戶登錄時,使用g++編譯器時會自動啟動ccache
繼續測試:
用ccache的第一次編譯(make -j4):23分38秒
用ccache的第二次編譯(make -j4):8分48秒
用ccache的第三次編譯(修改若干配置,make -j4):23分48秒

看來修改配置(我改了CPU類型...)對ccache的影響是很大的,因為基本頭文件發生變化後,就導致所有緩存數據都無效了,必須重頭來做。但如果只是修改一些.c文件的代碼,ccache的效果還是相當明顯的。而且使用ccache對項目沒有特別的依賴,布署成本很低,這在日常工作中很實用。
可以用ccache -s來查看cache的使用和命中情況:
cache directory /home/lifanxi/.ccachecache hit 7165cache miss 14283called for link 71not a C/C++ file 120no input file 3045files in cache 28566cache size 81.7 Mbytesmax cache size 976.6 Mbytes
可以看到,顯然只有第二編次譯時cache命中了,cache miss是第一次和第三次編譯帶來的。兩次cache佔用了81.7M的磁碟,還是完全可以接受的。
distcc
一台機器的能力有限,可以聯合多台電腦一起來編譯。這在公司的日常開發中也是可行的,因為可能每個開發人員都有自己的開發編譯環境,它們的編譯器版本一般是一致的,公司的網路也通常具有較好的性能。這時就是distcc大顯身手的時候了。
使用distcc,並不像想像中那樣要求每台電腦都具有完全一致的環境,它只要求源代碼可以用make -j並行編譯,並且參與分布式編譯的電腦系統中具有相同的編譯器。因為它的原理只是把預處理好的源文件分發到多台計算機上,預處理、編譯後的目標文件的鏈接和其它除編譯以外的工作仍然是在發起編譯的主控電腦上完成,所以只要求發起編譯的那台機器具備一套完整的編譯環境就可以了。
distcc安裝後,可以啟動一下它的服務:
/usr/bin/distccd --daemon --allow 10.64.0.0/16
默認的3632埠允許來自同一個網路的distcc連接。
然後設置一下DISTCC_HOSTS環境變數,設置可以參與編譯的機器列表。通常localhost也參與編譯,但如果可以參與編譯的機器很多,則可以把localhost從這個列表中去掉,這樣本機就完全只是進行預處理、分發和鏈接了,編譯都在別的機器上完成。因為機器很多時,localhost的處理負擔很重,所以它就不再「兼職」編譯了。
export DISTCC_HOSTS="localhost 10.64.25.1 10.64.25.2 10.64.25.3"
然後與ccache類似把g++,gcc等常用的命令鏈接到/usr/bin/distcc上就可以了。
在make的時候,也必須用-j參數,一般是參數可以用所有參用編譯的計算機CPU內核總數的兩倍做為並行的任務數。
同樣測試一下:
一台雙核計算機,make -j4:23分16秒
兩台雙核計算機,make -j4:16分40秒
兩台雙核計算機,make -j8:15分49秒
跟最開始用一台雙核時的23分鍾相比,還是快了不少的。如果有更多的計算機加入,也可以得到更好的效果。
在編譯過程中可以用distccmon-text來查看編譯任務的分配情況。distcc也可以與ccache同時使用,通過設置一個環境變數就可以做到,非常方便。
總結一下:
tmpfs: 解決IO瓶頸,充分利用本機內存資源
make -j: 充分利用本機計算資源
distcc: 利用多台計算機資源
ccache: 減少重復編譯相同代碼的時間
這些工具的好處都在於布署的成本相對較低,綜合利用這些工具,就可以輕輕鬆鬆的節省相當可觀的時間。上面介紹的都是這些工具最基本的用法,更多的用法可以參考它們各自的man page。
5.還有提速方法是把屏幕輸出重定向到內存文件或/dev/null,因對終端設備(慢速設備)的阻塞寫操作也會拖慢速度。推薦內存文件,這樣發生錯誤時,能夠查看。

熱點內容
存儲台設計 發布:2024-11-25 10:40:04 瀏覽:668
如何查看自己電腦的所有配置 發布:2024-11-25 10:14:02 瀏覽:771
java編譯器偽編譯指什麼 發布:2024-11-25 10:08:53 瀏覽:961
amax伺服器默認地址 發布:2024-11-25 10:07:20 瀏覽:318
甘肅省浪潮伺服器雲伺服器 發布:2024-11-25 10:07:17 瀏覽:522
android手環 發布:2024-11-25 10:03:55 瀏覽:163
如何將安卓機設置為蘋果機 發布:2024-11-25 09:41:24 瀏覽:970
伺服器屏蔽一段ip 發布:2024-11-25 08:52:06 瀏覽:100
售茶源碼 發布:2024-11-25 08:37:29 瀏覽:464
壓縮包改直鏈 發布:2024-11-25 08:34:33 瀏覽:612