[問題] AS混淆後class不見

看板AndroidDev作者 (恩哈哈)時間7年前 (2017/09/13 12:09), 7年前編輯推噓0(0016)
留言16則, 2人參與, 最新討論串1/1
再出AAR時把混淆開啟後,得到的AAR內確有class都不見的狀況 想再確認下面幾點疑問 1.爬文後知道應該可以從ProGuard設定混淆規則來修改一些類要不要混淆? 2.為什麼class會不見,爬文有看到似乎可能是該class內的code關聯性不高?被混淆優化掉? 需要麻煩各位前輩幫忙 謝謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.42.32.32 ※ 文章網址: https://www.ptt.cc/bbs/AndroidDev/M.1505275785.A.C58.html

09/13 12:53, , 1F
從要保留的class/method開始找,有被用到的就會加入要保留
09/13 12:53, 1F

09/13 12:54, , 2F
的,到最後都不需要保留的(=沒用的)就刪除
09/13 12:54, 2F

09/13 12:55, , 3F
包library通常是把所有要公開的API設為保留
09/13 12:55, 3F

09/13 15:34, , 4F
但設保留的為什麼就沒有混淆到呢
09/13 15:34, 4F

09/13 15:47, , 5F
不太了解。是否設"保留(保護)"就等於"不會混淆"?
09/13 15:47, 5F

09/13 15:48, , 6F
應該說我最初的用意就是想要混淆,可是得到的結果是
09/13 15:48, 6F

09/13 15:49, , 7F
class不見..
09/13 15:49, 7F
謝謝ssccg大,後來聽您說明我試了這個可以混淆且不會不見.. -keep public class com.example.mylibrary.classA{*;} 想再請教如何 在同一class內讓public的method有保護但private的method不保護呢? 關於寫法 ※ 編輯: goodsheng (114.42.32.32), 09/13/2017 17:20:50

09/13 17:24, , 8F
直接指定keep的會被保留且不會混淆,由proguard找到會被用
09/13 17:24, 8F

09/13 17:24, , 9F
到但不是直接指定keep的,就會留下來但會被混淆
09/13 17:24, 9F

09/13 17:27, , 10F
用-dontshrink就會一律保留,但混不混淆還是看keep
09/13 17:27, 10F

09/13 17:28, , 11F
但一開始我沒有指定keep時,class卻會不見
09/13 17:28, 11F

09/13 17:28, , 12F
proguard其實主要是個瘦身工具而不是保護工具
09/13 17:28, 12F

09/13 17:29, , 13F
沒指定keep又沒被別的keep的class用到的當然會不見啊
09/13 17:29, 13F

09/13 17:30, , 14F
留下public member可以寫 { public *; }
09/13 17:30, 14F

09/13 17:30, , 15F
聊解!!原來是因為"沒被別的keep的class用到"這樣
09/13 17:30, 15F

09/13 17:30, , 16F
各種用法可以看 https://goo.gl/bpuiMv
09/13 17:30, 16F
有試成功了,謝謝ssccg大! -keep public class com.example.mylibrary.classA{ public *;} public int cfunction3() { int var1 = this.a(); byte var2 = 5; return var2; } private int a() { byte var1 = 5; return var1; } 另外剛試了,想額外確認一下。是不是假如這樣定義其實是不太有意義的? -keep public class com.example.mylibrary.classB{ private *;} 因為假如classB內的public method沒被別的class用到的話,那就會不見了。 會造成包成jar後要用時,卻沒辦法給拉public method。自己這樣想不知是否是這樣呢? ※ 編輯: goodsheng (114.42.32.32), 09/13/2017 18:08:06
文章代碼(AID): #1PkA-9nO (AndroidDev)
文章代碼(AID): #1PkA-9nO (AndroidDev)